Mercurial > molko
view cmake/MolkoBuildTranslations.cmake @ 241:76afe639fd72
misc: add support for NLS, closes #22510 @4h
While here cleanup the path functions in sys.c/sys.h
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sat, 28 Nov 2020 18:00:05 +0100 |
parents | |
children | 4c24604efcab |
line wrap: on
line source
# # MolkoBuildTranslations.cmake -- CMake build system for molko # # Copyright (c) 2020 David Demelier <markand@malikania.fr> # # Permission to use, copy, modify, and/or distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # if (MOLKO_WITH_NLS) find_program(XGETTEXT_EXE xgettext) find_program(MSGMERGE_EXE msgmerge) find_program(MSGFMT_EXE msgfmt) endif () if (MOLKO_WITH_NLS AND XGETTEXT_EXE AND MSGMERGE_EXE) macro(molko_build_translations) set(options) set(oneValueArgs TARGET OUTPUTS) set(multiValueArgs SOURCES TRANSLATIONS) cmake_parse_arguments(NLS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) if (NOT NLS_OUTPUTS) message(FATAL_ERROR "Missing OUTPUTS argument") endif () if (NOT NLS_TARGET) message(FATAL_ERROR "Missing TARGET argument") endif () if (NOT NLS_SOURCES) message(FATAL_ERROR "Missing SOURCES argument") endif () # Remove non C files. list(FILTER NLS_SOURCES INCLUDE REGEX "\\.[ch$]") set(pot ${CMAKE_CURRENT_SOURCE_DIR}/nls/${NLS_TARGET}.pot) # Generate .pot file. add_custom_target( ${NLS_TARGET}-pot ALL VERBATIM COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_SOURCE_DIR}/nls COMMAND ${XGETTEXT_EXE} -cj -k_ -kN_ -LC -s -o ${pot} ${NLS_SOURCES} COMMENT "Generating reference translation ${pot}" ) set_target_properties(${NLS_TARGET}-pot PROPERTIES FOLDER translations) # For every translation create a msgmerge target and output file. set(outputs) foreach (t ${NLS_TRANSLATIONS}) set(po ${CMAKE_CURRENT_SOURCE_DIR}/nls/${t}.po) set(mo ${CMAKE_CURRENT_BINARY_DIR}/${t}.mo) if (NOT EXISTS ${po}) message(WARNING "Missing translation ${po}") endif () add_custom_target( ${NLS_TARGET}-po-${t} VERBATIM DEPENDS ${NLS_TARGET}-pot COMMAND ${MSGMERGE_EXE} --backup=off -U ${po} ${pot} COMMENT "Merging translation in ${po}" ) set_target_properties(${NLS_TARGET}-po-${t} PROPERTIES FOLDER translations) list(APPEND po-targets ${NLS_TARGET}-po-${t}) # Finally generate a .mo output from po file. add_custom_command( OUTPUT ${mo} VERBATIM COMMAND ${MSGFMT_EXE} -o ${mo} ${po} DEPENDS ${po} COMMENT "Generating translation binary ${mo}" ) list(APPEND outputs ${mo}) # TODO: naming should be changed maybe. install( FILES ${mo} DESTINATION ${CMAKE_INSTALL_LOCALEDIR}/${t}/LC_MESSAGES RENAME mlk-${NLS_TARGET}.mo ) endforeach () set(${NLS_OUTPUTS} ${outputs}) source_group("mo" FILES ${outputs}) add_custom_target( ${NLS_TARGET}-po DEPENDS ${po-targets} COMMENT "Merging all po files" ) set_target_properties(${NLS_TARGET}-po PROPERTIES FOLDER translations) endmacro() else () function(molko_build_translations) endfunction() endif ()