mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-09 08:40:11 -06:00
84 lines
2.5 KiB
C++
84 lines
2.5 KiB
C++
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
file LICENSE.rst or https://cmake.org/licensing for details. */
|
|
#pragma once
|
|
|
|
#include "cmConfigure.h" // IWYU pragma: keep
|
|
|
|
#include <iosfwd>
|
|
#include <map>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "cmExportFileGenerator.h"
|
|
#include "cmFindPackageStack.h"
|
|
#include "cmGeneratorExpression.h"
|
|
#include "cmSbomArguments.h"
|
|
|
|
class cmGeneratorTarget;
|
|
struct cmSbomDocument;
|
|
struct cmSpdxDocument;
|
|
struct cmSpdxPackage;
|
|
|
|
class cmExportSbomGenerator : virtual public cmExportFileGenerator
|
|
{
|
|
public:
|
|
cmExportSbomGenerator(cmSbomArguments args);
|
|
using cmExportFileGenerator::GenerateImportFile;
|
|
|
|
protected:
|
|
using ImportPropertyMap = std::map<std::string, std::string>;
|
|
|
|
struct TargetProperties
|
|
{
|
|
cmSpdxPackage const* Package;
|
|
cmGeneratorTarget const* Target;
|
|
ImportPropertyMap Properties;
|
|
};
|
|
|
|
void WriteSbom(cmSbomDocument& doc, std::ostream& os) const;
|
|
|
|
cmSpdxDocument GenerateSbom() const;
|
|
cmSpdxPackage GenerateImportTarget(cmGeneratorTarget const* target) const;
|
|
|
|
std::string const& GetPackageName() const { return this->PackageName; }
|
|
|
|
bool GenerateImportFile(std::ostream& os) override;
|
|
bool AddPackageInformation(cmSpdxPackage& artifact, std::string const& name,
|
|
cmPackageInformation const& package) const;
|
|
|
|
bool GenerateProperties(
|
|
cmSbomDocument& doc, cmSpdxDocument* project,
|
|
TargetProperties const& current,
|
|
std::vector<TargetProperties> const& allTargets) const;
|
|
|
|
void GenerateLinkProperties(
|
|
cmSbomDocument& doc, cmSpdxDocument* project, std::string const& libraries,
|
|
TargetProperties const& current,
|
|
std::vector<TargetProperties> const& allTargets) const;
|
|
|
|
bool NoteLinkedTarget(cmGeneratorTarget const* target,
|
|
std::string const& linkedName,
|
|
cmGeneratorTarget const* linkedTarget) override;
|
|
|
|
bool PopulateLinkLibrariesProperty(cmGeneratorTarget const* target,
|
|
cmGeneratorExpression::PreprocessContext,
|
|
ImportPropertyMap& properties);
|
|
|
|
private:
|
|
struct LinkInfo
|
|
{
|
|
std::string Package;
|
|
std::string Component;
|
|
};
|
|
|
|
std::string const PackageName;
|
|
std::string const PackageVersion;
|
|
std::string const PackageDescription;
|
|
std::string const PackageWebsite;
|
|
std::string const PackageLicense;
|
|
std::string const PackageUrl;
|
|
cmSbomArguments::SbomFormat const PackageFormat;
|
|
std::map<std::string, LinkInfo> LinkTargets;
|
|
std::map<std::string, cmPackageInformation> Requirements;
|
|
};
|