Warning, /frameworks/kdelibs4support/cmake/modules/FindGettext.cmake is written in an unsupported language. File is not indexed.
0001 # Try to find Gettext functionality 0002 # Once done this will define 0003 # 0004 # GETTEXT_FOUND - system has Gettext 0005 # GETTEXT_INCLUDE_DIR - Gettext include directory 0006 # GETTEXT_LIBRARIES - Libraries needed to use Gettext 0007 0008 # TODO: This will enable translations only if Gettext functionality is 0009 # present in libc. Must have more robust system for release, where Gettext 0010 # functionality can also reside in standalone Gettext library, or the one 0011 # embedded within kdelibs (cf. gettext.m4 from Gettext source). 0012 # 0013 # Copyright (c) 2006, Chusslove Illich, <caslav.ilic@gmx.net> 0014 # 0015 # Redistribution and use is allowed according to the terms of the BSD license. 0016 # For details see the accompanying COPYING-CMAKE-SCRIPTS file. 0017 0018 0019 if (LIBC_HAS_DGETTEXT OR LIBINTL_HAS_DGETTEXT) 0020 0021 # in cache already 0022 set(GETTEXT_FOUND TRUE) 0023 0024 else (LIBC_HAS_DGETTEXT OR LIBINTL_HAS_DGETTEXT) 0025 0026 include(CheckLibraryExists) 0027 include(CheckFunctionExists) 0028 0029 find_path(GETTEXT_INCLUDE_DIR libintl.h) 0030 if(GETTEXT_INCLUDE_DIR) 0031 set(HAVE_LIBINTL_H 1) 0032 else(GETTEXT_INCLUDE_DIR) 0033 set(HAVE_LIBINTL_H 0) 0034 endif(GETTEXT_INCLUDE_DIR) 0035 0036 set(GETTEXT_LIBRARIES) 0037 0038 if (HAVE_LIBINTL_H) 0039 check_function_exists(dgettext LIBC_HAS_DGETTEXT) 0040 if (LIBC_HAS_DGETTEXT) 0041 set(GETTEXT_SOURCE "built in libc") 0042 set(GETTEXT_FOUND TRUE) 0043 else (LIBC_HAS_DGETTEXT) 0044 find_library(LIBINTL_LIBRARY NAMES intl libintl ) 0045 0046 check_library_exists(${LIBINTL_LIBRARY} "dgettext" "" LIBINTL_HAS_DGETTEXT) 0047 if (LIBINTL_HAS_DGETTEXT) 0048 set(GETTEXT_SOURCE "in ${LIBINTL_LIBRARY}") 0049 set(GETTEXT_LIBRARIES ${LIBINTL_LIBRARY}) 0050 set(GETTEXT_FOUND TRUE) 0051 endif (LIBINTL_HAS_DGETTEXT) 0052 endif (LIBC_HAS_DGETTEXT) 0053 endif (HAVE_LIBINTL_H) 0054 0055 if (GETTEXT_FOUND) 0056 if (NOT Gettext_FIND_QUIETLY) 0057 message(STATUS "Found Gettext: ${GETTEXT_SOURCE}") 0058 endif (NOT Gettext_FIND_QUIETLY) 0059 else (GETTEXT_FOUND) 0060 if (Gettext_FIND_REQUIRED) 0061 message(FATAL_ERROR "Could NOT find Gettext") 0062 endif (Gettext_FIND_REQUIRED) 0063 endif (GETTEXT_FOUND) 0064 0065 mark_as_advanced(GETTEXT_INCLUDE_DIR GETTEXT_LIBRARIES) 0066 0067 endif (LIBC_HAS_DGETTEXT OR LIBINTL_HAS_DGETTEXT) 0068 0069 0070 # - Find GNU gettext tools 0071 # This module looks for the GNU gettext tools. This module defines the 0072 # following values: 0073 # GETTEXT_MSGMERGE_EXECUTABLE: the full path to the msgmerge tool. 0074 # GETTEXT_MSGFMT_EXECUTABLE: the full path to the msgfmt tool. 0075 # GETTEXT_FOUND: True if gettext has been found. 0076 # 0077 # Additionally it provides the following macros: 0078 # GETTEXT_CREATE_TRANSLATIONS ( outputFile [ALL] file1 ... fileN ) 0079 # This will create a target "translations" which will convert the 0080 # given input po files into the binary output mo file. If the 0081 # ALL option is used, the translations will also be created when 0082 # building the default target. 0083 # GETTEXT_PROCESS_POT( <potfile> [ALL] [INSTALL_DESTINATION <destdir>] <lang1> <lang2> ... ) 0084 # Process the given pot file to mo files. 0085 # If INSTALL_DESTINATION is given then automatically install rules will be created, 0086 # the language subdirectory will be taken into account (by default use share/locale/). 0087 # If ALL is specified, the pot file is processed when building the all traget. 0088 # It creates a custom target "potfile". 0089 # 0090 # GETTEXT_PROCESS_PO_FILES(<lang> [ALL] [INSTALL_DESTINATION <dir>] <po1> <po2> ...) 0091 # Process the given po files to mo files for the given language. 0092 # If INSTALL_DESTINATION is given then automatically install rules will be created, 0093 # the language subdirectory will be taken into account (by default use share/locale/). 0094 # If ALL is specified, the po files are processed when building the all traget. 0095 # It creates a custom target "pofiles". 0096 0097 0098 0099 FIND_PROGRAM(GETTEXT_MSGMERGE_EXECUTABLE msgmerge) 0100 0101 FIND_PROGRAM(GETTEXT_MSGFMT_EXECUTABLE msgfmt) 0102 0103 FUNCTION(_GETTEXT_GET_UNIQUE_TARGET_NAME _name _unique_name) 0104 SET(propertyName "_GETTEXT_UNIQUE_COUNTER_${_name}") 0105 GET_PROPERTY(currentCounter GLOBAL PROPERTY "${propertyName}") 0106 IF(NOT currentCounter) 0107 SET(currentCounter 1) 0108 ENDIF() 0109 SET(${_unique_name} "${_name}_${currentCounter}" PARENT_SCOPE) 0110 MATH(EXPR currentCounter "${currentCounter} + 1") 0111 SET_PROPERTY(GLOBAL PROPERTY ${propertyName} ${currentCounter} ) 0112 ENDFUNCTION() 0113 0114 MACRO(GETTEXT_CREATE_TRANSLATIONS _potFile _firstPoFile) 0115 0116 SET(_gmoFiles) 0117 GET_FILENAME_COMPONENT(_potName ${_potFile} NAME) 0118 STRING(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _potBasename ${_potName}) 0119 GET_FILENAME_COMPONENT(_absPotFile ${_potFile} ABSOLUTE) 0120 0121 SET(_addToAll) 0122 IF(${_firstPoFile} STREQUAL "ALL") 0123 SET(_addToAll "ALL") 0124 SET(_firstPoFile) 0125 ENDIF(${_firstPoFile} STREQUAL "ALL") 0126 0127 FOREACH (_currentPoFile ${ARGN}) 0128 GET_FILENAME_COMPONENT(_absFile ${_currentPoFile} ABSOLUTE) 0129 GET_FILENAME_COMPONENT(_abs_PATH ${_absFile} PATH) 0130 GET_FILENAME_COMPONENT(_lang ${_absFile} NAME_WE) 0131 SET(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo) 0132 0133 ADD_CUSTOM_COMMAND( 0134 OUTPUT ${_gmoFile} 0135 COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --quiet --update --backup=none -s ${_absFile} ${_absPotFile} 0136 COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_absFile} 0137 DEPENDS ${_absPotFile} ${_absFile} 0138 ) 0139 0140 INSTALL(FILES ${_gmoFile} DESTINATION share/locale/${_lang}/LC_MESSAGES RENAME ${_potBasename}.mo) 0141 SET(_gmoFiles ${_gmoFiles} ${_gmoFile}) 0142 0143 ENDFOREACH (_currentPoFile ) 0144 0145 IF(NOT TARGET translations) 0146 ADD_CUSTOM_TARGET(translations) 0147 ENDIF() 0148 0149 _GETTEXT_GET_UNIQUE_TARGET_NAME(translations uniqueTargetName) 0150 0151 ADD_CUSTOM_TARGET(${uniqueTargetName} ${_addToAll} DEPENDS ${_gmoFiles}) 0152 0153 ADD_DEPENDENCIES(translations ${uniqueTargetName}) 0154 0155 ENDMACRO(GETTEXT_CREATE_TRANSLATIONS ) 0156 0157 # GETTEXT_PROCESS_POT( <potfile> [ALL] [INSTALL_DESTINATION <destdir>] <lang1> <lang2> ... ) 0158 MACRO(GETTEXT_PROCESS_POT_FILE _potFile) 0159 0160 SET(_gmoFiles) 0161 SET(_args ${ARGN}) 0162 SET(_addToAll) 0163 SET(_installDest) 0164 0165 IF(_args) 0166 LIST(GET _args 0 _tmp) 0167 IF("${_tmp}" STREQUAL "ALL") 0168 SET(_addToAll ALL) 0169 LIST(REMOVE_AT _args 0) 0170 ENDIF("${_tmp}" STREQUAL "ALL") 0171 ENDIF(_args) 0172 0173 IF(_args) 0174 LIST(GET _args 0 _tmp) 0175 IF("${_tmp}" STREQUAL "INSTALL_DESTINATION") 0176 LIST(GET _args 1 _installDest ) 0177 LIST(REMOVE_AT _args 0 1) 0178 ENDIF("${_tmp}" STREQUAL "INSTALL_DESTINATION") 0179 ENDIF(_args) 0180 0181 GET_FILENAME_COMPONENT(_potName ${_potFile} NAME) 0182 STRING(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _potBasename ${_potName}) 0183 GET_FILENAME_COMPONENT(_absPotFile ${_potFile} ABSOLUTE) 0184 0185 # message(STATUS "1 all ${_addToAll} dest ${_installDest} args: ${_args}") 0186 0187 FOREACH (_lang ${_args}) 0188 SET(_poFile "${CMAKE_CURRENT_BINARY_DIR}/${_lang}.po") 0189 SET(_gmoFile "${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo") 0190 0191 ADD_CUSTOM_COMMAND( 0192 OUTPUT "${_poFile}" 0193 COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --quiet --update --backup=none -s ${_poFile} ${_absPotFile} 0194 DEPENDS ${_absPotFile} 0195 ) 0196 0197 ADD_CUSTOM_COMMAND( 0198 OUTPUT "${_gmoFile}" 0199 COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_poFile} 0200 DEPENDS ${_absPotFile} ${_poFile} 0201 ) 0202 0203 IF(_installDest) 0204 INSTALL(FILES ${_gmoFile} DESTINATION ${_installDest}/${_lang}/LC_MESSAGES RENAME ${_potBasename}.mo) 0205 ENDIF(_installDest) 0206 LIST(APPEND _gmoFiles ${_gmoFile}) 0207 0208 ENDFOREACH (_lang ) 0209 0210 IF(NOT TARGET potfile) 0211 ADD_CUSTOM_TARGET(potfile) 0212 ENDIF() 0213 0214 _GETTEXT_GET_UNIQUE_TARGET_NAME( potfile uniqueTargetName) 0215 0216 ADD_CUSTOM_TARGET(${uniqueTargetName} ${_addToAll} DEPENDS ${_gmoFiles}) 0217 0218 ADD_DEPENDENCIES(potfile ${uniqueTargetName}) 0219 0220 ENDMACRO(GETTEXT_PROCESS_POT_FILE) 0221 0222 0223 # GETTEXT_PROCESS_PO_FILES(<lang> [ALL] [INSTALL_DESTINATION <dir>] <po1> <po2> ...) 0224 MACRO(GETTEXT_PROCESS_PO_FILES _lang) 0225 SET(_gmoFiles) 0226 SET(_args ${ARGN}) 0227 SET(_addToAll) 0228 SET(_installDest) 0229 0230 LIST(GET _args 0 _tmp) 0231 IF("${_tmp}" STREQUAL "ALL") 0232 SET(_addToAll ALL) 0233 LIST(REMOVE_AT _args 0) 0234 ENDIF("${_tmp}" STREQUAL "ALL") 0235 0236 LIST(GET _args 0 _tmp) 0237 IF("${_tmp}" STREQUAL "INSTALL_DESTINATION") 0238 LIST(GET _args 1 _installDest ) 0239 LIST(REMOVE_AT _args 0 1) 0240 ENDIF("${_tmp}" STREQUAL "INSTALL_DESTINATION") 0241 0242 LIST(GET _args 0 _tmp) 0243 IF("${_tmp}" STREQUAL "PO_FILES") 0244 LIST(REMOVE_AT _args 0) 0245 ELSE() 0246 SET(_deprecation_arg DEPRECATION) 0247 IF(CMAKE_VERSION VERSION_LESS 3.0.0) 0248 SET(_deprecation_arg AUTHOR_WARNING) 0249 ENDIF() 0250 MESSAGE(${_deprecation_arg} "GETTEXT_PROCESS_PO_FILES without a PO_FILES argument is deprecated") 0251 ENDIF() 0252 0253 FOREACH(_current_PO_FILE ${_args}) 0254 GET_FILENAME_COMPONENT(_name ${_current_PO_FILE} NAME) 0255 STRING(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _basename ${_name}) 0256 SET(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.gmo) 0257 add_custom_command(OUTPUT ${_gmoFile} 0258 COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_current_PO_FILE} 0259 WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" 0260 DEPENDS ${_current_PO_FILE} 0261 ) 0262 0263 IF(_installDest) 0264 INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.gmo DESTINATION ${_installDest}/${_lang}/LC_MESSAGES/ RENAME ${_basename}.mo) 0265 ENDIF(_installDest) 0266 LIST(APPEND _gmoFiles ${_gmoFile}) 0267 ENDFOREACH(_current_PO_FILE) 0268 0269 IF(NOT TARGET pofiles) 0270 ADD_CUSTOM_TARGET(pofiles) 0271 ENDIF() 0272 0273 _GETTEXT_GET_UNIQUE_TARGET_NAME( pofiles uniqueTargetName) 0274 0275 ADD_CUSTOM_TARGET(${uniqueTargetName} ${_addToAll} DEPENDS ${_gmoFiles}) 0276 0277 ADD_DEPENDENCIES(pofiles ${uniqueTargetName}) 0278 ENDMACRO(GETTEXT_PROCESS_PO_FILES) 0279 0280 0281 #IF (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE ) 0282 # SET(GETTEXT_FOUND TRUE) 0283 #ELSE (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE ) 0284 # SET(GETTEXT_FOUND FALSE) 0285 # IF (GetText_REQUIRED) 0286 # MESSAGE(FATAL_ERROR "GetText not found") 0287 # ENDIF (GetText_REQUIRED) 0288 #ENDIF (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE ) 0289 0290 0291