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