Coverage Report

Created: 2026-10-28 06:38

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/CMake/Source/cmGeneratorFileSet.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 <utility>
12
#include <vector>
13
14
#include "cmFileSetMetadata.h"
15
#include "cmGeneratorExpression.h"
16
#include "cmListFileCache.h"
17
#include "cmTargetPropertyEntry.h"
18
#include "cmValue.h"
19
20
namespace cm {
21
namespace GenEx {
22
struct Context;
23
}
24
}
25
26
struct cmGeneratorExpressionDAGChecker;
27
28
class cmFileSet;
29
class cmGeneratorTarget;
30
31
class cmGeneratorFileSet
32
{
33
public:
34
  using TargetPropertyEntry = cm::TargetPropertyEntry;
35
36
  cmGeneratorFileSet(cmGeneratorTarget const*, cmFileSet const*,
37
                     cm::FileSetMetadata::FileSetDomain);
38
5.92k
  ~cmGeneratorFileSet() = default;
39
40
  cmGeneratorFileSet(cmGeneratorFileSet&&) = default;
41
  cmGeneratorFileSet(cmGeneratorFileSet const&) = delete;
42
  cmGeneratorFileSet& operator=(cmGeneratorFileSet const&) = delete;
43
44
  std::string const& GetName() const;
45
  std::string const& GetType() const;
46
  cm::FileSetMetadata::Visibility GetVisibility() const;
47
48
  bool IsForSelf() const;
49
  bool IsForInterface() const;
50
  bool CanBeIncluded() const;
51
52
0
  cmGeneratorTarget const* GetTarget() const { return this->Target; }
53
  bool BelongsTo(cmGeneratorTarget const* target) const
54
0
  {
55
0
    return this->Target == target;
56
0
  }
57
58
0
  cmFileSet const* GetFileSet() const { return this->FileSet; }
59
60
0
  cm::FileSetMetadata::FileSetDomain GetDomain() const { return this->Domain; }
61
62
  cmValue GetProperty(std::string const& prop) const;
63
64
  std::vector<BT<std::string>> GetIncludeDirectories(
65
    std::string const& config, std::string const& lang) const;
66
  std::vector<BT<std::string>> GetInterfaceIncludeDirectories(
67
    std::string const& config, std::string const& lang) const;
68
69
  std::vector<BT<std::string>> GetCompileOptions(
70
    std::string const& config, std::string const& language) const;
71
  std::vector<BT<std::string>> GetInterfaceCompileOptions(
72
    std::string const& config, std::string const& language) const;
73
74
  std::vector<BT<std::string>> GetCompileDefinitions(
75
    std::string const& config, std::string const& language) const;
76
  std::vector<BT<std::string>> GetInterfaceCompileDefinitions(
77
    std::string const& config, std::string const& language) const;
78
79
  std::vector<BT<std::string>> const& GetDirectoryEntries() const;
80
  std::vector<BT<std::string>> const& GetFileEntries() const;
81
82
  std::vector<std::unique_ptr<TargetPropertyEntry>> GetSources(
83
    cm::GenEx::Context const& context, cmGeneratorTarget const* target,
84
    cmGeneratorExpressionDAGChecker* dagChecker = nullptr) const;
85
86
  using FileMap = std::map<std::string, std::vector<std::string>>;
87
88
  // returned value:
89
  // first: list of directories
90
  // second: is context sensitive
91
  std::pair<std::vector<std::string>, bool> GetDirectories(
92
    cm::GenEx::Context const& context, cmGeneratorTarget const* target,
93
    cmGeneratorExpressionDAGChecker* dagChecker = nullptr) const;
94
  // returned value:
95
  // first: list of files per directory
96
  // second: is context sensitive
97
  std::pair<FileMap, bool> GetFiles(
98
    cm::GenEx::Context const& context, cmGeneratorTarget const* target,
99
    cmGeneratorExpressionDAGChecker* dagChecker = nullptr) const;
100
101
  std::vector<std::unique_ptr<cmCompiledGeneratorExpression>> const&
102
  CompileFileEntries() const;
103
104
  std::vector<std::unique_ptr<cmCompiledGeneratorExpression>> const&
105
  CompileDirectoryEntries() const;
106
107
  std::vector<std::string> EvaluateDirectoryEntries(
108
    std::vector<std::unique_ptr<cmCompiledGeneratorExpression>> const& cges,
109
    cm::GenEx::Context const& context, cmGeneratorTarget const* target,
110
    cmGeneratorExpressionDAGChecker* dagChecker = nullptr) const;
111
112
  using EvaluateFileEntryFunction =
113
    std::function<void(std::string&&, std::string&&, std::string&&)>;
114
115
  // returned value: is context sensitive
116
  bool EvaluateFiles(
117
    cm::GenEx::Context const& context, cmGeneratorTarget const* target,
118
    EvaluateFileEntryFunction callback,
119
    cmGeneratorExpressionDAGChecker* dagChecker = nullptr) const;
120
121
  void EvaluateFileEntry(
122
    std::vector<std::string> const& dirs, EvaluateFileEntryFunction handler,
123
    std::unique_ptr<cmCompiledGeneratorExpression> const& cge,
124
    cm::GenEx::Context const& context, cmGeneratorTarget const* target,
125
    cmGeneratorExpressionDAGChecker* dagChecker = nullptr) const;
126
127
  void EvaluateFileEntry(
128
    std::vector<std::string> const& dirs, FileMap& filesPerDir,
129
    std::unique_ptr<cmCompiledGeneratorExpression> const& cge,
130
    cm::GenEx::Context const& context, cmGeneratorTarget const* target,
131
    cmGeneratorExpressionDAGChecker* dagChecker = nullptr) const;
132
133
private:
134
  cmGeneratorTarget const* Target;
135
  cmFileSet const* FileSet;
136
  cm::FileSetMetadata::FileSetDomain Domain;
137
  mutable std::vector<std::unique_ptr<cmCompiledGeneratorExpression>>
138
    CompiledDirectoryEntries;
139
  mutable std::vector<std::unique_ptr<cmCompiledGeneratorExpression>>
140
    CompiledFileEntries;
141
142
  using TargetPropertyEntries =
143
    std::vector<std::unique_ptr<TargetPropertyEntry>>;
144
  TargetPropertyEntries IncludeDirectories;
145
  TargetPropertyEntries InterfaceIncludeDirectories;
146
  TargetPropertyEntries CompileOptions;
147
  TargetPropertyEntries InterfaceCompileOptions;
148
  TargetPropertyEntries CompileDefinitions;
149
  TargetPropertyEntries InterfaceCompileDefinitions;
150
151
  using ConfigAndLanguage = std::pair<std::string, std::string>;
152
  using ConfigAndLanguageToBTStrings =
153
    std::map<ConfigAndLanguage, std::vector<BT<std::string>>>;
154
  mutable ConfigAndLanguageToBTStrings IncludeDirectoriesCache;
155
  mutable ConfigAndLanguageToBTStrings InterfaceIncludeDirectoriesCache;
156
  mutable ConfigAndLanguageToBTStrings CompileOptionsCache;
157
  mutable ConfigAndLanguageToBTStrings InterfaceCompileOptionsCache;
158
  mutable ConfigAndLanguageToBTStrings CompileDefinitionsCache;
159
  mutable ConfigAndLanguageToBTStrings InterfaceCompileDefinitionsCache;
160
};