diff options
-rw-r--r-- | CMake/Translations.cmake | 54 | ||||
-rw-r--r-- | README.cmake | 1 | ||||
-rw-r--r-- | po/CMakeLists.txt | 42 |
3 files changed, 72 insertions, 25 deletions
diff --git a/CMake/Translations.cmake b/CMake/Translations.cmake index a26bf1c17..1b9781d69 100644 --- a/CMake/Translations.cmake +++ b/CMake/Translations.cmake @@ -1,11 +1,30 @@ # translations.cmake - Translations using APT's translation system. # Copyright (C) 2009, 2016 Julian Andres Klode <jak@debian.org> -function(apt_add_translation_domain domain) - set(targets ${ARGN}) +function(apt_add_translation_domain) + set(options) + set(oneValueArgs DOMAIN) + set(multiValueArgs TARGETS SCRIPTS) + cmake_parse_arguments(NLS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) # Build the list of source files of the target set(files "") set(abs_files "") + set(scripts "") + set(abs_scripts "") + set(targets ${NLS_TARGETS}) + set(domain ${NLS_DOMAIN}) + foreach(source ${NLS_SCRIPTS}) + string(SUBSTRING ${source} 0 1 init_char) + string(COMPARE EQUAL ${init_char} "/" is_absolute) + if (${is_absolute}) + set(file "${source}") + else() + set(file "${CMAKE_CURRENT_SOURCE_DIR}/${source}") + endif() + file(RELATIVE_PATH relfile ${PROJECT_SOURCE_DIR} ${file}) + list(APPEND scripts ${relfile}) + list(APPEND abs_scripts ${file}) + endforeach() foreach(target ${targets}) get_target_property(source_dir ${target} SOURCE_DIR) get_target_property(sources ${target} SOURCES) @@ -25,15 +44,38 @@ function(apt_add_translation_domain domain) target_compile_definitions(${target} PRIVATE -DAPT_DOMAIN="${domain}") endforeach() - # Create the template for this specific sub-domain - add_custom_command (OUTPUT ${PROJECT_BINARY_DIR}/${domain}.pot + if("${scripts}" STREQUAL "") + set(sh_pot "/dev/null") + else() + set(sh_pot ${PROJECT_BINARY_DIR}/${domain}.sh.pot) + # Create the template for this specific sub-domain + add_custom_command (OUTPUT ${sh_pot} + COMMAND xgettext --add-comments --foreign -L Shell + -o ${sh_pot} ${scripts} + DEPENDS ${abs_scripts} + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + ) + endif() + + + add_custom_command (OUTPUT ${PROJECT_BINARY_DIR}/${domain}.c.pot COMMAND xgettext --add-comments --foreign -k_ -kN_ - --add-location=file --keyword=P_:1,2 - -o ${PROJECT_BINARY_DIR}/${domain}.pot ${files} + --keyword=P_:1,2 + -o ${PROJECT_BINARY_DIR}/${domain}.c.pot ${files} DEPENDS ${abs_files} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} ) + add_custom_command (OUTPUT ${PROJECT_BINARY_DIR}/${domain}.pot + COMMAND msgcomm --more-than=0 --sort-by-file + ${sh_pot} + ${PROJECT_BINARY_DIR}/${domain}.c.pot + --output=${PROJECT_BINARY_DIR}/${domain}.pot + DEPENDS ${sh_pot} + ${PROJECT_BINARY_DIR}/${domain}.c.pot + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + ) + # Build .mo files file(GLOB translations "${PROJECT_SOURCE_DIR}/po/*.po") list(SORT translations) diff --git a/README.cmake b/README.cmake index a993b2589..1a4d2a448 100644 --- a/README.cmake +++ b/README.cmake @@ -32,6 +32,5 @@ TODO The following features have not been implemented yet: - Translated docbook guides - - dselect translations - unit tests - update-po diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt index dc3622156..c7dfcb0fb 100644 --- a/po/CMakeLists.txt +++ b/po/CMakeLists.txt @@ -1,22 +1,28 @@ -apt_add_translation_domain(libapt-pkg${APT_PKG_MAJOR} apt-pkg) - -apt_add_translation_domain(apt # Domain - apt apt-cache apt-get apt-config apt-cdrom - apt-helper apt-mark - apt-private - # Methods - file copy store gpgv cdrom http https ftp rred rsh - mirror +apt_add_translation_domain( + DOMAIN libapt-pkg${APT_PKG_MAJOR} + TARGETS apt-pkg ) +apt_add_translation_domain( + DOMAIN apt + TARGETS apt apt-cache apt-get apt-config apt-cdrom apt-helper apt-mark + apt-private + # Methods + file copy store gpgv cdrom http https ftp rred rsh mirror + SCRIPTS ../dselect/install ../dselect/update +) -apt_add_translation_domain(apt-utils # Domain - apt-sortpkgs - apt-extracttemplates - apt-internal-solver - apt-dump-solver - apt-internal-planner - apt-ftparchive) +apt_add_translation_domain( + DOMAIN apt-utils + TARGETS apt-sortpkgs + apt-extracttemplates + apt-internal-solver + apt-dump-solver + apt-internal-planner + apt-ftparchive +) -# Add the translations for libapt-inst, and set the translation domain. -apt_add_translation_domain(libapt-inst${APT_INST_MAJOR} apt-inst) +apt_add_translation_domain( + DOMAIN libapt-inst${APT_INST_MAJOR} + TARGETS apt-inst +) |