From e73b10bf4f013339ca887555b54c8c144baaa6e8 Mon Sep 17 00:00:00 2001 From: Alexandru Croitor Date: Thu, 20 Jun 2024 18:52:28 +0200 Subject: [PATCH] CMake: Handle system alias targets when recording them for the SBOM Un-alias system target names before processing them for the SBOM, otherwise we'll get errors about trying to set properties on alias targets. Amends 37a5e001277db9e1392a242171ab2b88cb6c3049 Task-number: QTBUG-122899 Change-Id: Ifef2108be123549505ed67f0b9c258a10431c84e Reviewed-by: Alexey Edelev (cherry picked from commit 089111aee0d4a98900aa35fa24d1a9cbbb03b905) Reviewed-by: Qt Cherry-pick Bot --- cmake/QtPublicSbomHelpers.cmake | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/cmake/QtPublicSbomHelpers.cmake b/cmake/QtPublicSbomHelpers.cmake index 1c6398a82de..f8cb8f7d689 100644 --- a/cmake/QtPublicSbomHelpers.cmake +++ b/cmake/QtPublicSbomHelpers.cmake @@ -1422,7 +1422,13 @@ function(_qt_internal_sbom_record_system_library_spdx_ids) # like zstd::libzstd_shared for qt_find_package(WrapZSTD), because we are not sure what # kind of zstd build was done. Make sure to check if the target exists before recording it. if(TARGET "${target}") - _qt_internal_sbom_record_system_library_spdx_id(${target} ${args}) + set(target_unaliased "${target}") + get_target_property(aliased_target "${target}" ALIASED_TARGET) + if(aliased_target) + set(target_unaliased ${aliased_target}) + endif() + + _qt_internal_sbom_record_system_library_spdx_id(${target_unaliased} ${args}) else() message(DEBUG "Skipping recording system library for SBOM because target does not exist: " @@ -1455,6 +1461,14 @@ function(_qt_internal_sbom_add_recorded_system_libraries) set(generated_package_names "") foreach(target IN LISTS consumed_targets) + # Some system targets like qtspeech SpeechDispatcher::SpeechDispatcher might be aliased, + # and we can't set properties on them, so unalias the target name. + set(target_original "${target}") + get_target_property(aliased_target "${target}" ALIASED_TARGET) + if(aliased_target) + set(target ${aliased_target}) + endif() + get_property(args GLOBAL PROPERTY _qt_internal_sbom_recorded_system_library_options_${target}) get_property(package_name GLOBAL PROPERTY @@ -1476,7 +1490,7 @@ function(_qt_internal_sbom_add_recorded_system_libraries) _qt_internal_extend_sbom(${target} ${args}) _qt_internal_finalize_sbom(${target}) - list(REMOVE_ITEM unconsumed_targets "${target}") + list(REMOVE_ITEM unconsumed_targets "${target_original}") endforeach() message(DEBUG "System libraries that were recorded, but not consumed: ${unconsumed_targets}")