/src/CMake/Source/cmCMakePresetsGraphInternal.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 <cstddef> |
6 | | #include <memory> |
7 | | #include <string> |
8 | | #include <vector> |
9 | | |
10 | | #include <cm/optional> |
11 | | #include <cm/string_view> |
12 | | #include <cmext/string_view> |
13 | | |
14 | | #include <cm3p/json/value.h> |
15 | | |
16 | | #include "cmCMakePresetsErrors.h" |
17 | | #include "cmCMakePresetsGraph.h" |
18 | | #include "cmJSONHelpers.h" |
19 | | #include "cmSystemTools.h" |
20 | | |
21 | | #define CHECK_OK(expr) \ |
22 | 131k | do { \ |
23 | 131k | auto _result = expr; \ |
24 | 131k | if (_result != true) \ |
25 | 131k | return _result; \ |
26 | 131k | } while (false) |
27 | | |
28 | | namespace cmCMakePresetsGraphInternal { |
29 | | enum class ExpandMacroResult |
30 | | { |
31 | | Ok, |
32 | | Ignore, |
33 | | Defer, |
34 | | Error, |
35 | | }; |
36 | | |
37 | | class MacroExpander |
38 | | { |
39 | | public: |
40 | | virtual ExpandMacroResult operator()(std::string const& macroNamespace, |
41 | | std::string const& macroName, |
42 | | std::string& macroOut, |
43 | | int version) const = 0; |
44 | 265k | virtual ~MacroExpander() = default; |
45 | | }; |
46 | | using MacroExpanderVector = std::vector<std::unique_ptr<MacroExpander>>; |
47 | | |
48 | | ExpandMacroResult ExpandMacros(std::string& out, |
49 | | MacroExpanderVector const& macroExpanders, |
50 | | int version); |
51 | | |
52 | | ExpandMacroResult ExpandMacro(std::string& out, |
53 | | std::string const& macroNamespace, |
54 | | std::string const& macroName, |
55 | | MacroExpanderVector const& macroExpanders, |
56 | | int version); |
57 | | } |
58 | | |
59 | | class cmCMakePresetsGraph::Condition |
60 | | { |
61 | | public: |
62 | 139k | virtual ~Condition() = default; |
63 | | |
64 | | std::string ConditionJson; |
65 | | |
66 | | virtual bool Evaluate( |
67 | | cmCMakePresetsGraphInternal::MacroExpanderVector const& expanders, |
68 | | int version, cm::optional<bool>& out) const = 0; |
69 | 76.6k | virtual bool IsNull() const { return false; } |
70 | | }; |
71 | | |
72 | | namespace cmCMakePresetsGraphInternal { |
73 | | class BaseMacroExpander : public MacroExpander |
74 | | { |
75 | | cmCMakePresetsGraph const& Graph; |
76 | | cm::optional<std::string> File; |
77 | | |
78 | | public: |
79 | | BaseMacroExpander(cmCMakePresetsGraph const& graph) |
80 | 42.4k | : Graph(graph) |
81 | 42.4k | { |
82 | 42.4k | } |
83 | | BaseMacroExpander(cmCMakePresetsGraph const& graph, std::string const& file) |
84 | 6.15k | : Graph(graph) |
85 | 6.15k | , File(file) |
86 | 6.15k | { |
87 | 6.15k | } |
88 | | ExpandMacroResult operator()(std::string const& macroNamespace, |
89 | | std::string const& macroName, |
90 | | std::string& macroOut, |
91 | | int version) const override; |
92 | | }; |
93 | | |
94 | | template <typename T> |
95 | | std::string const* GetConfigurePresetName(T const& /*preset*/) |
96 | 0 | { |
97 | 0 | return nullptr; |
98 | 0 | } |
99 | | |
100 | | inline std::string const* GetConfigurePresetName( |
101 | | cmCMakePresetsGraph::ConfigurePreset const& preset) |
102 | 2.45k | { |
103 | 2.45k | return &preset.Name; |
104 | 2.45k | } |
105 | | |
106 | | inline std::string const* GetConfigurePresetName( |
107 | | cmCMakePresetsGraph::BuildPreset const& preset) |
108 | 39 | { |
109 | 39 | return &preset.ConfigurePreset; |
110 | 39 | } |
111 | | |
112 | | inline std::string const* GetConfigurePresetName( |
113 | | cmCMakePresetsGraph::TestPreset const& preset) |
114 | 0 | { |
115 | 0 | return &preset.ConfigurePreset; |
116 | 0 | } |
117 | | |
118 | | inline std::string const* GetConfigurePresetName( |
119 | | cmCMakePresetsGraph::PackagePreset const& preset) |
120 | 0 | { |
121 | 0 | return &preset.ConfigurePreset; |
122 | 0 | } |
123 | | |
124 | | template <typename T> |
125 | | class PresetMacroExpander : public MacroExpander |
126 | | { |
127 | | cmCMakePresetsGraph const& Graph; |
128 | | T const& Preset; |
129 | | |
130 | | public: |
131 | | PresetMacroExpander(cmCMakePresetsGraph const& graph, T const& preset) |
132 | 42.4k | : Graph(graph) |
133 | 42.4k | , Preset(preset) |
134 | 42.4k | { |
135 | 42.4k | } cmCMakePresetsGraphInternal::PresetMacroExpander<cmCMakePresetsGraph::BuildPreset>::PresetMacroExpander(cmCMakePresetsGraph const&, cmCMakePresetsGraph::BuildPreset const&) Line | Count | Source | 132 | 1.84k | : Graph(graph) | 133 | 1.84k | , Preset(preset) | 134 | 1.84k | { | 135 | 1.84k | } |
cmCMakePresetsGraphInternal::PresetMacroExpander<cmCMakePresetsGraph::TestPreset>::PresetMacroExpander(cmCMakePresetsGraph const&, cmCMakePresetsGraph::TestPreset const&) Line | Count | Source | 132 | 1.03k | : Graph(graph) | 133 | 1.03k | , Preset(preset) | 134 | 1.03k | { | 135 | 1.03k | } |
cmCMakePresetsGraphInternal::PresetMacroExpander<cmCMakePresetsGraph::PackagePreset>::PresetMacroExpander(cmCMakePresetsGraph const&, cmCMakePresetsGraph::PackagePreset const&) Line | Count | Source | 132 | 1.05k | : Graph(graph) | 133 | 1.05k | , Preset(preset) | 134 | 1.05k | { | 135 | 1.05k | } |
cmCMakePresetsGraphInternal::PresetMacroExpander<cmCMakePresetsGraph::ConfigurePreset>::PresetMacroExpander(cmCMakePresetsGraph const&, cmCMakePresetsGraph::ConfigurePreset const&) Line | Count | Source | 132 | 38.4k | : Graph(graph) | 133 | 38.4k | , Preset(preset) | 134 | 38.4k | { | 135 | 38.4k | } |
cmCMakePresetsGraphInternal::PresetMacroExpander<cmCMakePresetsGraph::WorkflowPreset>::PresetMacroExpander(cmCMakePresetsGraph const&, cmCMakePresetsGraph::WorkflowPreset const&) Line | Count | Source | 132 | 15 | : Graph(graph) | 133 | 15 | , Preset(preset) | 134 | 15 | { | 135 | 15 | } |
|
136 | | ExpandMacroResult operator()(std::string const& macroNamespace, |
137 | | std::string const& macroName, |
138 | | std::string& macroOut, |
139 | | int version) const override |
140 | 243k | { |
141 | 243k | if (macroNamespace.empty()) { |
142 | 144k | if (macroName == "presetName") { |
143 | 27.5k | macroOut += Preset.Name; |
144 | 27.5k | return ExpandMacroResult::Ok; |
145 | 27.5k | } |
146 | 116k | if (macroName == "configurePresetName") { |
147 | 2.52k | if (version < 13) { |
148 | 33 | return ExpandMacroResult::Error; |
149 | 33 | } |
150 | 2.49k | if (auto const* configurePresetName = GetConfigurePresetName(Preset)) { |
151 | 2.49k | macroOut += *configurePresetName; |
152 | 2.49k | return ExpandMacroResult::Ok; |
153 | 2.49k | } |
154 | 0 | return ExpandMacroResult::Error; |
155 | 2.49k | } |
156 | 114k | if (macroName == "generator") { |
157 | | // Generator only makes sense if preset is not hidden. |
158 | 70.1k | if (!Preset.Hidden) { |
159 | 65.1k | macroOut += Graph.GetGeneratorForPreset(Preset.Name); |
160 | 65.1k | } |
161 | 70.1k | return ExpandMacroResult::Ok; |
162 | 70.1k | } |
163 | 44.1k | if (macroName == "fileDir") { |
164 | 41.6k | if (version < 4) { |
165 | 15 | return ExpandMacroResult::Error; |
166 | 15 | } |
167 | 41.6k | macroOut += |
168 | 41.6k | cmSystemTools::GetParentDirectory(Preset.OriginFile->Filename); |
169 | 41.6k | return ExpandMacroResult::Ok; |
170 | 41.6k | } |
171 | 44.1k | } |
172 | 101k | return ExpandMacroResult::Ignore; |
173 | 243k | } cmCMakePresetsGraphInternal::PresetMacroExpander<cmCMakePresetsGraph::BuildPreset>::operator()(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, int) const Line | Count | Source | 140 | 35.9k | { | 141 | 35.9k | if (macroNamespace.empty()) { | 142 | 21.9k | if (macroName == "presetName") { | 143 | 5.78k | macroOut += Preset.Name; | 144 | 5.78k | return ExpandMacroResult::Ok; | 145 | 5.78k | } | 146 | 16.1k | if (macroName == "configurePresetName") { | 147 | 66 | if (version < 13) { | 148 | 27 | return ExpandMacroResult::Error; | 149 | 27 | } | 150 | 39 | if (auto const* configurePresetName = GetConfigurePresetName(Preset)) { | 151 | 39 | macroOut += *configurePresetName; | 152 | 39 | return ExpandMacroResult::Ok; | 153 | 39 | } | 154 | 0 | return ExpandMacroResult::Error; | 155 | 39 | } | 156 | 16.0k | if (macroName == "generator") { | 157 | | // Generator only makes sense if preset is not hidden. | 158 | 6.95k | if (!Preset.Hidden) { | 159 | 6.95k | macroOut += Graph.GetGeneratorForPreset(Preset.Name); | 160 | 6.95k | } | 161 | 6.95k | return ExpandMacroResult::Ok; | 162 | 6.95k | } | 163 | 9.11k | if (macroName == "fileDir") { | 164 | 8.74k | if (version < 4) { | 165 | 9 | return ExpandMacroResult::Error; | 166 | 9 | } | 167 | 8.73k | macroOut += | 168 | 8.73k | cmSystemTools::GetParentDirectory(Preset.OriginFile->Filename); | 169 | 8.73k | return ExpandMacroResult::Ok; | 170 | 8.74k | } | 171 | 9.11k | } | 172 | 14.3k | return ExpandMacroResult::Ignore; | 173 | 35.9k | } |
cmCMakePresetsGraphInternal::PresetMacroExpander<cmCMakePresetsGraph::TestPreset>::operator()(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, int) const Line | Count | Source | 140 | 34.8k | { | 141 | 34.8k | if (macroNamespace.empty()) { | 142 | 18.6k | if (macroName == "presetName") { | 143 | 3.99k | macroOut += Preset.Name; | 144 | 3.99k | return ExpandMacroResult::Ok; | 145 | 3.99k | } | 146 | 14.7k | if (macroName == "configurePresetName") { | 147 | 0 | if (version < 13) { | 148 | 0 | return ExpandMacroResult::Error; | 149 | 0 | } | 150 | 0 | if (auto const* configurePresetName = GetConfigurePresetName(Preset)) { | 151 | 0 | macroOut += *configurePresetName; | 152 | 0 | return ExpandMacroResult::Ok; | 153 | 0 | } | 154 | 0 | return ExpandMacroResult::Error; | 155 | 0 | } | 156 | 14.7k | if (macroName == "generator") { | 157 | | // Generator only makes sense if preset is not hidden. | 158 | 8.78k | if (!Preset.Hidden) { | 159 | 8.78k | macroOut += Graph.GetGeneratorForPreset(Preset.Name); | 160 | 8.78k | } | 161 | 8.78k | return ExpandMacroResult::Ok; | 162 | 8.78k | } | 163 | 5.91k | if (macroName == "fileDir") { | 164 | 5.91k | if (version < 4) { | 165 | 0 | return ExpandMacroResult::Error; | 166 | 0 | } | 167 | 5.91k | macroOut += | 168 | 5.91k | cmSystemTools::GetParentDirectory(Preset.OriginFile->Filename); | 169 | 5.91k | return ExpandMacroResult::Ok; | 170 | 5.91k | } | 171 | 5.91k | } | 172 | 16.1k | return ExpandMacroResult::Ignore; | 173 | 34.8k | } |
cmCMakePresetsGraphInternal::PresetMacroExpander<cmCMakePresetsGraph::PackagePreset>::operator()(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, int) const Line | Count | Source | 140 | 39.3k | { | 141 | 39.3k | if (macroNamespace.empty()) { | 142 | 19.7k | if (macroName == "presetName") { | 143 | 3.82k | macroOut += Preset.Name; | 144 | 3.82k | return ExpandMacroResult::Ok; | 145 | 3.82k | } | 146 | 15.9k | if (macroName == "configurePresetName") { | 147 | 0 | if (version < 13) { | 148 | 0 | return ExpandMacroResult::Error; | 149 | 0 | } | 150 | 0 | if (auto const* configurePresetName = GetConfigurePresetName(Preset)) { | 151 | 0 | macroOut += *configurePresetName; | 152 | 0 | return ExpandMacroResult::Ok; | 153 | 0 | } | 154 | 0 | return ExpandMacroResult::Error; | 155 | 0 | } | 156 | 15.9k | if (macroName == "generator") { | 157 | | // Generator only makes sense if preset is not hidden. | 158 | 9.58k | if (!Preset.Hidden) { | 159 | 9.58k | macroOut += Graph.GetGeneratorForPreset(Preset.Name); | 160 | 9.58k | } | 161 | 9.58k | return ExpandMacroResult::Ok; | 162 | 9.58k | } | 163 | 6.35k | if (macroName == "fileDir") { | 164 | 6.35k | if (version < 4) { | 165 | 0 | return ExpandMacroResult::Error; | 166 | 0 | } | 167 | 6.35k | macroOut += | 168 | 6.35k | cmSystemTools::GetParentDirectory(Preset.OriginFile->Filename); | 169 | 6.35k | return ExpandMacroResult::Ok; | 170 | 6.35k | } | 171 | 6.35k | } | 172 | 19.5k | return ExpandMacroResult::Ignore; | 173 | 39.3k | } |
cmCMakePresetsGraphInternal::PresetMacroExpander<cmCMakePresetsGraph::ConfigurePreset>::operator()(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, int) const Line | Count | Source | 140 | 133k | { | 141 | 133k | if (macroNamespace.empty()) { | 142 | 83.9k | if (macroName == "presetName") { | 143 | 13.8k | macroOut += Preset.Name; | 144 | 13.8k | return ExpandMacroResult::Ok; | 145 | 13.8k | } | 146 | 70.0k | if (macroName == "configurePresetName") { | 147 | 2.45k | if (version < 13) { | 148 | 6 | return ExpandMacroResult::Error; | 149 | 6 | } | 150 | 2.45k | if (auto const* configurePresetName = GetConfigurePresetName(Preset)) { | 151 | 2.45k | macroOut += *configurePresetName; | 152 | 2.45k | return ExpandMacroResult::Ok; | 153 | 2.45k | } | 154 | 0 | return ExpandMacroResult::Error; | 155 | 2.45k | } | 156 | 67.5k | if (macroName == "generator") { | 157 | | // Generator only makes sense if preset is not hidden. | 158 | 44.7k | if (!Preset.Hidden) { | 159 | 39.8k | macroOut += Graph.GetGeneratorForPreset(Preset.Name); | 160 | 39.8k | } | 161 | 44.7k | return ExpandMacroResult::Ok; | 162 | 44.7k | } | 163 | 22.7k | if (macroName == "fileDir") { | 164 | 20.6k | if (version < 4) { | 165 | 6 | return ExpandMacroResult::Error; | 166 | 6 | } | 167 | 20.6k | macroOut += | 168 | 20.6k | cmSystemTools::GetParentDirectory(Preset.OriginFile->Filename); | 169 | 20.6k | return ExpandMacroResult::Ok; | 170 | 20.6k | } | 171 | 22.7k | } | 172 | 51.2k | return ExpandMacroResult::Ignore; | 173 | 133k | } |
Unexecuted instantiation: cmCMakePresetsGraphInternal::PresetMacroExpander<cmCMakePresetsGraph::WorkflowPreset>::operator()(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, int) const |
174 | | }; |
175 | | |
176 | | template <class T> |
177 | | class ImmediateMacroExpander : public MacroExpander |
178 | | { |
179 | | T const& Preset; |
180 | | |
181 | | public: |
182 | | ImmediateMacroExpander(T const& preset) |
183 | 106k | : Preset(preset) |
184 | 106k | { |
185 | 106k | } cmCMakePresetsGraphInternal::ImmediateMacroExpander<cmCMakePresetsGraph::ConfigurePreset>::ImmediateMacroExpander(cmCMakePresetsGraph::ConfigurePreset const&) Line | Count | Source | 183 | 54.8k | : Preset(preset) | 184 | 54.8k | { | 185 | 54.8k | } |
cmCMakePresetsGraphInternal::ImmediateMacroExpander<cmCMakePresetsGraph::BuildPreset>::ImmediateMacroExpander(cmCMakePresetsGraph::BuildPreset const&) Line | Count | Source | 183 | 17.6k | : Preset(preset) | 184 | 17.6k | { | 185 | 17.6k | } |
cmCMakePresetsGraphInternal::ImmediateMacroExpander<cmCMakePresetsGraph::TestPreset>::ImmediateMacroExpander(cmCMakePresetsGraph::TestPreset const&) Line | Count | Source | 183 | 16.7k | : Preset(preset) | 184 | 16.7k | { | 185 | 16.7k | } |
cmCMakePresetsGraphInternal::ImmediateMacroExpander<cmCMakePresetsGraph::PackagePreset>::ImmediateMacroExpander(cmCMakePresetsGraph::PackagePreset const&) Line | Count | Source | 183 | 16.2k | : Preset(preset) | 184 | 16.2k | { | 185 | 16.2k | } |
cmCMakePresetsGraphInternal::ImmediateMacroExpander<cmCMakePresetsGraph::WorkflowPreset>::ImmediateMacroExpander(cmCMakePresetsGraph::WorkflowPreset const&) Line | Count | Source | 183 | 1.50k | : Preset(preset) | 184 | 1.50k | { | 185 | 1.50k | } |
|
186 | | ExpandMacroResult operator()(std::string const& macroNamespace, |
187 | | std::string const& macroName, |
188 | | std::string& macroOut, |
189 | | int version) const override |
190 | 32.3k | { |
191 | 32.3k | if (macroNamespace.empty()) { |
192 | 29.5k | if (macroName == "fileDir") { |
193 | 6.10k | if (version < 12) { |
194 | 2.67k | return ExpandMacroResult::Defer; |
195 | 2.67k | } |
196 | 3.43k | macroOut += |
197 | 3.43k | cmSystemTools::GetParentDirectory(Preset.OriginFile->Filename); |
198 | 3.43k | return ExpandMacroResult::Ok; |
199 | 6.10k | } |
200 | 29.5k | } |
201 | 26.2k | return ExpandMacroResult::Defer; |
202 | 32.3k | } cmCMakePresetsGraphInternal::ImmediateMacroExpander<cmCMakePresetsGraph::ConfigurePreset>::operator()(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, int) const Line | Count | Source | 190 | 20.0k | { | 191 | 20.0k | if (macroNamespace.empty()) { | 192 | 18.9k | if (macroName == "fileDir") { | 193 | 2.05k | if (version < 12) { | 194 | 138 | return ExpandMacroResult::Defer; | 195 | 138 | } | 196 | 1.92k | macroOut += | 197 | 1.92k | cmSystemTools::GetParentDirectory(Preset.OriginFile->Filename); | 198 | 1.92k | return ExpandMacroResult::Ok; | 199 | 2.05k | } | 200 | 18.9k | } | 201 | 17.9k | return ExpandMacroResult::Defer; | 202 | 20.0k | } |
cmCMakePresetsGraphInternal::ImmediateMacroExpander<cmCMakePresetsGraph::BuildPreset>::operator()(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, int) const Line | Count | Source | 190 | 12.3k | { | 191 | 12.3k | if (macroNamespace.empty()) { | 192 | 10.5k | if (macroName == "fileDir") { | 193 | 4.05k | if (version < 12) { | 194 | 2.53k | return ExpandMacroResult::Defer; | 195 | 2.53k | } | 196 | 1.51k | macroOut += | 197 | 1.51k | cmSystemTools::GetParentDirectory(Preset.OriginFile->Filename); | 198 | 1.51k | return ExpandMacroResult::Ok; | 199 | 4.05k | } | 200 | 10.5k | } | 201 | 8.26k | return ExpandMacroResult::Defer; | 202 | 12.3k | } |
Unexecuted instantiation: cmCMakePresetsGraphInternal::ImmediateMacroExpander<cmCMakePresetsGraph::TestPreset>::operator()(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, int) const Unexecuted instantiation: cmCMakePresetsGraphInternal::ImmediateMacroExpander<cmCMakePresetsGraph::PackagePreset>::operator()(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, int) const Unexecuted instantiation: cmCMakePresetsGraphInternal::ImmediateMacroExpander<cmCMakePresetsGraph::WorkflowPreset>::operator()(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, int) const |
203 | | }; |
204 | | |
205 | | template <typename T> |
206 | | bool ExpandImmediateMacros(T& preset); |
207 | | |
208 | | extern template bool ExpandImmediateMacros< |
209 | | cmCMakePresetsGraph::ConfigurePreset>(cmCMakePresetsGraph::ConfigurePreset&); |
210 | | extern template bool ExpandImmediateMacros<cmCMakePresetsGraph::BuildPreset>( |
211 | | cmCMakePresetsGraph::BuildPreset&); |
212 | | extern template bool ExpandImmediateMacros<cmCMakePresetsGraph::TestPreset>( |
213 | | cmCMakePresetsGraph::TestPreset&); |
214 | | extern template bool ExpandImmediateMacros<cmCMakePresetsGraph::PackagePreset>( |
215 | | cmCMakePresetsGraph::PackagePreset&); |
216 | | extern template bool ExpandImmediateMacros< |
217 | | cmCMakePresetsGraph::WorkflowPreset>(cmCMakePresetsGraph::WorkflowPreset&); |
218 | | |
219 | | class NullCondition : public cmCMakePresetsGraph::Condition |
220 | | { |
221 | | bool Evaluate(MacroExpanderVector const& /*expanders*/, int /*version*/, |
222 | | cm::optional<bool>& out) const override |
223 | 0 | { |
224 | 0 | out = true; |
225 | 0 | return true; |
226 | 0 | } |
227 | | |
228 | 21 | bool IsNull() const override { return true; } |
229 | | }; |
230 | | |
231 | | class ConstCondition : public cmCMakePresetsGraph::Condition |
232 | | { |
233 | | public: |
234 | | bool Evaluate(MacroExpanderVector const& /*expanders*/, int /*version*/, |
235 | | cm::optional<bool>& out) const override |
236 | 795 | { |
237 | 795 | out = this->Value; |
238 | 795 | return true; |
239 | 795 | } |
240 | | |
241 | | bool Value; |
242 | | }; |
243 | | |
244 | | class EqualsCondition : public cmCMakePresetsGraph::Condition |
245 | | { |
246 | | public: |
247 | | bool Evaluate(MacroExpanderVector const& expanders, int version, |
248 | | cm::optional<bool>& out) const override; |
249 | | |
250 | | std::string Lhs; |
251 | | std::string Rhs; |
252 | | }; |
253 | | |
254 | | class InListCondition : public cmCMakePresetsGraph::Condition |
255 | | { |
256 | | public: |
257 | | bool Evaluate(MacroExpanderVector const& expanders, int version, |
258 | | cm::optional<bool>& out) const override; |
259 | | |
260 | | std::string String; |
261 | | std::vector<std::string> List; |
262 | | }; |
263 | | |
264 | | class MatchesCondition : public cmCMakePresetsGraph::Condition |
265 | | { |
266 | | public: |
267 | | bool Evaluate(MacroExpanderVector const& expanders, int version, |
268 | | cm::optional<bool>& out) const override; |
269 | | |
270 | | std::string String; |
271 | | std::string Regex; |
272 | | }; |
273 | | |
274 | | class AnyAllOfCondition : public cmCMakePresetsGraph::Condition |
275 | | { |
276 | | public: |
277 | | bool Evaluate(MacroExpanderVector const& expanders, int version, |
278 | | cm::optional<bool>& out) const override; |
279 | | |
280 | | std::vector<std::unique_ptr<Condition>> Conditions; |
281 | | bool StopValue; |
282 | | }; |
283 | | |
284 | | class NotCondition : public cmCMakePresetsGraph::Condition |
285 | | { |
286 | | public: |
287 | | bool Evaluate(MacroExpanderVector const& expanders, int version, |
288 | | cm::optional<bool>& out) const override; |
289 | | |
290 | | std::unique_ptr<Condition> SubCondition; |
291 | | }; |
292 | | |
293 | | bool PresetStringHelper(std::string& out, Json::Value const* value, |
294 | | cmJSONState* state); |
295 | | |
296 | | bool PresetNameHelper(std::string& out, Json::Value const* value, |
297 | | cmJSONState* state); |
298 | | |
299 | | bool PresetVectorStringHelper(std::vector<std::string>& out, |
300 | | Json::Value const* value, cmJSONState* state); |
301 | | |
302 | | bool PresetBoolHelper(bool& out, Json::Value const* value, cmJSONState* state); |
303 | | |
304 | | bool PresetOptionalBoolHelper(cm::optional<bool>& out, |
305 | | Json::Value const* value, cmJSONState* state); |
306 | | |
307 | | template <typename K> |
308 | | bool PresetMapToBoolHelper(std::map<K, bool>& out, Json::Value const* value, |
309 | | K key, cmJSONState* state) |
310 | 2.38M | { |
311 | 2.38M | cm::optional<bool> temp; |
312 | 2.38M | if (!PresetOptionalBoolHelper(temp, value, state)) { |
313 | 0 | return false; |
314 | 0 | } |
315 | | |
316 | 2.38M | if (temp) { |
317 | 0 | out[key] = *temp; |
318 | 0 | } |
319 | | |
320 | 2.38M | return true; |
321 | 2.38M | } |
322 | | |
323 | | bool PresetIntHelper(int& out, Json::Value const* value, cmJSONState* state); |
324 | | |
325 | | bool PresetOptionalIntHelper(cm::optional<int>& out, Json::Value const* value, |
326 | | cmJSONState* state); |
327 | | |
328 | | bool PresetUIntHelper(unsigned int& out, Json::Value const* value, |
329 | | cmJSONState* state); |
330 | | |
331 | | bool PresetOptionalUIntHelper(cm::optional<unsigned int>& out, |
332 | | Json::Value const* value, cmJSONState* state); |
333 | | |
334 | | bool PresetVectorIntHelper(std::vector<int>& out, Json::Value const* value, |
335 | | cmJSONState* state); |
336 | | |
337 | | bool ConfigurePresetsHelper( |
338 | | std::vector<cmCMakePresetsGraph::ConfigurePreset>& out, |
339 | | Json::Value const* value, cmJSONState* state); |
340 | | |
341 | | bool BuildPresetsHelper(std::vector<cmCMakePresetsGraph::BuildPreset>& out, |
342 | | Json::Value const* value, cmJSONState* state); |
343 | | |
344 | | bool TestPresetsHelper(std::vector<cmCMakePresetsGraph::TestPreset>& out, |
345 | | Json::Value const* value, cmJSONState* state); |
346 | | |
347 | | bool PackagePresetsHelper(std::vector<cmCMakePresetsGraph::PackagePreset>& out, |
348 | | Json::Value const* value, cmJSONState* state); |
349 | | |
350 | | bool WorkflowPresetsHelper( |
351 | | std::vector<cmCMakePresetsGraph::WorkflowPreset>& out, |
352 | | Json::Value const* value, cmJSONState* state); |
353 | | |
354 | | cm::string_view GetDiagnosticJSONName(cmDiagnosticCategory category); |
355 | | |
356 | | cmJSONHelper<std::nullptr_t> VendorHelper(ErrorGenerator const& error); |
357 | | |
358 | | bool PresetConditionHelper( |
359 | | std::shared_ptr<cmCMakePresetsGraph::Condition>& out, |
360 | | Json::Value const* value, cmJSONState* state); |
361 | | |
362 | | bool PresetVectorOneOrMoreStringHelper(std::vector<std::string>& out, |
363 | | Json::Value const* value, |
364 | | cmJSONState* state); |
365 | | |
366 | | bool EnvironmentMapHelper( |
367 | | std::map<std::string, cm::optional<std::string>>& out, |
368 | | Json::Value const* value, cmJSONState* state); |
369 | | |
370 | | cmJSONHelper<std::nullptr_t> SchemaHelper(); |
371 | | |
372 | | bool CheckDiagnostics(cmJSONState* state, int version, |
373 | | cmCMakePresetsGraph::ConfigurePreset& preset); |
374 | | |
375 | | // Binds the fields common to every preset kind. |
376 | | template <typename T> |
377 | | cmJSONHelperBuilder::Object<T> BindPresetIdentityFields( |
378 | | cmJSONHelperBuilder::Object<T> obj) |
379 | 48 | { |
380 | 48 | obj.Bind("name"_s, &cmCMakePresetsGraph::Preset::Name, PresetNameHelper) |
381 | 48 | .Bind("inherits"_s, &cmCMakePresetsGraph::Preset::Inherits, |
382 | 48 | PresetVectorOneOrMoreStringHelper, false) |
383 | 48 | .Bind("hidden"_s, &cmCMakePresetsGraph::Preset::Hidden, PresetBoolHelper, |
384 | 48 | false) |
385 | 48 | .template Bind<std::nullptr_t>( |
386 | 48 | "vendor"_s, nullptr, VendorHelper(cmCMakePresetsErrors::INVALID_PRESET), |
387 | 48 | false) |
388 | 48 | .Bind("displayName"_s, &cmCMakePresetsGraph::Preset::DisplayName, |
389 | 48 | PresetStringHelper, false) |
390 | 48 | .Bind("description"_s, &cmCMakePresetsGraph::Preset::Description, |
391 | 48 | PresetStringHelper, false) |
392 | 48 | .Bind("condition"_s, &cmCMakePresetsGraph::Preset::ConditionEvaluator, |
393 | 48 | PresetConditionHelper, false); |
394 | 48 | return obj; |
395 | 48 | } cmJSONHelperBuilder::Object<cmCMakePresetsGraph::BuildPreset> cmCMakePresetsGraphInternal::BindPresetIdentityFields<cmCMakePresetsGraph::BuildPreset>(cmJSONHelperBuilder::Object<cmCMakePresetsGraph::BuildPreset>) Line | Count | Source | 379 | 12 | { | 380 | 12 | obj.Bind("name"_s, &cmCMakePresetsGraph::Preset::Name, PresetNameHelper) | 381 | 12 | .Bind("inherits"_s, &cmCMakePresetsGraph::Preset::Inherits, | 382 | 12 | PresetVectorOneOrMoreStringHelper, false) | 383 | 12 | .Bind("hidden"_s, &cmCMakePresetsGraph::Preset::Hidden, PresetBoolHelper, | 384 | 12 | false) | 385 | 12 | .template Bind<std::nullptr_t>( | 386 | 12 | "vendor"_s, nullptr, VendorHelper(cmCMakePresetsErrors::INVALID_PRESET), | 387 | 12 | false) | 388 | 12 | .Bind("displayName"_s, &cmCMakePresetsGraph::Preset::DisplayName, | 389 | 12 | PresetStringHelper, false) | 390 | 12 | .Bind("description"_s, &cmCMakePresetsGraph::Preset::Description, | 391 | 12 | PresetStringHelper, false) | 392 | 12 | .Bind("condition"_s, &cmCMakePresetsGraph::Preset::ConditionEvaluator, | 393 | 12 | PresetConditionHelper, false); | 394 | 12 | return obj; | 395 | 12 | } |
cmJSONHelperBuilder::Object<cmCMakePresetsGraph::ConfigurePreset> cmCMakePresetsGraphInternal::BindPresetIdentityFields<cmCMakePresetsGraph::ConfigurePreset>(cmJSONHelperBuilder::Object<cmCMakePresetsGraph::ConfigurePreset>) Line | Count | Source | 379 | 12 | { | 380 | 12 | obj.Bind("name"_s, &cmCMakePresetsGraph::Preset::Name, PresetNameHelper) | 381 | 12 | .Bind("inherits"_s, &cmCMakePresetsGraph::Preset::Inherits, | 382 | 12 | PresetVectorOneOrMoreStringHelper, false) | 383 | 12 | .Bind("hidden"_s, &cmCMakePresetsGraph::Preset::Hidden, PresetBoolHelper, | 384 | 12 | false) | 385 | 12 | .template Bind<std::nullptr_t>( | 386 | 12 | "vendor"_s, nullptr, VendorHelper(cmCMakePresetsErrors::INVALID_PRESET), | 387 | 12 | false) | 388 | 12 | .Bind("displayName"_s, &cmCMakePresetsGraph::Preset::DisplayName, | 389 | 12 | PresetStringHelper, false) | 390 | 12 | .Bind("description"_s, &cmCMakePresetsGraph::Preset::Description, | 391 | 12 | PresetStringHelper, false) | 392 | 12 | .Bind("condition"_s, &cmCMakePresetsGraph::Preset::ConditionEvaluator, | 393 | 12 | PresetConditionHelper, false); | 394 | 12 | return obj; | 395 | 12 | } |
cmJSONHelperBuilder::Object<cmCMakePresetsGraph::PackagePreset> cmCMakePresetsGraphInternal::BindPresetIdentityFields<cmCMakePresetsGraph::PackagePreset>(cmJSONHelperBuilder::Object<cmCMakePresetsGraph::PackagePreset>) Line | Count | Source | 379 | 12 | { | 380 | 12 | obj.Bind("name"_s, &cmCMakePresetsGraph::Preset::Name, PresetNameHelper) | 381 | 12 | .Bind("inherits"_s, &cmCMakePresetsGraph::Preset::Inherits, | 382 | 12 | PresetVectorOneOrMoreStringHelper, false) | 383 | 12 | .Bind("hidden"_s, &cmCMakePresetsGraph::Preset::Hidden, PresetBoolHelper, | 384 | 12 | false) | 385 | 12 | .template Bind<std::nullptr_t>( | 386 | 12 | "vendor"_s, nullptr, VendorHelper(cmCMakePresetsErrors::INVALID_PRESET), | 387 | 12 | false) | 388 | 12 | .Bind("displayName"_s, &cmCMakePresetsGraph::Preset::DisplayName, | 389 | 12 | PresetStringHelper, false) | 390 | 12 | .Bind("description"_s, &cmCMakePresetsGraph::Preset::Description, | 391 | 12 | PresetStringHelper, false) | 392 | 12 | .Bind("condition"_s, &cmCMakePresetsGraph::Preset::ConditionEvaluator, | 393 | 12 | PresetConditionHelper, false); | 394 | 12 | return obj; | 395 | 12 | } |
cmJSONHelperBuilder::Object<cmCMakePresetsGraph::TestPreset> cmCMakePresetsGraphInternal::BindPresetIdentityFields<cmCMakePresetsGraph::TestPreset>(cmJSONHelperBuilder::Object<cmCMakePresetsGraph::TestPreset>) Line | Count | Source | 379 | 12 | { | 380 | 12 | obj.Bind("name"_s, &cmCMakePresetsGraph::Preset::Name, PresetNameHelper) | 381 | 12 | .Bind("inherits"_s, &cmCMakePresetsGraph::Preset::Inherits, | 382 | 12 | PresetVectorOneOrMoreStringHelper, false) | 383 | 12 | .Bind("hidden"_s, &cmCMakePresetsGraph::Preset::Hidden, PresetBoolHelper, | 384 | 12 | false) | 385 | 12 | .template Bind<std::nullptr_t>( | 386 | 12 | "vendor"_s, nullptr, VendorHelper(cmCMakePresetsErrors::INVALID_PRESET), | 387 | 12 | false) | 388 | 12 | .Bind("displayName"_s, &cmCMakePresetsGraph::Preset::DisplayName, | 389 | 12 | PresetStringHelper, false) | 390 | 12 | .Bind("description"_s, &cmCMakePresetsGraph::Preset::Description, | 391 | 12 | PresetStringHelper, false) | 392 | 12 | .Bind("condition"_s, &cmCMakePresetsGraph::Preset::ConditionEvaluator, | 393 | 12 | PresetConditionHelper, false); | 394 | 12 | return obj; | 395 | 12 | } |
|
396 | | |
397 | | // Binds the fields shared by build, test, and package presets, which resolve |
398 | | // against a configure preset. |
399 | | template <typename T> |
400 | | cmJSONHelperBuilder::Object<T> BindDependentPresetFields( |
401 | | cmJSONHelperBuilder::Object<T> obj) |
402 | 36 | { |
403 | 36 | obj |
404 | 36 | .Bind("environment"_s, &cmCMakePresetsGraph::Preset::Environment, |
405 | 36 | EnvironmentMapHelper, false) |
406 | 36 | .Bind("configurePreset"_s, &T::ConfigurePreset, PresetStringHelper, false) |
407 | 36 | .Bind("inheritConfigureEnvironment"_s, &T::InheritConfigureEnvironment, |
408 | 36 | PresetOptionalBoolHelper, false); |
409 | 36 | return obj; |
410 | 36 | } cmJSONHelperBuilder::Object<cmCMakePresetsGraph::BuildPreset> cmCMakePresetsGraphInternal::BindDependentPresetFields<cmCMakePresetsGraph::BuildPreset>(cmJSONHelperBuilder::Object<cmCMakePresetsGraph::BuildPreset>) Line | Count | Source | 402 | 12 | { | 403 | 12 | obj | 404 | 12 | .Bind("environment"_s, &cmCMakePresetsGraph::Preset::Environment, | 405 | 12 | EnvironmentMapHelper, false) | 406 | 12 | .Bind("configurePreset"_s, &T::ConfigurePreset, PresetStringHelper, false) | 407 | 12 | .Bind("inheritConfigureEnvironment"_s, &T::InheritConfigureEnvironment, | 408 | 12 | PresetOptionalBoolHelper, false); | 409 | 12 | return obj; | 410 | 12 | } |
cmJSONHelperBuilder::Object<cmCMakePresetsGraph::PackagePreset> cmCMakePresetsGraphInternal::BindDependentPresetFields<cmCMakePresetsGraph::PackagePreset>(cmJSONHelperBuilder::Object<cmCMakePresetsGraph::PackagePreset>) Line | Count | Source | 402 | 12 | { | 403 | 12 | obj | 404 | 12 | .Bind("environment"_s, &cmCMakePresetsGraph::Preset::Environment, | 405 | 12 | EnvironmentMapHelper, false) | 406 | 12 | .Bind("configurePreset"_s, &T::ConfigurePreset, PresetStringHelper, false) | 407 | 12 | .Bind("inheritConfigureEnvironment"_s, &T::InheritConfigureEnvironment, | 408 | 12 | PresetOptionalBoolHelper, false); | 409 | 12 | return obj; | 410 | 12 | } |
cmJSONHelperBuilder::Object<cmCMakePresetsGraph::TestPreset> cmCMakePresetsGraphInternal::BindDependentPresetFields<cmCMakePresetsGraph::TestPreset>(cmJSONHelperBuilder::Object<cmCMakePresetsGraph::TestPreset>) Line | Count | Source | 402 | 12 | { | 403 | 12 | obj | 404 | 12 | .Bind("environment"_s, &cmCMakePresetsGraph::Preset::Environment, | 405 | 12 | EnvironmentMapHelper, false) | 406 | 12 | .Bind("configurePreset"_s, &T::ConfigurePreset, PresetStringHelper, false) | 407 | 12 | .Bind("inheritConfigureEnvironment"_s, &T::InheritConfigureEnvironment, | 408 | 12 | PresetOptionalBoolHelper, false); | 409 | 12 | return obj; | 410 | 12 | } |
|
411 | | } |