summaryrefslogtreecommitdiffstats
path: root/cmake/QtPublicFinalizerHelpers.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/QtPublicFinalizerHelpers.cmake')
-rw-r--r--cmake/QtPublicFinalizerHelpers.cmake35
1 files changed, 35 insertions, 0 deletions
diff --git a/cmake/QtPublicFinalizerHelpers.cmake b/cmake/QtPublicFinalizerHelpers.cmake
new file mode 100644
index 0000000000..96b5c6c740
--- /dev/null
+++ b/cmake/QtPublicFinalizerHelpers.cmake
@@ -0,0 +1,35 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+# Helper to check if the finalizer mode should be used.
+# 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} "${arg_DEFAULT_VALUE}")
+ set(value "${arg_DEFAULT_VALUE}")
+ endif()
+ set(${out_var} "${value}" PARENT_SCOPE)
+endfunction()
+
+function(__qt_internal_enable_finalizer_mode target finalizer enabled)
+ if(enabled)
+ set(enabled "TRUE")
+ else()
+ set(enabled "FALSE")
+ endif()
+ set_property(TARGET "${target}" PROPERTY _qt_${finalizer}_finalizer_mode "${enabled}")
+endfunction()