| # Distributed under the OSI-approved BSD 3-Clause License.  See accompanying | 
 | # file Copyright.txt or https://cmake.org/licensing for details. | 
 |  | 
 | #[=======================================================================[.rst: | 
 | FindGettext | 
 | ----------- | 
 |  | 
 | Find GNU gettext tools | 
 |  | 
 | This module looks for the GNU gettext tools.  This module defines the | 
 | following values: | 
 |  | 
 | :: | 
 |  | 
 |   GETTEXT_MSGMERGE_EXECUTABLE: the full path to the msgmerge tool. | 
 |   GETTEXT_MSGFMT_EXECUTABLE: the full path to the msgfmt tool. | 
 |   GETTEXT_FOUND: True if gettext has been found. | 
 |   GETTEXT_VERSION_STRING: the version of gettext found (since CMake 2.8.8) | 
 |  | 
 |  | 
 |  | 
 | Additionally it provides the following macros: | 
 |  | 
 | GETTEXT_CREATE_TRANSLATIONS ( outputFile [ALL] file1 ...  fileN ) | 
 |  | 
 | :: | 
 |  | 
 |     This will create a target "translations" which will convert the | 
 |     given input po files into the binary output mo file. If the | 
 |     ALL option is used, the translations will also be created when | 
 |     building the default target. | 
 |  | 
 | GETTEXT_PROCESS_POT_FILE( <potfile> [ALL] [INSTALL_DESTINATION <destdir>] | 
 | LANGUAGES <lang1> <lang2> ...  ) | 
 |  | 
 | :: | 
 |  | 
 |      Process the given pot file to mo files. | 
 |      If INSTALL_DESTINATION is given then automatically install rules will | 
 |      be created, the language subdirectory will be taken into account | 
 |      (by default use share/locale/). | 
 |      If ALL is specified, the pot file is processed when building the all target. | 
 |      It creates a custom target "potfile". | 
 |  | 
 | GETTEXT_PROCESS_PO_FILES( <lang> [ALL] [INSTALL_DESTINATION <dir>] | 
 | PO_FILES <po1> <po2> ...  ) | 
 |  | 
 | :: | 
 |  | 
 |      Process the given po files to mo files for the given language. | 
 |      If INSTALL_DESTINATION is given then automatically install rules will | 
 |      be created, the language subdirectory will be taken into account | 
 |      (by default use share/locale/). | 
 |      If ALL is specified, the po files are processed when building the all target. | 
 |      It creates a custom target "pofiles". | 
 |  | 
 | .. versionadded:: 3.2 | 
 |   If you wish to use the Gettext library (libintl), use :module:`FindIntl`. | 
 | #]=======================================================================] | 
 |  | 
 | find_program(GETTEXT_MSGMERGE_EXECUTABLE msgmerge) | 
 |  | 
 | find_program(GETTEXT_MSGFMT_EXECUTABLE msgfmt) | 
 |  | 
 | if(GETTEXT_MSGMERGE_EXECUTABLE) | 
 |   execute_process(COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --version | 
 |                   OUTPUT_VARIABLE gettext_version | 
 |                   ERROR_QUIET | 
 |                   OUTPUT_STRIP_TRAILING_WHITESPACE) | 
 |   get_filename_component(msgmerge_name ${GETTEXT_MSGMERGE_EXECUTABLE} NAME) | 
 |   get_filename_component(msgmerge_namewe ${GETTEXT_MSGMERGE_EXECUTABLE} NAME_WE) | 
 |   if (gettext_version MATCHES "^(${msgmerge_name}|${msgmerge_namewe}) \\([^\\)]*\\) ([0-9\\.]+[^ \n]*)") | 
 |     set(GETTEXT_VERSION_STRING "${CMAKE_MATCH_2}") | 
 |   endif() | 
 |   unset(gettext_version) | 
 |   unset(msgmerge_name) | 
 |   unset(msgmerge_namewe) | 
 | endif() | 
 |  | 
 | include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) | 
 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(Gettext | 
 |                                   REQUIRED_VARS GETTEXT_MSGMERGE_EXECUTABLE GETTEXT_MSGFMT_EXECUTABLE | 
 |                                   VERSION_VAR GETTEXT_VERSION_STRING) | 
 |  | 
 | function(_GETTEXT_GET_UNIQUE_TARGET_NAME _name _unique_name) | 
 |   set(propertyName "_GETTEXT_UNIQUE_COUNTER_${_name}") | 
 |   get_property(currentCounter GLOBAL PROPERTY "${propertyName}") | 
 |   if(NOT currentCounter) | 
 |     set(currentCounter 1) | 
 |   endif() | 
 |   set(${_unique_name} "${_name}_${currentCounter}" PARENT_SCOPE) | 
 |   math(EXPR currentCounter "${currentCounter} + 1") | 
 |   set_property(GLOBAL PROPERTY ${propertyName} ${currentCounter} ) | 
 | endfunction() | 
 |  | 
 | macro(GETTEXT_CREATE_TRANSLATIONS _potFile _firstPoFileArg) | 
 |   # make it a real variable, so we can modify it here | 
 |   set(_firstPoFile "${_firstPoFileArg}") | 
 |  | 
 |   set(_gmoFiles) | 
 |   get_filename_component(_potName ${_potFile} NAME) | 
 |   string(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _potBasename ${_potName}) | 
 |   get_filename_component(_absPotFile ${_potFile} ABSOLUTE) | 
 |  | 
 |   set(_addToAll) | 
 |   if(${_firstPoFile} STREQUAL "ALL") | 
 |     set(_addToAll "ALL") | 
 |     set(_firstPoFile) | 
 |   endif() | 
 |  | 
 |   foreach (_currentPoFile ${_firstPoFile} ${ARGN}) | 
 |     get_filename_component(_absFile ${_currentPoFile} ABSOLUTE) | 
 |     get_filename_component(_abs_PATH ${_absFile} PATH) | 
 |     get_filename_component(_lang ${_absFile} NAME_WE) | 
 |     set(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo) | 
 |  | 
 |     add_custom_command( | 
 |       OUTPUT ${_gmoFile} | 
 |       COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --quiet --update --backup=none -s ${_absFile} ${_absPotFile} | 
 |       COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_absFile} | 
 |       DEPENDS ${_absPotFile} ${_absFile} | 
 |     ) | 
 |  | 
 |     install(FILES ${_gmoFile} DESTINATION share/locale/${_lang}/LC_MESSAGES RENAME ${_potBasename}.mo) | 
 |     set(_gmoFiles ${_gmoFiles} ${_gmoFile}) | 
 |  | 
 |   endforeach () | 
 |  | 
 |   if(NOT TARGET translations) | 
 |     add_custom_target(translations) | 
 |   endif() | 
 |  | 
 |   _GETTEXT_GET_UNIQUE_TARGET_NAME(translations uniqueTargetName) | 
 |  | 
 |   add_custom_target(${uniqueTargetName} ${_addToAll} DEPENDS ${_gmoFiles}) | 
 |  | 
 |   add_dependencies(translations ${uniqueTargetName}) | 
 |  | 
 | endmacro() | 
 |  | 
 |  | 
 | function(GETTEXT_PROCESS_POT_FILE _potFile) | 
 |   set(_gmoFiles) | 
 |   set(_options ALL) | 
 |   set(_oneValueArgs INSTALL_DESTINATION) | 
 |   set(_multiValueArgs LANGUAGES) | 
 |  | 
 |   CMAKE_PARSE_ARGUMENTS(_parsedArguments "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN}) | 
 |  | 
 |   get_filename_component(_potName ${_potFile} NAME) | 
 |   string(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _potBasename ${_potName}) | 
 |   get_filename_component(_absPotFile ${_potFile} ABSOLUTE) | 
 |  | 
 |   foreach (_lang ${_parsedArguments_LANGUAGES}) | 
 |     set(_poFile  "${CMAKE_CURRENT_BINARY_DIR}/${_lang}.po") | 
 |     set(_gmoFile "${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo") | 
 |  | 
 |     add_custom_command( | 
 |       OUTPUT "${_poFile}" | 
 |       COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --quiet --update --backup=none -s ${_poFile} ${_absPotFile} | 
 |       DEPENDS ${_absPotFile} | 
 |     ) | 
 |  | 
 |     add_custom_command( | 
 |       OUTPUT "${_gmoFile}" | 
 |       COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_poFile} | 
 |       DEPENDS ${_absPotFile} ${_poFile} | 
 |     ) | 
 |  | 
 |     if(_parsedArguments_INSTALL_DESTINATION) | 
 |       install(FILES ${_gmoFile} DESTINATION ${_parsedArguments_INSTALL_DESTINATION}/${_lang}/LC_MESSAGES RENAME ${_potBasename}.mo) | 
 |     endif() | 
 |     list(APPEND _gmoFiles ${_gmoFile}) | 
 |   endforeach () | 
 |  | 
 |   if(NOT TARGET potfiles) | 
 |     add_custom_target(potfiles) | 
 |   endif() | 
 |  | 
 |   _GETTEXT_GET_UNIQUE_TARGET_NAME( potfiles uniqueTargetName) | 
 |  | 
 |   if(_parsedArguments_ALL) | 
 |     add_custom_target(${uniqueTargetName} ALL DEPENDS ${_gmoFiles}) | 
 |   else() | 
 |     add_custom_target(${uniqueTargetName} DEPENDS ${_gmoFiles}) | 
 |   endif() | 
 |  | 
 |   add_dependencies(potfiles ${uniqueTargetName}) | 
 |  | 
 | endfunction() | 
 |  | 
 |  | 
 | function(GETTEXT_PROCESS_PO_FILES _lang) | 
 |   set(_options ALL) | 
 |   set(_oneValueArgs INSTALL_DESTINATION) | 
 |   set(_multiValueArgs PO_FILES) | 
 |   set(_gmoFiles) | 
 |  | 
 |   CMAKE_PARSE_ARGUMENTS(_parsedArguments "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN}) | 
 |  | 
 |   foreach(_current_PO_FILE ${_parsedArguments_PO_FILES}) | 
 |     get_filename_component(_name ${_current_PO_FILE} NAME) | 
 |     string(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _basename ${_name}) | 
 |     set(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.gmo) | 
 |     add_custom_command(OUTPUT ${_gmoFile} | 
 |       COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_current_PO_FILE} | 
 |       WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" | 
 |       DEPENDS ${_current_PO_FILE} | 
 |     ) | 
 |  | 
 |     if(_parsedArguments_INSTALL_DESTINATION) | 
 |       install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.gmo DESTINATION ${_parsedArguments_INSTALL_DESTINATION}/${_lang}/LC_MESSAGES/ RENAME ${_basename}.mo) | 
 |     endif() | 
 |     list(APPEND _gmoFiles ${_gmoFile}) | 
 |   endforeach() | 
 |  | 
 |  | 
 |   if(NOT TARGET pofiles) | 
 |     add_custom_target(pofiles) | 
 |   endif() | 
 |  | 
 |   _GETTEXT_GET_UNIQUE_TARGET_NAME( pofiles uniqueTargetName) | 
 |  | 
 |   if(_parsedArguments_ALL) | 
 |     add_custom_target(${uniqueTargetName} ALL DEPENDS ${_gmoFiles}) | 
 |   else() | 
 |     add_custom_target(${uniqueTargetName} DEPENDS ${_gmoFiles}) | 
 |   endif() | 
 |  | 
 |   add_dependencies(pofiles ${uniqueTargetName}) | 
 |  | 
 | endfunction() |