CMake: Allow specifying most SBOM options to qt_internal_add_foo

Previously, only a very short subset of options related to attribution
files could be specified to qt_internal_add_module /
qt_internal_extend_target.

It is more convenient to allow specifying most (safe) options, instead
of calling another function.

Unsafe are considered paths like INSTALL_PATH and derivatives, TYPE
which is too generic, and some other ones like LIBRARIES which would
be duplicated, and causes warnings in cmake_parse_arguments if
duplicated.

Change the code to allow specifying most SBOM options and forwarding
them to _qt_internal_extend_sbom.

Task-number: QTBUG-122899
Change-Id: I6eb723e165edf59973d83c66eace43acdce237de
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
(cherry picked from commit 81162cc8b6931c8659dc722be97eb788e344812a)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Alexandru Croitor 2024-06-14 19:07:16 +02:00 committed by Qt Cherry-pick Bot
parent ba08a2fb17
commit 9be3d7a7a0
8 changed files with 118 additions and 90 deletions

View File

@ -130,49 +130,27 @@ function(qt_internal_add_cmake_library target)
)
endfunction()
macro(qt_internal_get_3rdparty_library_sbom_options option_args single_args multi_args)
set(${option_args} "")
set(${single_args}
PACKAGE_VERSION
CPE_VENDOR
CPE_PRODUCT
LICENSE_EXPRESSION
DOWNLOAD_LOCATION
${__qt_internal_sbom_single_args}
)
set(${multi_args}
COPYRIGHTS
CPE # Common Platform Enumeration, free-form
${__qt_internal_sbom_multi_args}
)
endmacro()
# This function replaces qmake's qt_helper_lib feature. It is intended to
# compile 3rdparty libraries as part of the build.
#
function(qt_internal_add_3rdparty_library target)
qt_internal_get_add_library_option_args(library_option_args)
qt_internal_get_3rdparty_library_sbom_options(
sbom_option_args
sbom_single_args
sbom_multi_args
)
set(option_args
EXCEPTIONS
INSTALL
SKIP_AUTOMOC
${sbom_option_args}
${__qt_internal_sbom_optional_args}
)
set(single_args
OUTPUT_DIRECTORY
QMAKE_LIB_NAME
${sbom_single_args}
${__qt_internal_sbom_single_args}
)
set(multi_args
${__default_private_args}
${__default_public_args}
${sbom_multi_args}
${__qt_internal_sbom_multi_args}
)
cmake_parse_arguments(PARSE_ARGV 1 arg
@ -394,10 +372,12 @@ function(qt_internal_add_3rdparty_library target)
FORWARD_APPEND
FORWARD_PREFIX arg
FORWARD_OUT_VAR sbom_args
FORWARD_OPTIONS
${__qt_internal_sbom_optional_args}
FORWARD_SINGLE
${sbom_single_args}
${__qt_internal_sbom_single_args}
FORWARD_MULTI
${sbom_multi_args}
${__qt_internal_sbom_multi_args}
)
_qt_internal_extend_sbom(${target} ${sbom_args})

View File

@ -9,6 +9,7 @@ function(qt_internal_add_app target)
INSTALL_VERSIONED_LINK
EXCEPTIONS
NO_UNITY_BUILD
${__qt_internal_sbom_optional_args}
)
set(single_args
${__default_target_info_args}
@ -84,10 +85,6 @@ 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}
ATTRIBUTION_ENTRY_INDEX "${arg_ATTRIBUTION_ENTRY_INDEX}"
ATTRIBUTION_FILE_PATHS ${arg_ATTRIBUTION_FILE_PATHS}
ATTRIBUTION_FILE_DIR_PATHS ${arg_ATTRIBUTION_FILE_DIR_PATHS}
SBOM_DEPENDENCIES ${arg_SBOM_DEPENDENCIES}
TARGET_VERSION ${arg_TARGET_VERSION}
TARGET_PRODUCT ${arg_TARGET_PRODUCT}
TARGET_DESCRIPTION ${arg_TARGET_DESCRIPTION}
@ -144,6 +141,11 @@ function(qt_internal_add_app target)
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})

View File

@ -138,10 +138,6 @@ function(qt_internal_add_executable name)
MOC_OPTIONS ${arg_MOC_OPTIONS}
ENABLE_AUTOGEN_TOOLS ${arg_ENABLE_AUTOGEN_TOOLS}
DISABLE_AUTOGEN_TOOLS ${arg_DISABLE_AUTOGEN_TOOLS}
ATTRIBUTION_ENTRY_INDEX "${arg_ATTRIBUTION_ENTRY_INDEX}"
ATTRIBUTION_FILE_PATHS ${arg_ATTRIBUTION_FILE_PATHS}
ATTRIBUTION_FILE_DIR_PATHS ${arg_ATTRIBUTION_FILE_DIR_PATHS}
SBOM_DEPENDENCIES ${arg_SBOM_DEPENDENCIES}
)
set_target_properties("${name}" PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${arg_OUTPUT_DIRECTORY}"
@ -211,6 +207,23 @@ function(qt_internal_add_executable name)
ADDITIONAL_INSTALL_ARGS ${additional_install_args})
qt_internal_install_pdb_files(${name} "${arg_INSTALL_DIRECTORY}")
endif()
if(QT_GENERATE_SBOM)
set(sbom_args "")
_qt_internal_forward_function_args(
FORWARD_APPEND
FORWARD_PREFIX arg
FORWARD_OUT_VAR sbom_args
FORWARD_OPTIONS
${__qt_internal_sbom_optional_args}
FORWARD_SINGLE
${__qt_internal_sbom_single_args}
FORWARD_MULTI
${__qt_internal_sbom_multi_args}
)
_qt_internal_extend_sbom(${name} ${sbom_args})
endif()
endfunction()
# This function compiles the target at configure time the very first time and creates the custom

View File

@ -18,6 +18,7 @@ macro(qt_internal_get_internal_add_module_keywords option_args single_args multi
NO_HEADERSCLEAN_CHECK
NO_GENERATE_CPP_EXPORTS
NO_UNITY_BUILD
${__qt_internal_sbom_optional_args}
)
set(${single_args}
MODULE_INCLUDE_NAME
@ -641,10 +642,6 @@ function(qt_internal_add_module target)
DISABLE_AUTOGEN_TOOLS ${arg_DISABLE_AUTOGEN_TOOLS}
PRECOMPILED_HEADER ${arg_PRECOMPILED_HEADER}
NO_PCH_SOURCES ${arg_NO_PCH_SOURCES}
ATTRIBUTION_ENTRY_INDEX "${arg_ATTRIBUTION_ENTRY_INDEX}"
ATTRIBUTION_FILE_PATHS ${arg_ATTRIBUTION_FILE_PATHS}
ATTRIBUTION_FILE_DIR_PATHS ${arg_ATTRIBUTION_FILE_DIR_PATHS}
SBOM_DEPENDENCIES ${arg_SBOM_DEPENDENCIES}
)
# The public module define is not meant to be used when building the module itself,
@ -920,9 +917,8 @@ set(QT_ALLOW_MISSING_TOOLS_PACKAGES TRUE)")
qt_describe_module(${target})
set(sbom_args "")
if(QT_GENERATE_SBOM)
set(sbom_args "")
list(APPEND sbom_args TYPE QT_MODULE)
qt_get_cmake_configurations(configs)
@ -953,6 +949,18 @@ set(QT_ALLOW_MISSING_TOOLS_PACKAGES TRUE)")
)
endforeach()
_qt_internal_forward_function_args(
FORWARD_APPEND
FORWARD_PREFIX arg
FORWARD_OUT_VAR sbom_args
FORWARD_OPTIONS
${__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()

View File

@ -9,6 +9,7 @@ macro(qt_internal_get_internal_add_plugin_keywords option_args single_args multi
ALLOW_UNDEFINED_SYMBOLS
SKIP_INSTALL
NO_UNITY_BUILD
${__qt_internal_sbom_optional_args}
)
set(${single_args}
OUTPUT_DIRECTORY
@ -314,10 +315,6 @@ function(qt_internal_add_plugin target)
MOC_OPTIONS ${arg_MOC_OPTIONS}
ENABLE_AUTOGEN_TOOLS ${arg_ENABLE_AUTOGEN_TOOLS}
DISABLE_AUTOGEN_TOOLS ${arg_DISABLE_AUTOGEN_TOOLS}
ATTRIBUTION_ENTRY_INDEX "${arg_ATTRIBUTION_ENTRY_INDEX}"
ATTRIBUTION_FILE_PATHS ${arg_ATTRIBUTION_FILE_PATHS}
ATTRIBUTION_FILE_DIR_PATHS ${arg_ATTRIBUTION_FILE_DIR_PATHS}
SBOM_DEPENDENCIES ${arg_SBOM_DEPENDENCIES}
)
qt_internal_add_repo_local_defines("${target}")
@ -435,6 +432,18 @@ function(qt_internal_add_plugin target)
)
endforeach()
_qt_internal_forward_function_args(
FORWARD_APPEND
FORWARD_PREFIX arg
FORWARD_OUT_VAR sbom_args
FORWARD_OPTIONS
${__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()

View File

@ -262,11 +262,10 @@ function(_qt_internal_sbom_end_project)
set_property(GLOBAL PROPERTY _qt_internal_sbom_repo_begin_called FALSE)
endfunction()
# Helper to get the options that _qt_internal_sbom_add_target understands.
# Also used in qt_find_package_extend_sbom.
macro(_qt_internal_get_sbom_add_target_options opt_args single_args multi_args)
# Helper to get the options that _qt_internal_sbom_add_target understands, but that are also
# a safe subset for qt_internal_add_module, qt_internal_extend_target, etc to understand.
macro(_qt_internal_get_sbom_add_target_common_options opt_args single_args multi_args)
set(${opt_args}
NO_INSTALL
NO_CURRENT_DIR_ATTRIBUTION
NO_DEFAULT_QT_LICENSE
NO_DEFAULT_DIRECTORY_QT_LICENSE
@ -275,7 +274,6 @@ macro(_qt_internal_get_sbom_add_target_options opt_args single_args multi_args)
NO_DEFAULT_QT_SUPPLIER
)
set(${single_args}
TYPE
PACKAGE_VERSION
FRIENDLY_PACKAGE_NAME
CPE_VENDOR
@ -286,13 +284,32 @@ macro(_qt_internal_get_sbom_add_target_options opt_args single_args multi_args)
)
set(${multi_args}
COPYRIGHTS
LIBRARIES
PUBLIC_LIBRARIES
CPE
SBOM_DEPENDENCIES
ATTRIBUTION_FILE_PATHS
ATTRIBUTION_FILE_DIR_PATHS
)
endmacro()
# Helper to get the options that _qt_internal_sbom_add_target understands.
# Also used in qt_find_package_extend_sbom.
macro(_qt_internal_get_sbom_add_target_options opt_args single_args multi_args)
set(${opt_args}
NO_INSTALL
)
set(${single_args}
TYPE
)
set(${multi_args}
LIBRARIES
PUBLIC_LIBRARIES
)
_qt_internal_get_sbom_add_target_common_options(
common_opt_args common_single_args common_multi_args)
list(APPEND opt_args ${common_opt_args})
list(APPEND single_args ${common_single_args})
list(APPEND multi_args ${common_multi_args})
_qt_internal_sbom_get_multi_config_single_args(multi_config_single_args)
list(APPEND single_args ${multi_config_single_args})

View File

@ -41,11 +41,12 @@ function(qt_internal_extend_target target)
set(option_args
NO_UNITY_BUILD
${__qt_internal_sbom_optional_args}
)
set(single_args
PRECOMPILED_HEADER
EXTRA_LINKER_SCRIPT_CONTENT
ATTRIBUTION_ENTRY_INDEX
${__qt_internal_sbom_single_args}
)
set(multi_args
${__default_public_args}
@ -55,9 +56,7 @@ function(qt_internal_extend_target target)
CONDITION_INDEPENDENT_SOURCES
COMPILE_FLAGS
EXTRA_LINKER_SCRIPT_EXPORTS
SBOM_DEPENDENCIES
ATTRIBUTION_FILE_PATHS
ATTRIBUTION_FILE_DIR_PATHS
${__qt_internal_sbom_multi_args}
)
cmake_parse_arguments(PARSE_ARGV 1 arg
@ -226,28 +225,20 @@ function(qt_internal_extend_target target)
)
endif()
if(arg_SBOM_DEPENDENCIES)
_qt_internal_extend_sbom_dependencies(${target}
SBOM_DEPENDENCIES ${arg_SBOM_DEPENDENCIES}
)
endif()
if(NOT "${arg_ATTRIBUTION_ENTRY_INDEX}" STREQUAL "")
_qt_internal_extend_sbom(${target}
ATTRIBUTION_ENTRY_INDEX "${arg_ATTRIBUTION_ENTRY_INDEX}"
)
endif()
if(arg_ATTRIBUTION_FILE_PATHS)
_qt_internal_extend_sbom(${target}
ATTRIBUTION_FILE_PATHS ${arg_ATTRIBUTION_FILE_PATHS}
)
endif()
if(arg_ATTRIBUTION_FILE_DIR_PATHS)
_qt_internal_extend_sbom(${target}
ATTRIBUTION_FILE_DIR_PATHS ${arg_ATTRIBUTION_FILE_DIR_PATHS}
if(QT_GENERATE_SBOM)
set(sbom_args "")
_qt_internal_forward_function_args(
FORWARD_APPEND
FORWARD_PREFIX arg
FORWARD_OUT_VAR sbom_args
FORWARD_OPTIONS
${__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()
set(target_private "${target}Private")
@ -438,13 +429,10 @@ macro(qt_internal_setup_default_target_function_options)
TARGET_COPYRIGHT
)
set(__qt_internal_sbom_single_args
ATTRIBUTION_ENTRY_INDEX
)
set(__qt_internal_sbom_multi_args
SBOM_DEPENDENCIES
ATTRIBUTION_FILE_PATHS
ATTRIBUTION_FILE_DIR_PATHS
_qt_internal_get_sbom_add_target_common_options(
__qt_internal_sbom_optional_args
__qt_internal_sbom_single_args
__qt_internal_sbom_multi_args
)
# Collection of arguments so they can be shared across qt_internal_add_executable
@ -457,6 +445,7 @@ macro(qt_internal_setup_default_target_function_options)
DELAY_TARGET_INFO
QT_APP
NO_UNITY_BUILD
${__qt_internal_sbom_optional_args}
)
set(__qt_internal_add_executable_single_args
CORE_LIBRARY

View File

@ -50,7 +50,9 @@ function(qt_internal_add_tool target_name)
INSTALL_VERSIONED_LINK
EXCEPTIONS
NO_UNITY_BUILD
TRY_RUN)
TRY_RUN
${__qt_internal_sbom_optional_args}
)
set(one_value_keywords
TOOLS_TARGET
INSTALL_DIR
@ -132,10 +134,6 @@ function(qt_internal_add_tool target_name)
LINK_OPTIONS ${arg_LINK_OPTIONS}
MOC_OPTIONS ${arg_MOC_OPTIONS}
DISABLE_AUTOGEN_TOOLS ${disable_autogen_tools}
ATTRIBUTION_ENTRY_INDEX "${arg_ATTRIBUTION_ENTRY_INDEX}"
ATTRIBUTION_FILE_PATHS ${arg_ATTRIBUTION_FILE_PATHS}
ATTRIBUTION_FILE_DIR_PATHS ${arg_ATTRIBUTION_FILE_DIR_PATHS}
SBOM_DEPENDENCIES ${arg_SBOM_DEPENDENCIES}
TARGET_VERSION ${arg_TARGET_VERSION}
TARGET_PRODUCT ${arg_TARGET_PRODUCT}
TARGET_DESCRIPTION ${arg_TARGET_DESCRIPTION}
@ -273,6 +271,18 @@ function(qt_internal_add_tool target_name)
qt_internal_install_pdb_files(${target_name} "${install_dir}")
if(QT_GENERATE_SBOM)
_qt_internal_forward_function_args(
FORWARD_APPEND
FORWARD_PREFIX arg
FORWARD_OUT_VAR sbom_args
FORWARD_OPTIONS
${__qt_internal_sbom_optional_args}
FORWARD_SINGLE
${__qt_internal_sbom_single_args}
FORWARD_MULTI
${__qt_internal_sbom_multi_args}
)
_qt_internal_extend_sbom(${target_name} ${sbom_args})
endif()