diff options
Diffstat (limited to 'cmake/QtAppHelpers.cmake')
-rw-r--r-- | cmake/QtAppHelpers.cmake | 83 |
1 files changed, 74 insertions, 9 deletions
diff --git a/cmake/QtAppHelpers.cmake b/cmake/QtAppHelpers.cmake index 01ca0a5ca2..eb29030e30 100644 --- a/cmake/QtAppHelpers.cmake +++ b/cmake/QtAppHelpers.cmake @@ -4,10 +4,28 @@ # This function creates a CMake target for a Qt internal app. # Such projects had a load(qt_app) command. function(qt_internal_add_app target) + set(option_args + NO_INSTALL + INSTALL_VERSIONED_LINK + EXCEPTIONS + NO_UNITY_BUILD + ${__qt_internal_sbom_optional_args} + ) + set(single_args + ${__default_target_info_args} + ${__qt_internal_sbom_single_args} + INSTALL_DIR + ) + set(multi_args + ${__default_private_args} + ${__qt_internal_sbom_multi_args} + PUBLIC_LIBRARIES + ) + cmake_parse_arguments(PARSE_ARGV 1 arg - "NO_INSTALL;INSTALL_VERSIONED_LINK;EXCEPTIONS" - "${__default_target_info_args};INSTALL_DIR" - "${__default_private_args};PUBLIC_LIBRARIES" + "${option_args}" + "${single_args}" + "${multi_args}" ) _qt_internal_validate_all_args_are_parsed(arg) @@ -35,7 +53,11 @@ function(qt_internal_add_app target) "a future Qt version. Use the LIBRARIES option instead.") endif() - qt_internal_library_deprecation_level(deprecation_define) + if(arg_NO_UNITY_BUILD) + set(arg_NO_UNITY_BUILD "NO_UNITY_BUILD") + else() + set(arg_NO_UNITY_BUILD "") + endif() qt_internal_add_executable("${target}" QT_APP @@ -44,8 +66,11 @@ function(qt_internal_add_app target) OUTPUT_DIRECTORY "${output_directory}" ${exceptions} ${no_install} + ${arg_NO_UNITY_BUILD} ${forward_install_dir} SOURCES ${arg_SOURCES} + NO_PCH_SOURCES ${arg_NO_PCH_SOURCES} + NO_UNITY_BUILD_SOURCES ${arg_NO_UNITY_BUILD_SOURCES} INCLUDE_DIRECTORIES ${arg_INCLUDE_DIRECTORIES} DEFINES @@ -60,11 +85,13 @@ function(qt_internal_add_app target) MOC_OPTIONS ${arg_MOC_OPTIONS} ENABLE_AUTOGEN_TOOLS ${arg_ENABLE_AUTOGEN_TOOLS} DISABLE_AUTOGEN_TOOLS ${arg_DISABLE_AUTOGEN_TOOLS} - TARGET_VERSION "${arg_TARGET_VERSION}" - TARGET_PRODUCT "${arg_TARGET_PRODUCT}" - TARGET_DESCRIPTION "${arg_TARGET_DESCRIPTION}" - TARGET_COMPANY "${arg_TARGET_COMPANY}" - TARGET_COPYRIGHT "${arg_TARGET_COPYRIGHT}" + TARGET_VERSION ${arg_TARGET_VERSION} + TARGET_PRODUCT ${arg_TARGET_PRODUCT} + TARGET_DESCRIPTION ${arg_TARGET_DESCRIPTION} + TARGET_COMPANY ${arg_TARGET_COMPANY} + TARGET_COPYRIGHT ${arg_TARGET_COPYRIGHT} + # If you are putting anything after these, make sure that + # qt_set_target_info_properties knows how to process them ) qt_internal_add_target_aliases("${target}") _qt_internal_apply_strict_cpp("${target}") @@ -87,6 +114,43 @@ function(qt_internal_add_app target) TARGETS ${target}) endif() + if(QT_GENERATE_SBOM) + set(sbom_args "") + list(APPEND sbom_args TYPE QT_APP) + + qt_get_cmake_configurations(cmake_configs) + foreach(cmake_config IN LISTS cmake_configs) + qt_get_install_target_default_args( + OUT_VAR unused_install_targets_default_args + OUT_VAR_RUNTIME runtime_install_destination + RUNTIME "${arg_INSTALL_DIR}" + CMAKE_CONFIG "${cmake_config}" + ALL_CMAKE_CONFIGS ${cmake_configs}) + + _qt_internal_sbom_append_multi_config_aware_single_arg_option( + RUNTIME_PATH + "${runtime_install_destination}" + "${cmake_config}" + sbom_args + ) + endforeach() + + _qt_internal_forward_function_args( + FORWARD_APPEND + FORWARD_PREFIX arg + FORWARD_OUT_VAR sbom_args + FORWARD_OPTIONS + NO_INSTALL + ${__qt_internal_sbom_optional_args} + FORWARD_SINGLE + ${__qt_internal_sbom_single_args} + FORWARD_MULTI + ${__qt_internal_sbom_multi_args} + ) + + _qt_internal_extend_sbom(${target} ${sbom_args}) + endif() + qt_add_list_file_finalizer(qt_internal_finalize_app ${target}) endfunction() @@ -134,4 +198,5 @@ function(qt_internal_finalize_app target) # set after a qt_internal_add_app call. qt_apply_rpaths(TARGET "${target}" INSTALL_PATH "${INSTALL_BINDIR}" RELATIVE_RPATH) qt_internal_apply_staging_prefix_build_rpath_workaround() + _qt_internal_finalize_sbom(${target}) endfunction() |