From: Manuel Nickschas Date: Thu, 12 Feb 2009 09:33:00 +0000 (+0100) Subject: Search for and include Qt translations in static builds X-Git-Tag: 0.4.0~69 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=318483ddb3de556a4014cb2d5b5e6cd58b0718e2 Search for and include Qt translations in static builds When building statically, this looks for Qt translations at build-time and embeds them in the binary. Thus, buttons and other standard elements should be translated even with no Qt installed on the target system. Fixes #508. --- diff --git a/cmake/modules/FindQt4.cmake b/cmake/modules/FindQt4.cmake index 170e04b7..64a5ce40 100644 --- a/cmake/modules/FindQt4.cmake +++ b/cmake/modules/FindQt4.cmake @@ -246,6 +246,7 @@ # # QT_DOC_DIR Path to "doc" of Qt4 # QT_MKSPECS_DIR Path to "mkspecs" of Qt4 +# QT_TRANSLATIONS_DIR Path to "translations" of Qt4 # # # These are around for backwards compatibility @@ -482,6 +483,17 @@ IF (QT4_QMAKE_FOUND) FILE(TO_CMAKE_PATH "${qt_plugins_dir}" qt_plugins_dir) SET(QT_PLUGINS_DIR ${qt_plugins_dir} CACHE PATH "The location of the Qt plugins") ENDIF (QT_LIBRARY_DIR AND NOT QT_PLUGINS_DIR) + + # ask qmake for the translations directory + IF (QT_LIBRARY_DIR AND NOT QT_TRANSLATIONS_DIR) + EXEC_PROGRAM( ${QT_QMAKE_EXECUTABLE} + ARGS "-query QT_INSTALL_TRANSLATIONS" + OUTPUT_VARIABLE qt_translations_dir ) + # make sure we have / and not \ as qmake gives on windows + FILE(TO_CMAKE_PATH "${qt_translations_dir}" qt_translations_dir) + SET(QT_TRANSLATIONS_DIR ${qt_translations_dir} CACHE PATH "The location of the Qt translations") + ENDIF (QT_LIBRARY_DIR AND NOT QT_TRANSLATIONS_DIR) + ######################################## # # Setting the INCLUDE-Variables diff --git a/i18n/CMakeLists.txt b/i18n/CMakeLists.txt index 8f08cbff..a8b40684 100644 --- a/i18n/CMakeLists.txt +++ b/i18n/CMakeLists.txt @@ -7,10 +7,10 @@ if(QT_LRELEASE_EXECUTABLE) set(qm_files ${QM}) # Find more languages - file(GLOB avail_tsfiles quassel_*.ts) + file(GLOB avail_tsfiles quassel_*.ts qt_*.ts) foreach(TS_FILE ${avail_tsfiles}) get_filename_component(basename ${TS_FILE} NAME_WE) - string(REGEX REPLACE "quassel_([a-zA-Z]+)(_.+)?$" "\\1" lang ${basename}) + string(REGEX REPLACE "q[^_]+_([a-zA-Z]+)(_.+)?$" "\\1" lang ${basename}) # test if we want this set(flg 1) if(LINGUAS) @@ -18,15 +18,29 @@ if(QT_LRELEASE_EXECUTABLE) endif(LINGUAS) if(flg) generate_qm(QM ${basename}) - set(qm_files ${qm_files} ${QM}) - set(gen_linguas "${gen_linguas} ${lang}") + list(APPEND qm_files ${QM}) + list(APPEND gen_linguas ${lang}) endif(flg) endforeach(TS_FILE ${avail_tsfiles}) - message(STATUS "Including languages:${gen_linguas}") + list(REMOVE_DUPLICATES gen_linguas) + message(STATUS "Including languages: ${gen_linguas}") else(QT_LRELEASE_EXECUTABLE) message(STATUS "WARNING: lrelease not found, you won't have translations!") endif(QT_LRELEASE_EXECUTABLE) +# For a static build, we need to include Qt translations if available +if(STATIC AND QT_TRANSLATIONS_DIR) + foreach(LANG ${gen_linguas}) + file(GLOB lang_files ${QT_TRANSLATIONS_DIR}/qt_${LANG}*.qm) + foreach(absfile ${lang_files}) + get_filename_component(filename ${absfile} NAME) + message(STATUS "Importing ${filename}") + configure_file(${absfile} ${CMAKE_CURRENT_BINARY_DIR}/${filename} COPYONLY) + list(APPEND qm_files ${CMAKE_CURRENT_BINARY_DIR}/${filename}) + endforeach(absfile ${lang_files}) + endforeach(LANG ${gen_linguas}) +endif(STATIC AND QT_TRANSLATIONS_DIR) + # Write resource file set(resfile ${CMAKE_CURRENT_BINARY_DIR}/i18n.qrc) file(WRITE ${resfile} "\n"