| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
| file LICENSE.rst or https://cmake.org/licensing for details. */ |
| #pragma once |
| |
| #include <string> |
| #include <utility> |
| #include <vector> |
| |
| #include <cm/memory> |
| |
| #include "cmBuildSbomBuilder.h" |
| #include "cmSbomArguments.h" |
| |
| class cmExportSet; |
| class cmGeneratorTarget; |
| class cmLocalGenerator; |
| |
| /** \class cmBuildSbomGenerator |
| * \brief Thin wrapper around cmBuildSbomBuilder for the build-tree SBOM case. |
| * |
| * Stored on cmMakefile at configure time. At generate time, |
| * ComputeBuildFileGenerators() calls Compute(lg) to resolve export set |
| * targets and supply the local generator — mirroring |
| * cmExportBuildFileGenerator. |
| */ |
| class cmBuildSbomGenerator |
| { |
| public: |
| cmBuildSbomGenerator(cmSbomArguments args, |
| std::vector<cmExportSet*> exportSets, |
| std::string outputFile) |
| : OutputFile(std::move(outputFile)) |
| , Builder(cm::make_unique<cmBuildSbomBuilder>(std::move(args), |
| std::move(exportSets))) |
| { |
| } |
| |
| void Compute(cmLocalGenerator* lg); |
| |
| std::string const& GetOutputFile() const { return this->OutputFile; } |
| |
| /** True if this SBOM directly describes `target`. Used by peer SBOMs to |
| * attribute cross-references when install(export) provenance is absent. */ |
| bool CoversTarget(cmGeneratorTarget const* target) const |
| { |
| return this->Builder->CoversTarget(target); |
| } |
| std::string const& GetPackageName() const |
| { |
| return this->Builder->GetPackageName(); |
| } |
| |
| /** Open the output file and write the SBOM document to it. */ |
| bool GenerateForBuild(); |
| |
| private: |
| std::string OutputFile; |
| std::unique_ptr<cmBuildSbomBuilder> Builder; |
| }; |