diff options
author | Alexey Edelev <alexey.edelev@qt.io> | 2021-06-17 17:55:42 +0200 |
---|---|---|
committer | Alexey Edelev <alexey.edelev@qt.io> | 2021-06-19 11:06:04 +0200 |
commit | cdbb390c4a9b8d53cfcfd0884e6720423ce5e126 (patch) | |
tree | 52b7728487ed3485602d8362d4d32eb6aaef4f8b /cmake | |
parent | 72e21ad3e9f51acfe5da83ebeb859452266a3cf4 (diff) |
Disable finalizers by default for the non-ld linkers
Check if link order matters before use the object library finalizer.
Amends 5fb99e3860eb43f4bacacec7f4a4626cb0159b14
Pick-to: 6.2
Change-Id: Ie996bc175ebea36ccda1bb2fe388ae3b7fcde395
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/QtPublicFinalizerHelpers.cmake | 18 | ||||
-rw-r--r-- | cmake/QtPublicTargetHelpers.cmake | 4 |
2 files changed, 19 insertions, 3 deletions
diff --git a/cmake/QtPublicFinalizerHelpers.cmake b/cmake/QtPublicFinalizerHelpers.cmake index 365d4f2a47..1a4dcda902 100644 --- a/cmake/QtPublicFinalizerHelpers.cmake +++ b/cmake/QtPublicFinalizerHelpers.cmake @@ -1,11 +1,23 @@ # Helper to check if the finalizer mode should be used. -# If true or unset, use finalizer mode. +# If true, use finalizer mode. # If false, use regular mode (usage requirement propagation via associated Qt module) +# Arguments: +# DEFAULT_VALUE specifies the default value of the finalizer mode flag if it is not set. function(__qt_internal_check_finalizer_mode target out_var finalizer) + set(option_args "") + set(single_args DEFAULT_VALUE) + set(multi_args "") + cmake_parse_arguments(arg "${option_args}" "${single_args}" "${multi_args}" ${ARGN}) + + if(NOT DEFINED arg_DEFAULT_VALUE OR arg_DEFAULT_VALUE) + set(arg_DEFAULT_VALUE TRUE) + else() + set(arg_DEFAULT_VALUE FALSE) + endif() get_target_property(value ${target} _qt_${finalizer}_finalizer_mode) if("${value}" STREQUAL "value-NOTFOUND") - __qt_internal_enable_finalizer_mode(${target} ${finalizer} "TRUE") - set(value "TRUE") + __qt_internal_enable_finalizer_mode(${target} ${finalizer} "${arg_DEFAULT_VALUE}") + set(value "${arg_DEFAULT_VALUE}") endif() set(${out_var} "${value}" PARENT_SCOPE) endfunction() diff --git a/cmake/QtPublicTargetHelpers.cmake b/cmake/QtPublicTargetHelpers.cmake index 94bda88d66..5f09e97e0f 100644 --- a/cmake/QtPublicTargetHelpers.cmake +++ b/cmake/QtPublicTargetHelpers.cmake @@ -104,9 +104,13 @@ function(__qt_internal_process_dependency_object_libraries target) endif() set_target_properties(${target} PROPERTIES _qt_object_libraries_finalizer_processed TRUE) + get_target_property(qt_link_order_matters + ${QT_CMAKE_EXPORT_NAMESPACE}::Platform _qt_link_order_matters + ) __qt_internal_check_finalizer_mode(${target} use_finalizer_mode object_libraries + DEFAULT_VALUE "${qt_link_order_matters}" ) if(NOT use_finalizer_mode) |