summaryrefslogtreecommitdiff
path: root/cmake/BTTranslationMacros.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/BTTranslationMacros.cmake')
-rw-r--r--cmake/BTTranslationMacros.cmake131
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()