# # Copyright (C) 2003-2023 Sébastien Helleu # # This file is part of WeeChat, the extensible chat client. # # WeeChat is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # WeeChat is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with WeeChat. If not, see . # set(PO_FILES cs.po de.po es.po fr.po hu.po it.po ja.po pl.po pt.po pt_BR.po ru.po sr.po tr.po ) set(BUGS_ADDRESS "flashcode@flashtux.org") set(POT_FILE ${PROJECT_NAME}.pot) set(POT_FILE_PATH ${CMAKE_CURRENT_BINARY_DIR}/${POT_FILE}) include(srcfiles.cmake) # Looking for xgettext, msgmerge and msgfmt find_program(XGETTEXT_EXECUTABLE xgettext) find_program(MSGMERGE_EXECUTABLE msgmerge) find_program(MSGFMT_EXECUTABLE msgfmt) if(XGETTEXT_EXECUTABLE AND MSGMERGE_EXECUTABLE AND MSGFMT_EXECUTABLE) # Create PO template file weechat.pot set(SRC_FILES) set(POT_DEPENDS) foreach(srcfile ${WEECHAT_SOURCES}) set(SRC_FILES ${SRC_FILES} ${srcfile}) set(POT_DEPENDS ${POT_DEPENDS} ${CMAKE_SOURCE_DIR}/${srcfile}) endforeach() add_custom_command( OUTPUT ${POT_FILE_PATH} COMMAND ${XGETTEXT_EXECUTABLE} ARGS -o ${POT_FILE_PATH} --add-comments='TRANSLATORS:' --keyword='_' --keyword='weechat_gettext' --keyword='N_' --keyword='NG_:1,2' --keyword='weechat_ngettext:1,2' --no-location --from-code=UTF-8 --directory=${CMAKE_SOURCE_DIR} --package-name='WeeChat' --package-version=${VERSION} --msgid-bugs-address=${BUGS_ADDRESS} --copyright-holder='NAME' ${SRC_FILES} DEPENDS ${POT_DEPENDS} COMMENT "Generating ${POT_FILE}" ) set(MO_FILES) set(UPDATE_PO_TARGETS) foreach(pofile ${PO_FILES}) get_filename_component(polang ${pofile} NAME_WE) # Compile .po files in build directory (to binary .mo files) set(modir "${CMAKE_CURRENT_BINARY_DIR}/${polang}/LC_MESSAGES") file(MAKE_DIRECTORY "${modir}") set(mofile "${modir}/${PROJECT_NAME}.mo") add_custom_command( OUTPUT ${mofile} COMMAND ${MSGMERGE_EXECUTABLE} ARGS --quiet -o ${CMAKE_CURRENT_BINARY_DIR}/${pofile} ${CMAKE_CURRENT_SOURCE_DIR}/${pofile} ${POT_FILE_PATH} COMMAND ${MSGFMT_EXECUTABLE} ARGS -o ${mofile} ${CMAKE_CURRENT_BINARY_DIR}/${pofile} COMMAND ${MSGFMT_EXECUTABLE} ARGS -c --statistics --verbose --output-file=/dev/null ${CMAKE_CURRENT_BINARY_DIR}/${pofile} DEPENDS ${POT_FILE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/${pofile} COMMENT "Compiling ${polang}.po" ) # Update .po files in source directory (if needed) add_custom_target( update-${pofile} COMMAND ${MSGMERGE_EXECUTABLE} --quiet --update --previous --backup=none ${CMAKE_CURRENT_SOURCE_DIR}/${pofile} ${POT_FILE_PATH} COMMENT "Updating ${polang}.po" ) set(UPDATE_PO_TARGETS ${UPDATE_PO_TARGETS} update-${pofile}) install(FILES ${mofile} DESTINATION ${LOCALEDIR}/${polang}/LC_MESSAGES) set(MO_FILES ${MO_FILES} ${mofile}) endforeach() add_custom_target(translations ALL DEPENDS ${MO_FILES}) # Update weechat.pot in source directory (if needed) add_custom_target( update-${POT_FILE} COMMAND ${MSGMERGE_EXECUTABLE} --quiet --update --backup=none ${CMAKE_CURRENT_SOURCE_DIR}/${POT_FILE} ${POT_FILE_PATH} COMMENT "Updating ${POT_FILE}" ) # Update all .po and weechat.pot in source directory (if needed) add_custom_target(update-po DEPENDS update-${POT_FILE} ${UPDATE_PO_TARGETS}) endif()