|
| 1 | +# SBOM generation using DEMCON/cmake-sbom (SPDX 2.3, install-time) |
| 2 | +# Run: cmake --install <build-dir>/sbom |
| 3 | + |
| 4 | +include(FetchContent) |
| 5 | +FetchContent_Declare(cmake-sbom |
| 6 | + GIT_REPOSITORY https://github.com/DEMCON/cmake-sbom.git |
| 7 | + GIT_TAG v1.4.0 |
| 8 | + GIT_SHALLOW TRUE |
| 9 | +) |
| 10 | +if(POLICY CMP0169) |
| 11 | + cmake_policy(SET CMP0169 OLD) |
| 12 | +endif() |
| 13 | +FetchContent_GetProperties(cmake-sbom) |
| 14 | +if(NOT cmake-sbom_POPULATED) |
| 15 | + FetchContent_Populate(cmake-sbom) |
| 16 | +endif() |
| 17 | +list(APPEND CMAKE_MODULE_PATH "${cmake-sbom_SOURCE_DIR}/cmake") |
| 18 | +include(sbom) |
| 19 | + |
| 20 | +execute_process( |
| 21 | + COMMAND git describe --tags --abbrev=0 |
| 22 | + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/lib/libelectronic-id" |
| 23 | + OUTPUT_VARIABLE ELECTRONIC_ID_VERSION |
| 24 | + OUTPUT_STRIP_TRAILING_WHITESPACE |
| 25 | + ERROR_QUIET |
| 26 | +) |
| 27 | +string(REGEX REPLACE "^v" "" ELECTRONIC_ID_VERSION "${ELECTRONIC_ID_VERSION}") |
| 28 | + |
| 29 | +sbom_generate( |
| 30 | + OUTPUT "${CMAKE_BINARY_DIR}/web-eid-${PROJECT_VERSION}.spdx" |
| 31 | + LICENSE "MIT" |
| 32 | + SUPPLIER "Estonian Information System Authority" |
| 33 | + SUPPLIER_URL https://www.ria.ee |
| 34 | + DOWNLOAD_URL https://github.com/web-eid/web-eid-app |
| 35 | + VERSION "${PROJECT_VERSION}" |
| 36 | +) |
| 37 | + |
| 38 | +set(_sbom_reset "${CMAKE_BINARY_DIR}/sbom/sbom-reset.cmake") |
| 39 | +file(WRITE "${_sbom_reset}" |
| 40 | + "file(WRITE \"${CMAKE_BINARY_DIR}/sbom/sbom.spdx.in\" \"\")\n" |
| 41 | + "file(READ \"${CMAKE_BINARY_DIR}/SPDXRef-DOCUMENT.spdx.in\" _doc)\n" |
| 42 | + "file(APPEND \"${CMAKE_BINARY_DIR}/sbom/sbom.spdx.in\" \"\${_doc}\")\n" |
| 43 | + "set(SBOM_VERIFICATION_CODES \"\")\n" |
| 44 | +) |
| 45 | +file(APPEND "${CMAKE_BINARY_DIR}/sbom/CMakeLists.txt" |
| 46 | + "install(SCRIPT \"${_sbom_reset}\")\n" |
| 47 | +) |
| 48 | + |
| 49 | +set(_app_spdxid "SPDXRef-Package-${PROJECT_NAME} DEPENDS_ON @SBOM_LAST_SPDXID@") |
| 50 | +if(APPLE) |
| 51 | + sbom_add(PACKAGE web-eid-safari |
| 52 | + VERSION "${PROJECT_VERSION}" |
| 53 | + SUPPLIER "Organization: Estonian Information System Authority" |
| 54 | + DOWNLOAD_LOCATION https://github.com/web-eid/web-eid-app |
| 55 | + LICENSE "MIT" |
| 56 | + EXTREF "cpe:2.3:a:web-eid:web-eid:${PROJECT_VERSION}:*:*:*:*:*:*:*" |
| 57 | + RELATIONSHIP "@SBOM_LAST_SPDXID@ VARIANT_OF SPDXRef-Package-${PROJECT_NAME}" |
| 58 | + ) |
| 59 | + set(_app_spdxid "${_app_spdxid}\nRelationship: ${SBOM_LAST_SPDXID} DEPENDS_ON @SBOM_LAST_SPDXID@") |
| 60 | + file(READ "${CMAKE_SOURCE_DIR}/src/mac/js/package.json" _webext_json) |
| 61 | + string(JSON WEBEXT_VERSION GET "${_webext_json}" "version") |
| 62 | + sbom_add(PACKAGE web-eid-webextension |
| 63 | + VERSION "${WEBEXT_VERSION}" |
| 64 | + SUPPLIER "Organization: Estonian Information System Authority" |
| 65 | + DOWNLOAD_LOCATION https://github.com/web-eid/web-eid-webextension |
| 66 | + LICENSE "MIT" |
| 67 | + RELATIONSHIP "${SBOM_LAST_SPDXID} DEPENDS_ON @SBOM_LAST_SPDXID@" |
| 68 | + ) |
| 69 | + if(NPM_EXECUTABLE) |
| 70 | + execute_process( |
| 71 | + COMMAND "${NPM_EXECUTABLE}" --version |
| 72 | + OUTPUT_VARIABLE NPM_VERSION |
| 73 | + OUTPUT_STRIP_TRAILING_WHITESPACE |
| 74 | + ERROR_QUIET |
| 75 | + ) |
| 76 | + string(REGEX REPLACE "^v" "" NPM_VERSION "${NPM_VERSION}") |
| 77 | + endif() |
| 78 | + if(NPM_VERSION) |
| 79 | + sbom_add(PACKAGE npm |
| 80 | + VERSION "${NPM_VERSION}" |
| 81 | + SUPPLIER "Organization: OpenJS Foundation" |
| 82 | + DOWNLOAD_LOCATION https://www.npmjs.com |
| 83 | + LICENSE "Artistic-2.0" |
| 84 | + EXTREF "cpe:2.3:a:npmjs:npm:${NPM_VERSION}:*:*:*:*:*:*:*" |
| 85 | + RELATIONSHIP "@SBOM_LAST_SPDXID@ BUILD_TOOL_OF ${SBOM_LAST_SPDXID}" |
| 86 | + ) |
| 87 | + endif() |
| 88 | +endif() |
| 89 | + |
| 90 | +if(WIN32) |
| 91 | + find_program(WIX_EXECUTABLE NAMES wix) |
| 92 | + if(WIX_EXECUTABLE) |
| 93 | + execute_process( |
| 94 | + COMMAND "${WIX_EXECUTABLE}" --version |
| 95 | + OUTPUT_VARIABLE WIX_VERSION |
| 96 | + OUTPUT_STRIP_TRAILING_WHITESPACE |
| 97 | + ERROR_QUIET |
| 98 | + ) |
| 99 | + # Strip build metadata suffix (e.g. "6.0.2+b3f3403" -> "6.0.2") |
| 100 | + string(REGEX REPLACE "\\+.*$" "" WIX_VERSION "${WIX_VERSION}") |
| 101 | + endif() |
| 102 | + if(WIX_VERSION) |
| 103 | + sbom_add(PACKAGE WiX |
| 104 | + VERSION "${WIX_VERSION}" |
| 105 | + SUPPLIER "Organization: WiX Toolset Contributors" |
| 106 | + DOWNLOAD_LOCATION https://wixtoolset.org |
| 107 | + LICENSE "MS-RL" |
| 108 | + EXTREF "cpe:2.3:a:wixtoolset:wix_toolset:${WIX_VERSION}:*:*:*:*:*:*:*" |
| 109 | + ) |
| 110 | + endif() |
| 111 | +endif() |
| 112 | + |
| 113 | +sbom_add(PACKAGE libelectronic-id |
| 114 | + VERSION "${ELECTRONIC_ID_VERSION}" |
| 115 | + SUPPLIER "Organization: Estonian Information System Authority" |
| 116 | + DOWNLOAD_LOCATION https://github.com/web-eid/libelectronic-id |
| 117 | + LICENSE "MIT" |
| 118 | + EXTREF "cpe:2.3:a:web-eid:libelectronic-id:${ELECTRONIC_ID_VERSION}:*:*:*:*:*:*:*" |
| 119 | + RELATIONSHIP "${_app_spdxid}" |
| 120 | +) |
| 121 | + |
| 122 | +find_package(GTest QUIET) |
| 123 | +if(GTest_FOUND) |
| 124 | + sbom_add(PACKAGE GTest |
| 125 | + VERSION "${GTest_VERSION}" |
| 126 | + SUPPLIER "Organization: Google LLC" |
| 127 | + DOWNLOAD_LOCATION https://github.com/google/googletest |
| 128 | + LICENSE "BSD-3-Clause" |
| 129 | + EXTREF "cpe:2.3:a:google:googletest:${GTest_VERSION}:*:*:*:*:*:*:*" |
| 130 | + RELATIONSHIP "${SBOM_LAST_SPDXID} TEST_TOOL_OF @SBOM_LAST_SPDXID@" |
| 131 | + ) |
| 132 | +endif() |
| 133 | + |
| 134 | +if(PCSC_FOUND) |
| 135 | + sbom_add(PACKAGE libpcsclite |
| 136 | + VERSION "${PCSC_VERSION}" |
| 137 | + SUPPLIER "Organization: Muscle project" |
| 138 | + DOWNLOAD_LOCATION https://pcsclite.apdu.fr |
| 139 | + LICENSE "BSD-3-Clause" |
| 140 | + EXTREF "cpe:2.3:a:pcsc-lite_project:pcsc-lite:${PCSC_VERSION}:*:*:*:*:*:*:*" |
| 141 | + ) |
| 142 | +endif() |
| 143 | + |
| 144 | +sbom_add(PACKAGE Qt6 |
| 145 | + VERSION "${Qt6_VERSION}" |
| 146 | + SUPPLIER "Organization: The Qt Company" |
| 147 | + DOWNLOAD_LOCATION https://download.qt.io/ |
| 148 | + LICENSE "LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only OR LicenseRef-Qt-commercial" |
| 149 | + EXTREF "cpe:2.3:a:qt:qt:${Qt6_VERSION}:*:*:*:*:*:*:*" |
| 150 | + RELATIONSHIP "${_app_spdxid}" |
| 151 | +) |
| 152 | + |
| 153 | +sbom_add(PACKAGE OpenSSL |
| 154 | + VERSION "${OPENSSL_VERSION}" |
| 155 | + SUPPLIER "Organization: OpenSSL Software Foundation" |
| 156 | + DOWNLOAD_LOCATION https://openssl.org |
| 157 | + LICENSE "Apache-2.0" |
| 158 | + EXTREF "cpe:2.3:a:openssl:openssl:${OPENSSL_VERSION}:*:*:*:*:*:*:*" |
| 159 | + RELATIONSHIP "${_app_spdxid}" |
| 160 | +) |
| 161 | + |
| 162 | +sbom_finalize(NO_VERIFY) |
0 commit comments