linglong/po/CMakeLists.txt

101 lines
3.5 KiB
CMake

# SPDX-FileCopyrightText: Copyright (C) 2018 Xiphos Development Team
#
# SPDX-License-Identifier: GPL-2.0-or-later
# building MO files We copy all PO files in the build dir in order to not alter
# the source tree as 'gettext_process_pot_file' rebuilds each PO file from the
# POT file. The only case a PO file is created is when a language is set in
# LINGUAS and the PO file is missing.
find_package(Gettext)
if(GETTEXT_FOUND)
# # get a list of active translations from LINGUAS
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/LINGUAS linguas)
# # transform linguas string to a cmake regular list
string(REGEX MATCHALL "[a-zA-Z_@]+" langs "${linguas}")
# copy PO files into build dir
foreach(lang ${langs})
set(pofile "${CMAKE_CURRENT_SOURCE_DIR}/${lang}.po")
if(NOT EXISTS ${pofile})
# missing PO, add a new PO file
message(STATUS "Creating po/${lang}.po from LINGUAS.")
# copy linyaps.pot into build dir
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/${GETTEXT_DOMAIN_NAME}.pot"
DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
# rename pot copy to ${lang}.po
file(RENAME "${CMAKE_CURRENT_BINARY_DIR}/${GETTEXT_DOMAIN_NAME}.pot"
"${CMAKE_CURRENT_BINARY_DIR}/${lang}.po")
# copy new ${lang}.po into source dir
file(COPY "${CMAKE_CURRENT_BINARY_DIR}/${lang}.po"
DESTINATION ${CMAKE_CURRENT_SOURCE_DIR})
else()
# copy existing PO file into build dir
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/${lang}.po"
DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
endif()
endforeach(lang)
# create and install MO files
gettext_process_pot_file(
${CMAKE_CURRENT_SOURCE_DIR}/${GETTEXT_DOMAIN_NAME}.pot ALL
INSTALL_DESTINATION ${CMAKE_INSTALL_LOCALEDIR}
LANGUAGES ${langs})
add_custom_target(process-pot-file)
get_real_target_name(TARGET linglong::ll-cli)
get_real_target_name(BUILD_TARGET linglong::ll-builder)
get_real_target_name(DIALOG linglong::ll-dialog)
add_dependencies("${TARGET}" process-pot-file)
add_dependencies("${BUILD_TARGET}" process-pot-file)
add_dependencies("${DIALOG}" process-pot-file)
# Custom targets for updating translation files NOTE: these targets will
# update files in the source tree
# target to refresh POT file
find_program(INTLTOOL_UPDATE intltool-update)
add_custom_target(
pot
COMMAND ${INTLTOOL_UPDATE} --pot --gettext-package=${GETTEXT_DOMAIN_NAME}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/po
COMMENT "Updating pot file.")
# target for updating a given PO file
foreach(language ${langs})
# Replace @ with _ in target name to make it valid for CMake
string(REPLACE "@" "_" safe_language ${language})
add_custom_target(
linyaps_${safe_language}.po
COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --no-fuzzy-matching --backup=off --update --verbose ${language}.po
${GETTEXT_DOMAIN_NAME}.pot
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/po
COMMENT "Updating ${language}.po file")
# prepare command for the all PO target
set(PO_UPDATE_ALL
${PO_UPDATE_ALL}
&&
echo
${language}.po:
&&
${GETTEXT_MSGMERGE_EXECUTABLE}
--no-fuzzy-matching
--backup=off
--update
--verbose
${language}.po
${GETTEXT_DOMAIN_NAME}.pot)
endforeach()
# target for updating all PO files
set(PO_UPDATE_ALL pwd ${PO_UPDATE_ALL})
add_custom_target(
po
COMMAND ${PO_UPDATE_ALL}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/po
COMMENT "Updating all PO files"
VERBATIM)
endif()