diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2022-02-16 10:19:33 +0100 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@qt.io> | 2022-02-17 12:06:20 +0100 |
commit | a100f74851afc596b828c67f9eb402d95081e907 (patch) | |
tree | 52a0680b042e595a6ec3d4ad567335122664e795 | |
parent | b1eb97e3658fd153bd3742039b7fb62fa74aafba (diff) | |
download | qttools-a100f74851afc596b828c67f9eb402d95081e907.tar.gz |
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)
-rw-r--r-- | src/linguist/Qt5LinguistToolsMacros.cmake | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/src/linguist/Qt5LinguistToolsMacros.cmake b/src/linguist/Qt5LinguistToolsMacros.cmake index ab1534144..6a45e57be 100644 --- a/src/linguist/Qt5LinguistToolsMacros.cmake +++ b/src/linguist/Qt5LinguistToolsMacros.cmake @@ -1,4 +1,5 @@ #============================================================================= +# Copyright (C) 2022 The Qt Company Ltd. # Copyright 2005-2011 Kitware, Inc. # All rights reserved. # @@ -63,11 +64,15 @@ function(QT5_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) @@ -90,13 +95,15 @@ function(QT5_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 ${Qt5_LUPDATE_EXECUTABLE} ARGS ${_lupdate_options} "@${_ts_lst_file}" -ts ${_ts_file} + COMMAND ${CMAKE_COMMAND} -E touch "${stamp_file}" DEPENDS ${_dependencies} VERBATIM) endforeach() - qt5_add_translation(${_qm_files} ${_my_tsfiles}) + qt5_add_translation(${_qm_files} __QT_INTERNAL_DEPEND_ON_TIMESTAMP_FILE ${_my_tsfiles}) set(${_qm_files} ${${_qm_files}} PARENT_SCOPE) endfunction() @@ -113,7 +120,7 @@ endif() function(QT5_ADD_TRANSLATION _qm_files) - set(options) + set(options __QT_INTERNAL_DEPEND_ON_TIMESTAMP_FILE) set(oneValueArgs) set(multiValueArgs OPTIONS) @@ -123,6 +130,7 @@ function(QT5_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) @@ -133,10 +141,16 @@ function(QT5_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 ${Qt5_LRELEASE_EXECUTABLE} ARGS ${_LRELEASE_OPTIONS} ${_abs_FILE} -qm ${qm} - DEPENDS ${_abs_FILE} VERBATIM + DEPENDS ${qm_dep} VERBATIM ) list(APPEND ${_qm_files} ${qm}) endforeach() |