diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2024-03-20 14:27:02 +0100 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@qt.io> | 2024-03-21 06:47:10 +0100 |
commit | 5c3800b7ff94b36b2ca13fc23acfd9209ea4c50b (patch) | |
tree | 146f833abd21112825dd72e92fcbec12fb094ec3 | |
parent | db5038b8a5a1c1904d8f7609dd583319184fc266 (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.cmake | 27 |
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}") |