summaryrefslogtreecommitdiffstats
path: root/cmake/QtPublicFinalizerHelpers.cmake
blob: d26d81e24f70cac33c1ae6f9a61654b0c9a26215 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0

# 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()