summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexey Edelev <alexey.edelev@qt.io>2021-06-17 17:55:42 +0200
committerAlexey Edelev <alexey.edelev@qt.io>2021-06-19 11:06:04 +0200
commitcdbb390c4a9b8d53cfcfd0884e6720423ce5e126 (patch)
tree52b7728487ed3485602d8362d4d32eb6aaef4f8b
parent72e21ad3e9f51acfe5da83ebeb859452266a3cf4 (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>
-rw-r--r--cmake/QtPublicFinalizerHelpers.cmake18
-rw-r--r--cmake/QtPublicTargetHelpers.cmake4
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)