From c991df30f450c05e512594a4eb7ebb5da9c5091f Mon Sep 17 00:00:00 2001 From: David Rosca Date: Tue, 27 Feb 2018 11:32:29 +0100 Subject: [PATCH] Extract and install Python translations --- cmake/build-po-files.cmake | 46 ++++++++++++++++++++++++++++++ src/main/CMakeLists.txt | 57 +++++++++++++++++++++++++++++++++++++- src/scripts/Messages.sh | 11 ++++++++ 3 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 cmake/build-po-files.cmake create mode 100644 src/scripts/Messages.sh diff --git a/cmake/build-po-files.cmake b/cmake/build-po-files.cmake new file mode 100644 index 000000000..03736f2ef --- /dev/null +++ b/cmake/build-po-files.cmake @@ -0,0 +1,46 @@ +# Copyright (c) 2017 Aleix Pol Gonzalez +# Copyright (c) 2017 Harald Sitter +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. + +file(GLOB_RECURSE pofiles RELATIVE "${PO_DIR}" "${PO_DIR}/**.po") + +foreach(pofile IN LISTS pofiles) + if (NOT pofile MATCHES "_qt.po") + get_filename_component(name ${pofile} NAME_WE) + get_filename_component(langdir ${pofile} DIRECTORY) + set(dest ${COPY_TO}/${langdir}/LC_MESSAGES) + file(MAKE_DIRECTORY ${dest}) + + message(STATUS "building... ${pofile} to ${name}.mo" ) + execute_process( + COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${dest}/${name}.mo ${PO_DIR}/${pofile} + RESULT_VARIABLE code + ) + if(code) + message(FATAL_ERROR "failed at generating ${name}.mo") + endif() + endif() +endforeach() diff --git a/src/main/CMakeLists.txt b/src/main/CMakeLists.txt index f636675e1..1a3add02b 100644 --- a/src/main/CMakeLists.txt +++ b/src/main/CMakeLists.txt @@ -17,6 +17,60 @@ add_executable(falkon ${SRCS}) target_link_libraries(falkon FalkonPrivate) +# Same as ecm_install_po_files_as_qm, but only for *_qt.po +function(install_po_files_as_qm podir) + if (LOCALE_INSTALL_DIR) + set(locale_install_destination "${LOCALE_INSTALL_DIR}") + elseif (CMAKE_INSTALL_LOCALEDIR) + set(locale_install_destination "${CMAKE_INSTALL_LOCALEDIR}") + else() + set(locale_install_destination share/locale) + endif() + file(GLOB po_files "${podir}/*/*_qt.po") + foreach(po_file ${po_files}) + get_filename_component(po_dir ${po_file} DIRECTORY) + get_filename_component(lang ${po_dir} NAME) + ecm_process_po_files_as_qm( + ${lang} ALL + PO_FILES ${po_file} + INSTALL_DESTINATION ${locale_install_destination} + ) + endforeach() +endfunction() + +# Same as ki18n_install, but skips *_qt.po +function(install_po_files podir) + if (LOCALE_INSTALL_DIR) + set(locale_install_destination "${LOCALE_INSTALL_DIR}") + elseif (CMAKE_INSTALL_LOCALEDIR) + set(locale_install_destination "${CMAKE_INSTALL_LOCALEDIR}") + else() + set(locale_install_destination share/locale) + endif() + get_filename_component(dirname ${locale_install_destination} NAME) + get_filename_component(destname ${locale_install_destination} DIRECTORY) + + get_filename_component(absolute_podir ${podir} ABSOLUTE) + string(MD5 pathmd5 ${absolute_podir}) + + add_custom_target(pofiles-${pathmd5} ALL + COMMENT "Generating mo..." + COMMAND ${CMAKE_COMMAND} + -DGETTEXT_MSGFMT_EXECUTABLE=${GETTEXT_MSGFMT_EXECUTABLE} + -DCOPY_TO=${CMAKE_CURRENT_BINARY_DIR}/${dirname} + -DPO_DIR=${absolute_podir} + -P ${CMAKE_SOURCE_DIR}/cmake/build-po-files.cmake + ) + + if (NOT TARGET pofiles) + add_custom_target(pofiles) + endif() + add_dependencies(pofiles pofiles-${pathmd5}) + + file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${dirname}) + install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${dirname} DESTINATION ${destname}) +endfunction() + if (APPLE) set_target_properties(falkon PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/main/Info.plist) set_target_properties(falkon PROPERTIES MACOSX_BUNDLE_GUI_IDENTIFIER "org.kde.falkon") @@ -34,7 +88,8 @@ endif() if (UNIX AND NOT APPLE) install(TARGETS falkon ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}) install(DIRECTORY ${CMAKE_SOURCE_DIR}/themes DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/falkon) - ecm_install_po_files_as_qm(${CMAKE_SOURCE_DIR}/po) + install_po_files_as_qm(${CMAKE_SOURCE_DIR}/po) + install_po_files(${CMAKE_SOURCE_DIR}/po) install(PROGRAMS ../../linux/applications/org.kde.falkon.desktop DESTINATION ${KDE_INSTALL_APPDIR}) diff --git a/src/scripts/Messages.sh b/src/scripts/Messages.sh new file mode 100644 index 000000000..38a0dcb6c --- /dev/null +++ b/src/scripts/Messages.sh @@ -0,0 +1,11 @@ +#! /bin/sh + +XGETTEXT_FLAGS_PYTHON="\ +--copyright-holder=This_file_is_part_of_KDE \ +--msgid-bugs-address=http://bugs.kde.org \ +--from-code=UTF-8 \ +-L Python \ +-ki18n:1 -ki18np:1,2 \ +" + +$XGETTEXT_PROGRAM $XGETTEXT_FLAGS_PYTHON `find hellopython -name '*.py'` -o $podir/falkon_hellopython.pot