Coverage Report

Created: 2026-04-29 07:01

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/CMake/Source/cmGeneratorFileSets.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 <functional>
8
#include <map>
9
#include <memory>
10
#include <string>
11
#include <unordered_map>
12
#include <vector>
13
14
#include <cm/string_view>
15
16
#include "cmTargetPropertyEntry.h"
17
18
namespace cm {
19
namespace GenEx {
20
struct Context;
21
struct Evaluation;
22
}
23
}
24
25
struct cmGeneratorExpressionDAGChecker;
26
27
class cmSourceFile;
28
class cmGeneratorTarget;
29
class cmGeneratorFileSet;
30
class cmLocalGenerator;
31
32
class cmGeneratorFileSets
33
{
34
public:
35
  using TargetPropertyEntry = cm::TargetPropertyEntry;
36
37
  cmGeneratorFileSets(cmGeneratorTarget* target, cmLocalGenerator* lg);
38
  ~cmGeneratorFileSets();
39
40
  cmGeneratorFileSets(cmGeneratorFileSets const&) = delete;
41
  cmGeneratorFileSets& operator=(cmGeneratorFileSets const&) = delete;
42
43
0
  bool Empty() const { return this->FileSets.empty(); }
44
45
  std::vector<cm::string_view> GetFileSetTypes() const;
46
  std::vector<cm::string_view> GetInterfaceFileSetTypes() const;
47
48
  std::vector<cmGeneratorFileSet const*> const& GetAllFileSets() const;
49
  std::vector<cmGeneratorFileSet const*> const& GetFileSets(
50
    cm::string_view type) const;
51
  std::vector<cmGeneratorFileSet const*> const& GetInterfaceFileSets(
52
    cm::string_view type) const;
53
54
  cmGeneratorFileSet const* GetFileSet(std::string const& name) const;
55
56
  cmGeneratorFileSet const* GetFileSetForSource(std::string const& config,
57
                                                std::string const& file) const;
58
  cmGeneratorFileSet const* GetFileSetForSource(std::string const& config,
59
                                                cmSourceFile const* sf) const;
60
61
  std::vector<std::unique_ptr<TargetPropertyEntry>> GetSources(
62
    cm::GenEx::Context const& context, cmGeneratorTarget const* target,
63
    cmGeneratorExpressionDAGChecker* dagChecker = nullptr) const;
64
  std::vector<std::unique_ptr<TargetPropertyEntry>> GetSources(
65
    std::string type, cm::GenEx::Context const& context,
66
    cmGeneratorTarget const* target,
67
    cmGeneratorExpressionDAGChecker* dagChecker = nullptr) const;
68
69
  std::vector<std::unique_ptr<TargetPropertyEntry>> GetInterfaceSources(
70
    cm::GenEx::Context const& context, cmGeneratorTarget const* target,
71
    cmGeneratorExpressionDAGChecker* dagChecker = nullptr) const;
72
  std::vector<std::unique_ptr<TargetPropertyEntry>> GetInterfaceSources(
73
    std::string type, cm::GenEx::Context const& context,
74
    cmGeneratorTarget const* target,
75
    cmGeneratorExpressionDAGChecker* dagChecker = nullptr) const;
76
77
  std::string EvaluateInterfaceProperty(
78
    cm::string_view type, std::string const& prop, cm::GenEx::Evaluation* eval,
79
    cmGeneratorExpressionDAGChecker* dagCheckerParent) const;
80
81
private:
82
  std::vector<std::unique_ptr<cm::TargetPropertyEntry>> GetSources(
83
    std::function<bool(cmGeneratorFileSet const*)> include,
84
    cm::GenEx::Context const& context, cmGeneratorTarget const* target,
85
    cmGeneratorExpressionDAGChecker* dagChecker) const;
86
87
  // file sets indexed by name
88
  std::map<std::string, std::unique_ptr<cmGeneratorFileSet>> FileSets;
89
  std::vector<cmGeneratorFileSet const*> AllFileSets;
90
  // list of private file sets indexed by type
91
  std::unordered_map<cm::string_view, std::vector<cmGeneratorFileSet const*>>
92
    SelfFileSets;
93
  // list of interface file sets indexed by type
94
  std::unordered_map<cm::string_view, std::vector<cmGeneratorFileSet const*>>
95
    InterfaceFileSets;
96
97
  mutable std::unordered_map<std::string, bool> MaybeInterfacePropertyExists;
98
  bool MaybeHaveInterfaceProperty(cm::string_view type,
99
                                  std::string const& prop,
100
                                  cm::GenEx::Evaluation* eval) const;
101
102
  struct InfoByConfig
103
  {
104
    bool BuiltCache = false;
105
    std::map<std::string, cmGeneratorFileSet const*> FileSetCache;
106
    std::map<std::string, cmGeneratorFileSet const*> InterfaceFileSetCache;
107
  };
108
  mutable std::map<std::string, InfoByConfig> Configs;
109
110
  void BuildInfoCache(std::string const& config) const;
111
112
  cmGeneratorTarget* Target;
113
  cmLocalGenerator* LocalGenerator;
114
};