summaryrefslogtreecommitdiffstats
path: root/cmake/QtGnSbom.cmake
blob: eb5187df8e1ac3ecb7d42209976df65071da2832 (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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# Copyright (C) 2024 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause

# This is a wrapper around sbom.py which creates an SBOM document for a GN-based target.

if(NOT CMAKE_SCRIPT_MODE_FILE)
    message(FATAL_ERROR "This file should run only in script mode")
    return()
endif()

foreach(variable
        Python3_EXECUTABLE SCRIPT_PATH GN_TARGET_LIST BUILD_DIR_LIST
        PACKAGE_ID DOC_NAMESPACE OUTPUT)
    if(NOT DEFINED ${variable} OR "${${variable}}" STREQUAL "")
        message(FATAL_ERROR "\n${variable} not set (${${variable}})\n")
    endif()
endforeach()

set(path_mode REALPATH)
if(APPLE AND QT_ALLOW_SYMLINK_IN_PATHS)
    set(path_mode ABSOLUTE)
endif()

get_filename_component(WEBENGINE_ROOT_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/.." ${path_mode})
get_filename_component(WEBENGINE_ROOT_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}" ${path_mode})

include(${WEBENGINE_ROOT_SOURCE_DIR}/.cmake.conf)
include(${WEBENGINE_ROOT_SOURCE_DIR}/cmake/QtBuildGnHelpers.cmake)

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})

find_package(Gn ${QT_REPO_MODULE_VERSION} EXACT MODULE REQUIRED)

if(DEFINED ENV{QT_WEBENGINE_VERBOSE_SBOM_OUTPUT})
    set(SCRIPT_VERBOSE "--verbose")
else()
    set(SCRIPT_VERBOSE "")
endif()

execute_process(
    COMMAND "${Python3_EXECUTABLE}" "${SCRIPT_PATH}"
        --gn-binary "${Gn_EXECUTABLE}"
        --gn-target-list "${GN_TARGET_LIST}"
        --build-dir-list "${BUILD_DIR_LIST}"
        --gn-version ${Gn_VERSION}
        --package-id ${PACKAGE_ID}
        --namespace "${DOC_NAMESPACE}"
        ${SCRIPT_VERBOSE}
        "${OUTPUT}"
    RESULT_VARIABLE gn_result
    OUTPUT_VARIABLE gn_output
    ERROR_VARIABLE gn_error
    TIMEOUT 600
)

string(REGEX REPLACE "\n$" "" gn_output "${gn_output}")
string(REGEX REPLACE "\n$" "" gn_error "${gn_error}")
if(NOT gn_result EQUAL 0)
    message(FATAL_ERROR "\n-- SBOM generation FAILED\n${gn_output}\n${gn_error}\n-- Exit code: ${gn_result}\n")
elseif(DEFINED ENV{QT_WEBENGINE_VERBOSE_SBOM_OUTPUT})
    message(STATUS "SBOM generation successful\n-- stdout: ${gn_output}\n-- stderr: ${gn_error}")
elseif(NOT (gn_output STREQUAL "" AND gn_error STREQUAL ""))
    message(STATUS "SBOM generation successful but did not run cleanly:\n-- stdout: ${gn_output}\n-- stderr: ${gn_error}")
endif()