Browse Source

Add macros GETTEXT_PROCESS_POT() and GETTEXT_PROCESS_PO_FILES()

These macros (functions actually) can be used to process pot and
po files. Patch prepared by Raphael Kubo da Costa.

Alex
Alex Neundorf 14 năm trước cách đây
mục cha
commit
431c8eb44c
1 tập tin đã thay đổi với 91 bổ sung7 xóa
  1. 91 7
      Modules/FindGettext.cmake

+ 91 - 7
Modules/FindGettext.cmake

@@ -11,9 +11,22 @@
 #    given input po files into the binary output mo file. If the 
 #    given input po files into the binary output mo file. If the 
 #    ALL option is used, the translations will also be created when
 #    ALL option is used, the translations will also be created when
 #    building the default target.
 #    building the default target.
+# GETTEXT_PROCESS_POT( <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 traget.
+#     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 traget.
+#     It creates a custom target "pofiles".
 
 
 #=============================================================================
 #=============================================================================
 # Copyright 2007-2009 Kitware, Inc.
 # Copyright 2007-2009 Kitware, Inc.
+# Copyright 2007      Alexander Neundorf <[email protected]>
 #
 #
 # Distributed under the OSI-approved BSD License (the "License");
 # Distributed under the OSI-approved BSD License (the "License");
 # see accompanying file Copyright.txt for details.
 # see accompanying file Copyright.txt for details.
@@ -29,6 +42,8 @@ FIND_PROGRAM(GETTEXT_MSGMERGE_EXECUTABLE msgmerge)
 
 
 FIND_PROGRAM(GETTEXT_MSGFMT_EXECUTABLE msgfmt)
 FIND_PROGRAM(GETTEXT_MSGFMT_EXECUTABLE msgfmt)
 
 
+INCLUDE(CMakeParseArguments)
+
 MACRO(GETTEXT_CREATE_TRANSLATIONS _potFile _firstPoFileArg)
 MACRO(GETTEXT_CREATE_TRANSLATIONS _potFile _firstPoFileArg)
    # make it a real variable, so we can modify it here
    # make it a real variable, so we can modify it here
    SET(_firstPoFile "${_firstPoFileArg}")
    SET(_firstPoFile "${_firstPoFileArg}")
@@ -49,14 +64,14 @@ MACRO(GETTEXT_CREATE_TRANSLATIONS _potFile _firstPoFileArg)
       GET_FILENAME_COMPONENT(_lang ${_absFile} NAME_WE)
       GET_FILENAME_COMPONENT(_lang ${_absFile} NAME_WE)
       SET(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo)
       SET(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo)
 
 
-      ADD_CUSTOM_COMMAND( 
-         OUTPUT ${_gmoFile} 
+      ADD_CUSTOM_COMMAND(
+         OUTPUT ${_gmoFile}
          COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --quiet --update --backup=none -s ${_absFile} ${_absPotFile}
          COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --quiet --update --backup=none -s ${_absFile} ${_absPotFile}
          COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_absFile}
          COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_absFile}
-         DEPENDS ${_absPotFile} ${_absFile} 
+         DEPENDS ${_absPotFile} ${_absFile}
       )
       )
 
 
-      INSTALL(FILES ${_gmoFile} DESTINATION share/locale/${_lang}/LC_MESSAGES RENAME ${_potBasename}.mo) 
+      INSTALL(FILES ${_gmoFile} DESTINATION share/locale/${_lang}/LC_MESSAGES RENAME ${_potBasename}.mo)
       SET(_gmoFiles ${_gmoFiles} ${_gmoFile})
       SET(_gmoFiles ${_gmoFiles} ${_gmoFile})
 
 
    ENDFOREACH (_currentPoFile )
    ENDFOREACH (_currentPoFile )
@@ -65,6 +80,78 @@ MACRO(GETTEXT_CREATE_TRANSLATIONS _potFile _firstPoFileArg)
 
 
 ENDMACRO(GETTEXT_CREATE_TRANSLATIONS )
 ENDMACRO(GETTEXT_CREATE_TRANSLATIONS )
 
 
+
+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(_potBasename ${_potFile} NAME_WE)
+   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(_parsedArguments_INSTALL_DESTINATION)
+      LIST(APPEND _gmoFiles ${_gmoFile})
+   ENDFOREACH (_lang )
+
+   IF(_parsedArguments_ALL)
+      ADD_CUSTOM_TARGET(potfiles ALL DEPENDS ${_gmoFiles})
+   ELSE(_parsedArguments_ALL)
+      ADD_CUSTOM_TARGET(potfiles DEPENDS ${_gmoFiles})
+   ENDIF(_parsedArguments_ALL)
+ENDFUNCTION(GETTEXT_PROCESS_POT_FILE)
+
+
+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(_basename ${_current_PO_FILE} NAME_WE)
+      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(_parsedArguments_INSTALL_DESTINATION)
+      LIST(APPEND _gmoFiles ${_gmoFile})
+   ENDFOREACH(_current_PO_FILE)
+
+   IF(_parsedArguments_ALL)
+      ADD_CUSTOM_TARGET(pofiles ALL DEPENDS ${_gmoFiles})
+   ELSE(_parsedArguments_ALL)
+      ADD_CUSTOM_TARGET(pofiles DEPENDS ${_gmoFiles})
+   ENDIF(_parsedArguments_ALL)
+ENDFUNCTION(GETTEXT_PROCESS_PO_FILES)
+
 IF (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE )
 IF (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE )
    SET(GETTEXT_FOUND TRUE)
    SET(GETTEXT_FOUND TRUE)
 ELSE (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE )
 ELSE (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE )
@@ -73,6 +160,3 @@ ELSE (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE )
       MESSAGE(FATAL_ERROR "GetText not found")
       MESSAGE(FATAL_ERROR "GetText not found")
    ENDIF (GetText_REQUIRED)
    ENDIF (GetText_REQUIRED)
 ENDIF (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE )
 ENDIF (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE )
-
-
-