diff options
Diffstat (limited to 'cmake/BTTranslationMacros.cmake')
-rw-r--r-- | cmake/BTTranslationMacros.cmake | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/cmake/BTTranslationMacros.cmake b/cmake/BTTranslationMacros.cmake new file mode 100644 index 0000000..0859a96 --- /dev/null +++ b/cmake/BTTranslationMacros.cmake @@ -0,0 +1,131 @@ +# makes a list of language codes from the *.ts files +function(BT_GET_TS_LANGS TS_LANGS) + SET(TS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/i18n/messages") + FILE(GLOB TS_FILES "${TS_DIR}/bibletime_ui_*.ts") + FOREACH(TSFILE_FULLPATH ${TS_FILES}) + STRING(REGEX REPLACE "${TS_DIR}/bibletime_ui_(..(_..)?).ts" "\\1" + TS_LANG "${TSFILE_FULLPATH}") + SET(_TS_LANGS ${_TS_LANGS} ${TS_LANG}) + ENDFOREACH() + SET(${TS_LANGS} ${_TS_LANGS} PARENT_SCOPE) +endfunction() + + +#bt_get_translation_executables(QT_LUPDATE_EXECUTABLE QT_LRELEASE_EXECUTABLE) +function(BT_GET_TRANSLATION_EXECUTABLES lupdate lrelease rcc) + GET_TARGET_PROPERTY(QT_LUPDATE_EXECUTABLE Qt5::lupdate IMPORTED_LOCATION) + GET_TARGET_PROPERTY(QT_LRELEASE_EXECUTABLE Qt5::lrelease IMPORTED_LOCATION) + GET_TARGET_PROPERTY(QT_RESOURCE_EXECUTABLE Qt5::rcc IMPORTED_LOCATION) + SET(${lupdate} ${QT_LUPDATE_EXECUTABLE} PARENT_SCOPE) + SET(${lrelease} ${QT_LRELEASE_EXECUTABLE} PARENT_SCOPE) + SET(${rcc} ${QT_RESOURCE_EXECUTABLE} PARENT_SCOPE) +endfunction() + +# get a list of the ts files with full path and a list +# of the qm files with no path. +function(BT_GET_TRANSLATION_FILELISTS + TS_DIR + TS_PREFIX + TS_FILES_FULLPATH + QM_FILES +) + FILE(GLOB TS_FILES "${TS_DIR}/${TS_PREFIX}*.ts") + FOREACH(TS_FILE_FULLPATH ${TS_FILES}) + STRING(REGEX REPLACE "${TS_DIR}/${TS_PREFIX}(.+(_..)?).ts" "\\1" + TS_LANG "${TS_FILE_FULLPATH}") + SET(TS_LANGS ${TS_LANGS} ${TS_LANG}) + SET(QM_FILE "${TS_PREFIX}${TS_LANG}.qm") + SET(_QM_FILES ${_QM_FILES} ${TS_PREFIX}${TS_LANG}.qm) + ENDFOREACH() + SET(${TS_FILES_FULLPATH} ${TS_FILES} PARENT_SCOPE) + SET(${QM_FILES} ${_QM_FILES} PARENT_SCOPE) +endfunction() + + +# creates the qm files in the build directory from the ts files in the source directory +function(BT_CREATE_QM_FILES TS_FILES QM_FILES bibletime_LINK_TRANSLATION_FILES) + BT_GET_TRANSLATION_EXECUTABLES( QT_LUPDATE_EXECUTABLE QT_LRELEASE_EXECUTABLE QT_RCC_EXECUTABLE) + list(LENGTH QM_FILES QM_Length) + math(EXPR stop "${QM_Length}-1") + FOREACH(Index RANGE 0 ${stop}) + LIST(GET TS_FILES ${Index} TS_FILE) + LIST(GET QM_FILES ${Index} QM_FILE) + IF(${bibletime_LINK_TRANSLATION_FILES}) + ADD_CUSTOM_COMMAND( + OUTPUT ${QM_FILE} + POST_BUILD + COMMAND ${QT_LRELEASE_EXECUTABLE} "${TS_FILE}" -qm "${QM_FILE}" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Updating UI translation for ${QM_FILE}" + VERBATIM + ) + ELSE() + ADD_CUSTOM_COMMAND( + TARGET "bibletime" + POST_BUILD + COMMAND ${QT_LRELEASE_EXECUTABLE} "${TS_FILE}" -qm "${QM_FILE}" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Updating UI translation for ${QM_FILE}" + VERBATIM + ) + ENDIF() + ENDFOREACH() +endfunction() + + +# installs the qm files for bibletime. +function(BT_INSTALL_QM_FILES QM_FILES) + list(LENGTH QM_FILES QM_Length) + math(EXPR stop "${QM_Length}-1") + FOREACH(Index RANGE 0 ${stop}) + LIST(GET QM_FILES ${Index} QM_FILE) + INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/${QM_FILE}" + DESTINATION "${BT_SHARE_PATH}/bibletime/locale/" + ) + ENDFOREACH() +endfunction() + +function(BT_UPDATE_TS_FILES TS_DIR TS_PREFIX) + BT_GET_TRANSLATION_EXECUTABLES( QT_LUPDATE_EXECUTABLE QT_LRELEASE_EXECUTABLE QT_RCC_EXECUTABLE) + # Update source catalog files (this is the basis for the translator's work) + # Invoke this with "make messages" + ADD_CUSTOM_TARGET("messages") + SET_TARGET_PROPERTIES("messages" PROPERTIES FOLDER "Messages") + BT_GET_TS_LANGS(TS_LANGS) + FOREACH(TS_LANG ${TS_LANGS}) + ADD_CUSTOM_TARGET("messages_${TS_LANG}" + COMMAND ${QT_LUPDATE_EXECUTABLE} -extensions cpp,h "${CMAKE_CURRENT_SOURCE_DIR}/src" -ts "${TS_DIR}/${TS_PREFIX}${TS_LANG}.ts") + ADD_DEPENDENCIES("messages" "messages_${TS_LANG}") + SET_TARGET_PROPERTIES("messages_${TS_LANG}" PROPERTIES FOLDER "Messages") + ENDFOREACH(TS_LANG) + + # Template file for translators + ADD_CUSTOM_TARGET("messages_default" + COMMAND ${QT_LUPDATE_EXECUTABLE} -extensions cpp,h "${CMAKE_CURRENT_SOURCE_DIR}/src" -ts "${TS_DIR}/bibletime_ui.ts") + ADD_DEPENDENCIES(messages "messages_default") + SET_TARGET_PROPERTIES("messages_default" PROPERTIES FOLDER "Messages") +endfunction() + + # copy translation qrc file to build dir +function(BT_COPY_QRC_TO_BUILD_DIR QRC_FILE QRC_COPIED_FILE) + ADD_CUSTOM_COMMAND( + OUTPUT ${QRC_COPIED_FILE} + COMMAND ${CMAKE_COMMAND} -E copy ${QRC_FILE} ${QRC_COPIED_FILE} + MAIN_DEPENDENCY ${QRC_FILE} + COMMENT "Copying translation resource file: ${QRC_FILE}" + VERBATIM + ) +endfunction() + + # run resource compiler on translation qrc file +function(BT_RUN_RESOURCE_COMPILER QM_FILES QRC_COPIED_FILE QRC_CPP_FILE) + BT_GET_TRANSLATION_EXECUTABLES( QT_LUPDATE_EXECUTABLE QT_LRELEASE_EXECUTABLE QT_RCC_EXECUTABLE) + ADD_CUSTOM_COMMAND( + OUTPUT ${QRC_CPP_FILE} + COMMAND ${QT_RCC_EXECUTABLE} + ARGS ${rcc_options} ${QRC_COPIED_FILE} -o ${QRC_CPP_FILE} + MAIN_DEPENDENCY ${QM_COPIED_FILE} + DEPENDS ${QM_FILES} ${QRC_COPIED_FILE} + COMMENT "Compiling resource file: ${QRC_COPIED_FILE}" + ) +endfunction() |