06242031335f996687b8fb5b5fd699f2873176ef
[platform/upstream/libzypp.git] / cmake / modules / FindGettext.cmake
1 # - Find GNU gettext tools
2 # This module looks for the GNU gettext tools. This module defines the
3 # following values:
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.
7 #
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.
14
15 FIND_PROGRAM(GETTEXT_MSGMERGE_EXECUTABLE msgmerge)
16
17 FIND_PROGRAM(GETTEXT_MSGFMT_EXECUTABLE msgfmt)
18
19 #
20 # Macro to be called if .po files are shipped as tar ball.
21 #
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.
25 #
26 # We expect a po-file tarball to unpack the .po file to the current
27 # directory!
28 #
29 MACRO( GETTEXT_CREATE_TARBALL_TRANSLATIONS _translation_set_basename )
30
31         IF( NOT USE_TRANSLATION_SET )
32                 SET( USE_TRANSLATION_SET ${_translation_set_basename} )
33         ENDIF( NOT USE_TRANSLATION_SET )
34
35         SET( DEFAULT_TRANSLATION_SET "${_translation_set_basename}-po.tar.bz2" )
36         SET( OVERLAY_TRANSLATION_SET "${USE_TRANSLATION_SET}-po.tar.bz2" )
37
38         MESSAGE( STATUS "Translation set: ${OVERLAY_TRANSLATION_SET}" )
39
40         EXECUTE_PROCESS(
41           COMMAND tar tfj ${CMAKE_CURRENT_SOURCE_DIR}/${DEFAULT_TRANSLATION_SET}
42           OUTPUT_VARIABLE TRANSLATION_SET_CONTENT_D
43         )
44         EXECUTE_PROCESS(
45           COMMAND tar tfj ${CMAKE_CURRENT_SOURCE_DIR}/${OVERLAY_TRANSLATION_SET}
46           OUTPUT_VARIABLE TRANSLATION_SET_CONTENT_O
47         )
48
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 './'.
51         EXECUTE_PROCESS(
52                 COMMAND echo ${TRANSLATION_SET_CONTENT_D} ${TRANSLATION_SET_CONTENT_O}
53                 COMMAND sed -n "/\\.po$/s%.*/%%p"
54                 COMMAND sort -u
55                 COMMAND awk "{printf $1\";\"}"
56                 OUTPUT_VARIABLE TRANSLATION_SET_CONTENT
57         )
58         MESSAGE( STATUS "Translations: ${TRANSLATION_SET_CONTENT}" )
59
60         # Create 'LANG.po's from po.tar.bz2
61         ADD_CUSTOM_COMMAND(
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}
66         )
67
68         # LANG.po ->msgfmt-> LANG.gmo
69         SET( _gmoFiles )
70         FOREACH( _currentPoFile ${TRANSLATION_SET_CONTENT} )
71
72                 GET_FILENAME_COMPONENT( _lang ${_currentPoFile} NAME_WE )
73                 SET( _gmoFile "${_lang}.gmo" )
74                 SET( _gmoFiles ${_gmoFiles} ${_gmoFile} )
75
76                 ADD_CUSTOM_COMMAND(
77                         OUTPUT ${_gmoFile}
78                         COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_currentPoFile}
79                         DEPENDS ${_currentPoFile}
80                 )
81
82                 INSTALL(
83                         FILES ${CMAKE_CURRENT_BINARY_DIR}/${_gmoFile}
84                         DESTINATION share/locale/${_lang}/LC_MESSAGES
85                         RENAME ${_translation_set_basename}.mo
86                 )
87
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}
92                 )
93
94         ENDFOREACH( _currentPoFile )
95
96         # build all .gmo files
97         ADD_CUSTOM_TARGET(
98                 translations ALL
99                 DEPENDS ${_gmoFiles}
100         )
101
102 ENDMACRO( GETTEXT_CREATE_TARBALL_TRANSLATIONS )
103
104 #
105 # Macro to be called if .po files are part of the source tree.
106 #
107 MACRO(GETTEXT_CREATE_TRANSLATIONS _moBasename _firstPoFile)
108
109    SET(_gmoFiles)
110    SET(firstPoFile)
111    SET(_addToAll)
112    IF(${_firstPoFile} STREQUAL "ALL")
113       SET(_addToAll "ALL")
114    else(${_firstPoFile} STREQUAL "ALL")
115       SET(firstPoFile ${_firstPoFile})
116    ENDIF(${_firstPoFile} STREQUAL "ALL")
117
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)
123
124       ADD_CUSTOM_COMMAND(
125          OUTPUT ${_gmoFile}
126          COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_absFile}
127          DEPENDS ${_absFile}
128       )
129
130       INSTALL(FILES ${_gmoFile} DESTINATION share/locale/${_lang}/LC_MESSAGES RENAME ${_moBasename}.mo)
131       SET(_gmoFiles ${_gmoFiles} ${_gmoFile})
132
133    ENDFOREACH (_currentPoFile )
134
135    ADD_CUSTOM_TARGET(translations ${_addToAll} DEPENDS ${_gmoFiles})
136
137 ENDMACRO(GETTEXT_CREATE_TRANSLATIONS )
138
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 )