summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@qt.io>2024-03-20 14:27:02 +0100
committerJoerg Bornemann <joerg.bornemann@qt.io>2024-03-21 06:47:10 +0100
commit5c3800b7ff94b36b2ca13fc23acfd9209ea4c50b (patch)
tree146f833abd21112825dd72e92fcbec12fb094ec3
parentdb5038b8a5a1c1904d8f7609dd583319184fc266 (diff)
CMake: Fix discrepancy in qt_add_translations .qm output paths
When calling qt_add_translations with automatic target collection we 1. Predict .qm file paths to be in CMAKE_CURRENT_BINARY_DIR and return the paths in QM_FILES_OUTPUT_VARIABLE. 2. Defer the call of qt_add_translations to the end of the PROJECT_DIR scope. 3. When running the deferred call, generate .qm files in CMAKE_CURRENT_BINARY_DIR. The values of CMAKE_CURRENT_BINARY_DIR in steps 1 and 3 are different if the call to qt_add_translations is in a subdirectory. Fix this by passing the .qm output directory to the deferred call of qt_add_translations and qt_add_lrelease. Pick-to: 6.7 6.7.0 Fixes: QTBUG-123405 Change-Id: If4a9cdc03ed4659f28ff70c7662f1125a1f59b55 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
-rw-r--r--src/linguist/Qt6LinguistToolsMacros.cmake27
1 files changed, 20 insertions, 7 deletions
diff --git a/src/linguist/Qt6LinguistToolsMacros.cmake b/src/linguist/Qt6LinguistToolsMacros.cmake
index 67f3b7be3..61700546b 100644
--- a/src/linguist/Qt6LinguistToolsMacros.cmake
+++ b/src/linguist/Qt6LinguistToolsMacros.cmake
@@ -367,18 +367,18 @@ function(_qt_internal_store_languages_from_ts_files_in_targets targets ts_files)
endfunction()
# Store in ${out_var} the file path to the .qm file that will be generated from the given .ts file.
-function(_qt_internal_generated_qm_file_path out_var ts_file)
+function(_qt_internal_generated_qm_file_path out_var ts_file default_out_dir)
get_filename_component(qm ${ts_file} NAME_WLE)
string(APPEND qm ".qm")
get_source_file_property(output_location ${ts_file} OUTPUT_LOCATION)
if(output_location)
if(NOT IS_ABSOLUTE "${output_location}")
get_filename_component(output_location "${output_location}" ABSOLUTE
- BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
+ BASE_DIR "${default_out_dir}")
endif()
string(PREPEND qm "${output_location}/")
else()
- string(PREPEND qm "${CMAKE_CURRENT_BINARY_DIR}/")
+ string(PREPEND qm "${default_out_dir}/")
endif()
set("${out_var}" "${qm}" PARENT_SCOPE)
endfunction()
@@ -389,6 +389,7 @@ function(qt6_add_lrelease)
EXCLUDE_FROM_ALL
NO_GLOBAL_TARGET)
set(oneValueArgs
+ __QT_INTERNAL_DEFAULT_QM_OUT_DIR
LRELEASE_TARGET
QM_FILES_OUTPUT_VARIABLE)
set(multiValueArgs
@@ -428,6 +429,11 @@ function(qt6_add_lrelease)
"${tool_wrapper}"
$<TARGET_FILE:${QT_CMAKE_EXPORT_NAMESPACE}::lrelease>)
+ set(default_qm_out_dir "${CMAKE_CURRENT_BINARY_DIR}")
+ if(NOT "${arg___QT_INTERNAL_DEFAULT_QM_OUT_DIR}" STREQUAL "")
+ set(default_qm_out_dir "${arg___QT_INTERNAL_DEFAULT_QM_OUT_DIR}")
+ endif()
+
set(qm_files "")
foreach(ts_file ${ts_files})
if(NOT EXISTS "${ts_file}")
@@ -437,7 +443,7 @@ function(qt6_add_lrelease)
_qt_internal_ensure_ts_file(TS_FILE "${ts_file}")
endif()
- _qt_internal_generated_qm_file_path(qm "${ts_file}")
+ _qt_internal_generated_qm_file_path(qm "${ts_file}" "${default_qm_out_dir}")
get_filename_component(qm_dir "${qm}" DIRECTORY)
add_custom_command(OUTPUT ${qm}
COMMAND "${CMAKE_COMMAND}" -E make_directory "${qm_dir}"
@@ -497,6 +503,7 @@ function(qt6_add_translations)
IMMEDIATE_CALL
NO_GENERATE_PLURALS_TS_FILE)
set(oneValueArgs
+ __QT_INTERNAL_DEFAULT_QM_OUT_DIR
LUPDATE_TARGET
LRELEASE_TARGET
QM_FILES_OUTPUT_VARIABLE
@@ -590,14 +597,18 @@ function(qt6_add_translations)
if(DEFINED arg_QM_FILES_OUTPUT_VARIABLE)
set(qm_files "")
foreach(ts_file IN LISTS arg_TS_FILES arg_PLURALS_TS_FILE)
- _qt_internal_generated_qm_file_path(qm_file "${ts_file}")
+ _qt_internal_generated_qm_file_path(qm_file "${ts_file}"
+ "${CMAKE_CURRENT_BINARY_DIR}")
list(APPEND qm_files "${qm_file}")
endforeach()
set("${arg_QM_FILES_OUTPUT_VARIABLE}" "${qm_files}" PARENT_SCOPE)
endif()
# Forward options.
- set(forwarded_args IMMEDIATE_CALL)
+ set(forwarded_args
+ IMMEDIATE_CALL
+ __QT_INTERNAL_DEFAULT_QM_OUT_DIR "${CMAKE_CURRENT_BINARY_DIR}"
+ )
foreach(keyword IN LISTS options)
if(arg_${keyword})
list(APPEND forwarded_args ${keyword})
@@ -658,7 +669,9 @@ function(qt6_add_translations)
LRELEASE_TARGET "${arg_LRELEASE_TARGET}"
TS_FILES "${arg_TS_FILES}" ${arg_PLURALS_TS_FILE}
QM_FILES_OUTPUT_VARIABLE qm_files
- OPTIONS "${arg_LRELEASE_OPTIONS}")
+ OPTIONS "${arg_LRELEASE_OPTIONS}"
+ __QT_INTERNAL_DEFAULT_QM_OUT_DIR "${arg___QT_INTERNAL_DEFAULT_QM_OUT_DIR}"
+ )
if("${QT_I18N_TRANSLATED_LANGUAGES}" STREQUAL "")
_qt_internal_store_languages_from_ts_files_in_targets("${targets}" "${arg_TS_FILES}")