diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2022-02-16 10:19:33 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-02-16 19:32:52 +0000 |
commit | fcb679fda3cabd74287fe6e38a62612894d20aa6 (patch) | |
tree | ac250e2ee84942e5d898228942b0aaf027514796 | |
parent | a64dbe92b622b386954a39ec82c521ac3627e084 (diff) |
CMake: Fix qt_create_translation to not remove .ts files on "clean"
When running "make clean", .ts files were deleted. This must not
happen, because .ts files are source files.
Remove the .ts file from the OUTPUT of the custom command that updates
the .ts file. Add a timestamp file instead that is touched upon
updating the .ts file.
In qt_add_translation we must depend on this timestamp file. If users
call qt_add_translation, we don't depend on a timestamp file but
directly on the .ts file like before.
Fixes: QTBUG-96549
Change-Id: If93a6d1b47a33b29dc92fb987da2afcf8d29e895
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
(cherry picked from commit 153db2fedc5935d858d3adeb283ced5e4de5babf)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/linguist/Qt6LinguistToolsMacros.cmake | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/linguist/Qt6LinguistToolsMacros.cmake b/src/linguist/Qt6LinguistToolsMacros.cmake index f0d99dd4d..d0a37f71a 100644 --- a/src/linguist/Qt6LinguistToolsMacros.cmake +++ b/src/linguist/Qt6LinguistToolsMacros.cmake @@ -64,11 +64,15 @@ function(qt6_create_translation _qm_files) list(APPEND _my_sources ${_abs_FILE}) endif() endforeach() + set(stamp_file_dir "${CMAKE_CURRENT_BINARY_DIR}/.lupdate") + if(NOT EXISTS "${stamp_file_dir}") + file(MAKE_DIRECTORY "${stamp_file_dir}") + endif() foreach(_ts_file ${_my_tsfiles}) + get_filename_component(_ts_name ${_ts_file} NAME) if(_my_sources) # make a list file to call lupdate on, so we don't make our commands too # long for some systems - get_filename_component(_ts_name ${_ts_file} NAME) set(_ts_lst_file "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_ts_name}_lst_file") set(_lst_file_srcs) set(_dependencies) @@ -91,18 +95,20 @@ function(qt6_create_translation _qm_files) file(WRITE ${_ts_lst_file} "${_lst_file_srcs}") endif() - add_custom_command(OUTPUT ${_ts_file} + set(stamp_file "${stamp_file_dir}/${_ts_name}.stamp") + add_custom_command(OUTPUT ${stamp_file} COMMAND ${QT_CMAKE_EXPORT_NAMESPACE}::lupdate ARGS ${_lupdate_options} "@${_ts_lst_file}" -ts ${_ts_file} + COMMAND ${CMAKE_COMMAND} -E touch "${stamp_file}" DEPENDS ${_dependencies} VERBATIM) endforeach() - qt6_add_translation(${_qm_files} ${_my_tsfiles}) + qt6_add_translation(${_qm_files} __QT_INTERNAL_DEPEND_ON_TIMESTAMP_FILE ${_my_tsfiles}) set(${_qm_files} ${${_qm_files}} PARENT_SCOPE) endfunction() function(qt6_add_translation _qm_files) - set(options) + set(options __QT_INTERNAL_DEPEND_ON_TIMESTAMP_FILE) set(oneValueArgs) set(multiValueArgs OPTIONS) @@ -112,6 +118,7 @@ function(qt6_add_translation _qm_files) foreach(_current_FILE ${_lrelease_files}) get_filename_component(_abs_FILE ${_current_FILE} ABSOLUTE) get_filename_component(qm ${_abs_FILE} NAME) + set(ts_stamp_file "${CMAKE_CURRENT_BINARY_DIR}/.lupdate/${qm}.stamp") # everything before the last dot has to be considered the file name (including other dots) string(REGEX REPLACE "\\.[^.]*$" "" FILE_NAME ${qm}) get_source_file_property(output_location ${_abs_FILE} OUTPUT_LOCATION) @@ -122,10 +129,16 @@ function(qt6_add_translation _qm_files) set(qm "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}.qm") endif() + if(_LRELEASE___QT_INTERNAL_DEPEND_ON_TIMESTAMP_FILE) + set(qm_dep "${ts_stamp_file}") + else() + set(qm_dep "${_abs_FILE}") + endif() + add_custom_command(OUTPUT ${qm} COMMAND ${QT_CMAKE_EXPORT_NAMESPACE}::lrelease ARGS ${_LRELEASE_OPTIONS} ${_abs_FILE} -qm ${qm} - DEPENDS ${_abs_FILE} VERBATIM + DEPENDS ${qm_dep} VERBATIM ) list(APPEND ${_qm_files} ${qm}) endforeach() |