summaryrefslogtreecommitdiff
path: root/cmake/BTTranslationMacros.cmake
blob: 0859a96083933552df50c087b372ee57d34fae0f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
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()