function(qt_translation) find_package(Qt5 COMPONENTS LinguistTools REQUIRED) set(options) set(oneValueArgs TARGET TS_DIR) set(multiValueArgs LANGUAGES) cmake_parse_arguments(_QTTR "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) set(_target ${_QTTR_TARGET}) set(_ts_dir ${_QTTR_TS_DIR}) set(_languages ${_QTTR_LANGUAGES}) get_target_property(_sources ${_target} SOURCES) get_target_property(_source_dir ${_target} SOURCE_DIR) set(L10N_QRC_BODY "") make_directory(${_ts_dir}) set(_sources_list "") foreach(_s ${_sources}) list(APPEND _sources_list ${_source_dir}/${_s}) endforeach() foreach(_lang ${_languages}) set(_ts "${_target}_${_lang}.ts") set(_qm "${_target}_${_lang}.qm") list(APPEND _ts_list ${_ts_dir}/${_ts}) list(APPEND _l10n_targets "${_target}_l10n_${_lang}") string(APPEND L10N_QRC_BODY "${CMAKE_BINARY_DIR}/${_qm}\n") add_custom_target(${_target}_l10n_${_lang} COMMAND ${Qt5_LUPDATE_EXECUTABLE} ${_sources_list} -ts ${_ts_dir}/${_ts} -target-language ${_lang} DEPENDS ${_sources_list}) if(NOT EXISTS "${_ts_dir}/${_ts}") add_custom_target(${_ts} DEPENDS ${_target}_l10n_${_lang}) else() add_custom_target(${_ts} COMMAND echo "Skipping lupdate for ${_ts}") endif() add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/${_qm} COMMAND ${Qt5_LRELEASE_EXECUTABLE} ARGS ${_ts_dir}/${_ts} -qm ${CMAKE_BINARY_DIR}/${_qm} DEPENDS ${_ts} ${_sources_list}) endforeach() configure_file(${CMLIB_MODULE_DIR}/qrc/l10n.qrc.in ${CMAKE_BINARY_DIR}/${_target}_l10n.qrc) qt5_add_resources(_qrc ${CMAKE_BINARY_DIR}/${_target}_l10n.qrc) add_custom_target(${_target}_qrc DEPENDS ${_qrc}) add_custom_target(${_target}_l10n DEPENDS ${_l10n_targets}) if(NOT TARGET l10n) add_custom_target(l10n) endif() add_dependencies(l10n ${_target}_l10n) add_dependencies(${_target} ${_target}_qrc) target_sources(${_target} PUBLIC ${_qrc}) endfunction()