CMake: Improve error reporting about missing SBOM dependencies

Improve wording when python or some dependency is missing, deduplicate
the strings and make sure to mention what is actually missing.

Pick-to: 6.8
Task-number: QTBUG-122899
Change-Id: I26af38f0330a5462c6001cae03c46284e742fbda
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
(cherry picked from commit ad82afb05417e2b07a55a4520105b1f01a802487)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Alexandru Croitor 2025-02-13 16:08:27 +01:00 committed by Qt Cherry-pick Bot
parent 71130a16f8
commit 4ae0667e2b

View File

@ -194,15 +194,28 @@ function(_qt_internal_sbom_find_and_handle_sbom_op_dependencies)
endif() endif()
endfunction() endfunction()
function(_qt_internal_sbom_assert_python_interpreter_available error_message_prefix)
if(NOT QT_INTERNAL_SBOM_PYTHON_EXECUTABLE)
message(FATAL_ERROR ${error_message_prefix}
" QT_INTERNAL_SBOM_PYTHON_EXECUTABLE is missing a valid path to a python interpreter ")
endif()
endfunction()
function(_qt_internal_sbom_assert_python_dependency_available key dep error_message_prefix)
if(NOT QT_INTERNAL_SBOM_DEPS_FOUND_FOR_${key})
message(FATAL_ERROR ${error_message_prefix} " Required Python dependencies not found: "
${dep}
)
endif()
endfunction()
# Helper to generate a SPDX JSON file from a tag/value format file. # Helper to generate a SPDX JSON file from a tag/value format file.
# This also implies some additional validity checks, useful to ensure a proper sbom file. # This also implies some additional validity checks, useful to ensure a proper sbom file.
function(_qt_internal_sbom_generate_json) function(_qt_internal_sbom_generate_json)
if(NOT QT_INTERNAL_SBOM_PYTHON_EXECUTABLE) set(error_message_prefix "Failed to generate an SBOM json file.")
message(FATAL_ERROR "Python interpreter not found for generating SBOM json file.") _qt_internal_sbom_assert_python_interpreter_available("${error_message_prefix}")
endif() _qt_internal_sbom_assert_python_dependency_available(GENERATE_JSON
if(NOT QT_INTERNAL_SBOM_DEPS_FOUND_FOR_GENERATE_JSON) "spdx_tools.spdx.clitools.pyspdxtools" ${error_message_prefix})
message(FATAL_ERROR "Python dependencies not found for generating SBOM json file.")
endif()
set(content " set(content "
message(STATUS \"Generating JSON: \${QT_SBOM_OUTPUT_PATH}.json\") message(STATUS \"Generating JSON: \${QT_SBOM_OUTPUT_PATH}.json\")
@ -270,13 +283,10 @@ function(_qt_internal_sbom_generate_tag_value_spdx_document)
cmake_parse_arguments(PARSE_ARGV 0 arg "${opt_args}" "${single_args}" "${multi_args}") cmake_parse_arguments(PARSE_ARGV 0 arg "${opt_args}" "${single_args}" "${multi_args}")
_qt_internal_validate_all_args_are_parsed(arg) _qt_internal_validate_all_args_are_parsed(arg)
if(NOT QT_INTERNAL_SBOM_PYTHON_EXECUTABLE) set(error_message_prefix "Failed to generate a tag/value SBOM file from a json SBOM file.")
message(FATAL_ERROR "Python interpreter not found for generating tag/value file from JSON.") _qt_internal_sbom_assert_python_interpreter_available("${error_message_prefix}")
endif() _qt_internal_sbom_assert_python_dependency_available(GENERATE_JSON
if(NOT QT_INTERNAL_SBOM_DEPS_FOUND_FOR_GENERATE_JSON) "spdx_tools.spdx.clitools.pyspdxtools" ${error_message_prefix})
message(FATAL_ERROR
"Python dependencies not found for generating tag/value file from JSON.")
endif()
if(NOT arg_OPERATION_ID) if(NOT arg_OPERATION_ID)
message(FATAL_ERROR "OPERATION_ID is required") message(FATAL_ERROR "OPERATION_ID is required")
@ -331,13 +341,10 @@ endfunction()
# Helper to verify the generated sbom is valid. # Helper to verify the generated sbom is valid.
function(_qt_internal_sbom_verify_valid) function(_qt_internal_sbom_verify_valid)
if(NOT QT_INTERNAL_SBOM_PYTHON_EXECUTABLE) set(error_message_prefix "Failed to verify SBOM file syntax.")
message(FATAL_ERROR "Python interpreter not found for verifying SBOM file.") _qt_internal_sbom_assert_python_interpreter_available("${error_message_prefix}")
endif() _qt_internal_sbom_assert_python_dependency_available(VERIFY_SBOM
"spdx_tools.spdx.clitools.pyspdxtools" ${error_message_prefix})
if(NOT QT_INTERNAL_SBOM_DEPS_FOUND_FOR_VERIFY_SBOM)
message(FATAL_ERROR "Python dependencies not found for verifying SBOM file")
endif()
set(content " set(content "
message(STATUS \"Verifying: \${QT_SBOM_OUTPUT_PATH}\") message(STATUS \"Verifying: \${QT_SBOM_OUTPUT_PATH}\")
@ -360,13 +367,10 @@ endfunction()
# Helper to verify the generated sbom is NTIA compliant. # Helper to verify the generated sbom is NTIA compliant.
function(_qt_internal_sbom_verify_ntia_compliant) function(_qt_internal_sbom_verify_ntia_compliant)
if(NOT QT_INTERNAL_SBOM_PYTHON_EXECUTABLE) set(error_message_prefix "Failed to run NTIA checker on SBOM file.")
message(FATAL_ERROR "Python interpreter not found for verifying SBOM file.") _qt_internal_sbom_assert_python_interpreter_available("${error_message_prefix}")
endif() _qt_internal_sbom_assert_python_dependency_available(RUN_NTIA
"ntia_conformance_checker.main" ${error_message_prefix})
if(NOT QT_INTERNAL_SBOM_DEPS_FOUND_FOR_RUN_NTIA)
message(FATAL_ERROR "Python dependencies not found for running the SBOM NTIA checker.")
endif()
set(content " set(content "
message(STATUS \"Checking for NTIA compliance: \${QT_SBOM_OUTPUT_PATH}\") message(STATUS \"Checking for NTIA compliance: \${QT_SBOM_OUTPUT_PATH}\")