Coverage Report

Created: 2026-03-12 06:35

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/CMake/Source/cmExportSbomGenerator.h
Line
Count
Source
1
/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
2
   file LICENSE.rst or https://cmake.org/licensing for details. */
3
#pragma once
4
5
#include "cmConfigure.h" // IWYU pragma: keep
6
7
#include <iosfwd>
8
#include <map>
9
#include <string>
10
#include <vector>
11
12
#include "cmExportFileGenerator.h"
13
#include "cmFindPackageStack.h"
14
#include "cmGeneratorExpression.h"
15
#include "cmSbomArguments.h"
16
17
class cmGeneratorTarget;
18
struct cmSbomDocument;
19
struct cmSpdxDocument;
20
struct cmSpdxPackage;
21
struct cmSpdxCreationInfo;
22
23
class cmExportSbomGenerator : virtual public cmExportFileGenerator
24
{
25
public:
26
  cmExportSbomGenerator(cmSbomArguments args);
27
  using cmExportFileGenerator::GenerateImportFile;
28
29
protected:
30
  using ImportPropertyMap = std::map<std::string, std::string>;
31
32
  struct TargetProperties
33
  {
34
    cmSpdxPackage const* Package;
35
    cmGeneratorTarget const* Target;
36
    ImportPropertyMap Properties;
37
  };
38
39
  void WriteSbom(cmSbomDocument& doc, std::ostream& os) const;
40
41
  cmSpdxCreationInfo GenerateCreationInfo() const;
42
  cmSpdxDocument GenerateSbom(cmSpdxCreationInfo const* ci) const;
43
  cmSpdxPackage GenerateImportTarget(cmSpdxCreationInfo const* ci,
44
                                     cmGeneratorTarget const* target) const;
45
46
0
  std::string const& GetPackageName() const { return this->PackageName; }
47
48
  bool GenerateImportFile(std::ostream& os) override;
49
  bool AddPackageInformation(cmSpdxPackage& artifact, std::string const& name,
50
                             cmPackageInformation const& package) const;
51
52
  bool GenerateProperties(
53
    cmSbomDocument& doc, cmSpdxDocument* project, cmSpdxCreationInfo const* ci,
54
    TargetProperties const& current,
55
    std::vector<TargetProperties> const& allTargets) const;
56
57
  void GenerateLinkProperties(
58
    cmSbomDocument& doc, cmSpdxDocument* project, cmSpdxCreationInfo const* ci,
59
    std::string const& libraries, TargetProperties const& current,
60
    std::vector<TargetProperties> const& allTargets) const;
61
62
  bool NoteLinkedTarget(cmGeneratorTarget const* target,
63
                        std::string const& linkedName,
64
                        cmGeneratorTarget const* linkedTarget) override;
65
66
  bool PopulateLinkLibrariesProperty(cmGeneratorTarget const* target,
67
                                     cmGeneratorExpression::PreprocessContext,
68
                                     ImportPropertyMap& properties);
69
70
private:
71
  struct LinkInfo
72
  {
73
    std::string Package;
74
    std::string Component;
75
  };
76
77
  std::string const PackageName;
78
  std::string const PackageVersion;
79
  std::string const PackageDescription;
80
  std::string const PackageWebsite;
81
  std::string const PackageLicense;
82
  std::string const PackageUrl;
83
  cmSbomArguments::SbomFormat const PackageFormat;
84
  std::map<std::string, LinkInfo> LinkTargets;
85
  std::map<std::string, cmPackageInformation> Requirements;
86
};