1 # - Find GNU gettext tools
2 # This module looks for the GNU gettext tools. This module defines the
4 # GETTEXT_MSGMERGE_EXECUTABLE: the full path to the msgmerge tool.
5 # GETTEXT_MSGFMT_EXECUTABLE: the full path to the msgfmt tool.
6 # GETTEXT_FOUND: True if gettext has been found.
8 # Additionally it provides the following macros:
9 # GETTEXT_CREATE_TRANSLATIONS ( _moBasename [ALL] file1 ... fileN )
10 # This will create a target "translations" which will convert the
11 # given input po files into the binary output mo file. If the
12 # ALL option is used, the translations will also be created when
13 # building the default target.
15 FIND_PROGRAM(GETTEXT_MSGMERGE_EXECUTABLE msgmerge)
17 FIND_PROGRAM(GETTEXT_MSGFMT_EXECUTABLE msgfmt)
20 # Macro to be called if .po files are shipped as tar ball.
22 # _translation_set_basename: Serves two purposes; a) the stem of the
23 # default tarball %{_translation_set_basename}-po.tar.bz2, optionally
24 # overlayed by -DUSE_TRANSLATION_SET; b) the basename of the .gmo files.
26 # We expect a po-file tarball to unpack the .po file to the current
29 MACRO( GETTEXT_CREATE_TARBALL_TRANSLATIONS _translation_set_basename )
31 IF( NOT USE_TRANSLATION_SET )
32 SET( USE_TRANSLATION_SET ${_translation_set_basename} )
33 ENDIF( NOT USE_TRANSLATION_SET )
35 SET( DEFAULT_TRANSLATION_SET "${_translation_set_basename}-po.tar.bz2" )
36 SET( OVERLAY_TRANSLATION_SET "${USE_TRANSLATION_SET}-po.tar.bz2" )
38 MESSAGE( STATUS "Translation set: ${OVERLAY_TRANSLATION_SET}" )
41 COMMAND tar tfj ${CMAKE_CURRENT_SOURCE_DIR}/${DEFAULT_TRANSLATION_SET}
42 OUTPUT_VARIABLE TRANSLATION_SET_CONTENT_D
45 COMMAND tar tfj ${CMAKE_CURRENT_SOURCE_DIR}/${OVERLAY_TRANSLATION_SET}
46 OUTPUT_VARIABLE TRANSLATION_SET_CONTENT_O
49 # For those not familiar with 'sed': the tarball might list './' and './*.po'.
50 # We process just the '*.po' lines and strip off any leading './'.
52 COMMAND echo ${TRANSLATION_SET_CONTENT_D} ${TRANSLATION_SET_CONTENT_O}
53 COMMAND sed -n "/\\.po$/s%.*/%%p"
55 COMMAND awk "{printf $1\";\"}"
56 OUTPUT_VARIABLE TRANSLATION_SET_CONTENT
58 MESSAGE( STATUS "Translations: ${TRANSLATION_SET_CONTENT}" )
60 # Create 'LANG.po's from po.tar.bz2
62 OUTPUT ${TRANSLATION_SET_CONTENT}
63 COMMAND tar xfj ${CMAKE_CURRENT_SOURCE_DIR}/${DEFAULT_TRANSLATION_SET}
64 COMMAND tar xfj ${CMAKE_CURRENT_SOURCE_DIR}/${OVERLAY_TRANSLATION_SET}
65 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${OVERLAY_TRANSLATION_SET} ${CMAKE_CURRENT_SOURCE_DIR}/${DEFAULT_TRANSLATION_SET}
68 # LANG.po ->msgfmt-> LANG.gmo
70 FOREACH( _currentPoFile ${TRANSLATION_SET_CONTENT} )
72 GET_FILENAME_COMPONENT( _lang ${_currentPoFile} NAME_WE )
73 SET( _gmoFile "${_lang}.gmo" )
74 SET( _gmoFiles ${_gmoFiles} ${_gmoFile} )
78 COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_currentPoFile}
79 DEPENDS ${_currentPoFile}
83 FILES ${CMAKE_CURRENT_BINARY_DIR}/${_gmoFile}
84 DESTINATION share/locale/${_lang}/LC_MESSAGES
85 RENAME ${_translation_set_basename}.mo
88 # the docs claim it can handle a list, but
89 SET_DIRECTORY_PROPERTIES( PROPERTIES
90 ADDITIONAL_MAKE_CLEAN_FILES ${_currentPoFile}
91 ADDITIONAL_MAKE_CLEAN_FILES ${_gmoFile}
94 ENDFOREACH( _currentPoFile )
96 # build all .gmo files
102 ENDMACRO( GETTEXT_CREATE_TARBALL_TRANSLATIONS )
105 # Macro to be called if .po files are part of the source tree.
107 MACRO(GETTEXT_CREATE_TRANSLATIONS _moBasename _firstPoFile)
112 IF(${_firstPoFile} STREQUAL "ALL")
114 else(${_firstPoFile} STREQUAL "ALL")
115 SET(firstPoFile ${_firstPoFile})
116 ENDIF(${_firstPoFile} STREQUAL "ALL")
118 FOREACH (_currentPoFile ${firstPoFile} ${ARGN})
119 GET_FILENAME_COMPONENT(_absFile ${_currentPoFile} ABSOLUTE)
120 GET_FILENAME_COMPONENT(_abs_PATH ${_absFile} PATH)
121 GET_FILENAME_COMPONENT(_lang ${_absFile} NAME_WE)
122 SET(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo)
126 COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_absFile}
130 INSTALL(FILES ${_gmoFile} DESTINATION share/locale/${_lang}/LC_MESSAGES RENAME ${_moBasename}.mo)
131 SET(_gmoFiles ${_gmoFiles} ${_gmoFile})
133 ENDFOREACH (_currentPoFile )
135 ADD_CUSTOM_TARGET(translations ${_addToAll} DEPENDS ${_gmoFiles})
137 ENDMACRO(GETTEXT_CREATE_TRANSLATIONS )
139 IF (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE )
140 SET(GETTEXT_FOUND TRUE)
141 ELSE (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE )
142 SET(GETTEXT_FOUND FALSE)
143 IF (GetText_REQUIRED)
144 MESSAGE(FATAL_ERROR "GetText not found")
145 ENDIF (GetText_REQUIRED)
146 ENDIF (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE )