/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 | 89.2k | do { \ |
23 | 89.2k | auto _result = expr; \ |
24 | 89.2k | if (_result != true) \ |
25 | 89.2k | return _result; \ |
26 | 89.2k | } 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 | 218k | 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 | 91.6k | 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 | 57.9k | 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 | 37.6k | : Graph(graph) |
81 | 37.6k | { |
82 | 37.6k | } |
83 | | BaseMacroExpander(cmCMakePresetsGraph const& graph, std::string const& file) |
84 | 2.89k | : Graph(graph) |
85 | 2.89k | , File(file) |
86 | 2.89k | { |
87 | 2.89k | } |
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 | 48 | { |
103 | 48 | return &preset.Name; |
104 | 48 | } |
105 | | |
106 | | inline std::string const* GetConfigurePresetName( |
107 | | cmCMakePresetsGraph::BuildPreset const& preset) |
108 | 0 | { |
109 | 0 | return &preset.ConfigurePreset; |
110 | 0 | } |
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 | 37.6k | : Graph(graph) |
133 | 37.6k | , Preset(preset) |
134 | 37.6k | { |
135 | 37.6k | } cmCMakePresetsGraphInternal::PresetMacroExpander<cmCMakePresetsGraph::BuildPreset>::PresetMacroExpander(cmCMakePresetsGraph const&, cmCMakePresetsGraph::BuildPreset const&) Line | Count | Source | 132 | 1.80k | : Graph(graph) | 133 | 1.80k | , Preset(preset) | 134 | 1.80k | { | 135 | 1.80k | } |
cmCMakePresetsGraphInternal::PresetMacroExpander<cmCMakePresetsGraph::TestPreset>::PresetMacroExpander(cmCMakePresetsGraph const&, cmCMakePresetsGraph::TestPreset const&) Line | Count | Source | 132 | 1.10k | : Graph(graph) | 133 | 1.10k | , Preset(preset) | 134 | 1.10k | { | 135 | 1.10k | } |
cmCMakePresetsGraphInternal::PresetMacroExpander<cmCMakePresetsGraph::PackagePreset>::PresetMacroExpander(cmCMakePresetsGraph const&, cmCMakePresetsGraph::PackagePreset const&) Line | Count | Source | 132 | 975 | : Graph(graph) | 133 | 975 | , Preset(preset) | 134 | 975 | { | 135 | 975 | } |
cmCMakePresetsGraphInternal::PresetMacroExpander<cmCMakePresetsGraph::ConfigurePreset>::PresetMacroExpander(cmCMakePresetsGraph const&, cmCMakePresetsGraph::ConfigurePreset const&) Line | Count | Source | 132 | 33.6k | : Graph(graph) | 133 | 33.6k | , Preset(preset) | 134 | 33.6k | { | 135 | 33.6k | } |
cmCMakePresetsGraphInternal::PresetMacroExpander<cmCMakePresetsGraph::WorkflowPreset>::PresetMacroExpander(cmCMakePresetsGraph const&, cmCMakePresetsGraph::WorkflowPreset const&) Line | Count | Source | 132 | 39 | : Graph(graph) | 133 | 39 | , Preset(preset) | 134 | 39 | { | 135 | 39 | } |
|
136 | | ExpandMacroResult operator()(std::string const& macroNamespace, |
137 | | std::string const& macroName, |
138 | | std::string& macroOut, |
139 | | int version) const override |
140 | 276k | { |
141 | 276k | if (macroNamespace.empty()) { |
142 | 178k | if (macroName == "presetName") { |
143 | 39.9k | macroOut += Preset.Name; |
144 | 39.9k | return ExpandMacroResult::Ok; |
145 | 39.9k | } |
146 | 138k | if (macroName == "configurePresetName") { |
147 | 66 | if (version < 13) { |
148 | 18 | return ExpandMacroResult::Error; |
149 | 18 | } |
150 | 48 | if (auto const* configurePresetName = GetConfigurePresetName(Preset)) { |
151 | 48 | macroOut += *configurePresetName; |
152 | 48 | return ExpandMacroResult::Ok; |
153 | 48 | } |
154 | 0 | return ExpandMacroResult::Error; |
155 | 48 | } |
156 | 138k | if (macroName == "generator") { |
157 | | // Generator only makes sense if preset is not hidden. |
158 | 68.1k | if (!Preset.Hidden) { |
159 | 61.6k | macroOut += Graph.GetGeneratorForPreset(Preset.Name); |
160 | 61.6k | } |
161 | 68.1k | return ExpandMacroResult::Ok; |
162 | 68.1k | } |
163 | 70.2k | if (macroName == "fileDir") { |
164 | 66.8k | if (version < 4) { |
165 | 9 | return ExpandMacroResult::Error; |
166 | 9 | } |
167 | 66.8k | macroOut += |
168 | 66.8k | cmSystemTools::GetParentDirectory(Preset.OriginFile->Filename); |
169 | 66.8k | return ExpandMacroResult::Ok; |
170 | 66.8k | } |
171 | 70.2k | } |
172 | 101k | return ExpandMacroResult::Ignore; |
173 | 276k | } 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 | 63.7k | { | 141 | 63.7k | if (macroNamespace.empty()) { | 142 | 39.5k | if (macroName == "presetName") { | 143 | 8.16k | macroOut += Preset.Name; | 144 | 8.16k | return ExpandMacroResult::Ok; | 145 | 8.16k | } | 146 | 31.3k | if (macroName == "configurePresetName") { | 147 | 6 | if (version < 13) { | 148 | 6 | return ExpandMacroResult::Error; | 149 | 6 | } | 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 | 31.3k | if (macroName == "generator") { | 157 | | // Generator only makes sense if preset is not hidden. | 158 | 14.0k | if (!Preset.Hidden) { | 159 | 14.0k | macroOut += Graph.GetGeneratorForPreset(Preset.Name); | 160 | 14.0k | } | 161 | 14.0k | return ExpandMacroResult::Ok; | 162 | 14.0k | } | 163 | 17.2k | if (macroName == "fileDir") { | 164 | 16.8k | if (version < 4) { | 165 | 0 | return ExpandMacroResult::Error; | 166 | 0 | } | 167 | 16.8k | macroOut += | 168 | 16.8k | cmSystemTools::GetParentDirectory(Preset.OriginFile->Filename); | 169 | 16.8k | return ExpandMacroResult::Ok; | 170 | 16.8k | } | 171 | 17.2k | } | 172 | 24.6k | return ExpandMacroResult::Ignore; | 173 | 63.7k | } |
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 | 29.2k | { | 141 | 29.2k | if (macroNamespace.empty()) { | 142 | 19.5k | if (macroName == "presetName") { | 143 | 6.16k | macroOut += Preset.Name; | 144 | 6.16k | return ExpandMacroResult::Ok; | 145 | 6.16k | } | 146 | 13.4k | 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 | 13.4k | if (macroName == "generator") { | 157 | | // Generator only makes sense if preset is not hidden. | 158 | 7.22k | if (!Preset.Hidden) { | 159 | 7.22k | macroOut += Graph.GetGeneratorForPreset(Preset.Name); | 160 | 7.22k | } | 161 | 7.22k | return ExpandMacroResult::Ok; | 162 | 7.22k | } | 163 | 6.20k | if (macroName == "fileDir") { | 164 | 6.20k | if (version < 4) { | 165 | 0 | return ExpandMacroResult::Error; | 166 | 0 | } | 167 | 6.20k | macroOut += | 168 | 6.20k | cmSystemTools::GetParentDirectory(Preset.OriginFile->Filename); | 169 | 6.20k | return ExpandMacroResult::Ok; | 170 | 6.20k | } | 171 | 6.20k | } | 172 | 9.63k | return ExpandMacroResult::Ignore; | 173 | 29.2k | } |
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 | 29.4k | { | 141 | 29.4k | if (macroNamespace.empty()) { | 142 | 19.6k | if (macroName == "presetName") { | 143 | 6.18k | macroOut += Preset.Name; | 144 | 6.18k | return ExpandMacroResult::Ok; | 145 | 6.18k | } | 146 | 13.5k | 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 | 13.5k | if (macroName == "generator") { | 157 | | // Generator only makes sense if preset is not hidden. | 158 | 7.28k | if (!Preset.Hidden) { | 159 | 7.28k | macroOut += Graph.GetGeneratorForPreset(Preset.Name); | 160 | 7.28k | } | 161 | 7.28k | return ExpandMacroResult::Ok; | 162 | 7.28k | } | 163 | 6.22k | if (macroName == "fileDir") { | 164 | 6.22k | if (version < 4) { | 165 | 0 | return ExpandMacroResult::Error; | 166 | 0 | } | 167 | 6.22k | macroOut += | 168 | 6.22k | cmSystemTools::GetParentDirectory(Preset.OriginFile->Filename); | 169 | 6.22k | return ExpandMacroResult::Ok; | 170 | 6.22k | } | 171 | 6.22k | } | 172 | 9.75k | return ExpandMacroResult::Ignore; | 173 | 29.4k | } |
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 | 154k | { | 141 | 154k | if (macroNamespace.empty()) { | 142 | 99.6k | if (macroName == "presetName") { | 143 | 19.4k | macroOut += Preset.Name; | 144 | 19.4k | return ExpandMacroResult::Ok; | 145 | 19.4k | } | 146 | 80.2k | if (macroName == "configurePresetName") { | 147 | 60 | if (version < 13) { | 148 | 12 | return ExpandMacroResult::Error; | 149 | 12 | } | 150 | 48 | if (auto const* configurePresetName = GetConfigurePresetName(Preset)) { | 151 | 48 | macroOut += *configurePresetName; | 152 | 48 | return ExpandMacroResult::Ok; | 153 | 48 | } | 154 | 0 | return ExpandMacroResult::Error; | 155 | 48 | } | 156 | 80.1k | if (macroName == "generator") { | 157 | | // Generator only makes sense if preset is not hidden. | 158 | 39.6k | if (!Preset.Hidden) { | 159 | 33.1k | macroOut += Graph.GetGeneratorForPreset(Preset.Name); | 160 | 33.1k | } | 161 | 39.6k | return ExpandMacroResult::Ok; | 162 | 39.6k | } | 163 | 40.5k | if (macroName == "fileDir") { | 164 | 37.5k | if (version < 4) { | 165 | 9 | return ExpandMacroResult::Error; | 166 | 9 | } | 167 | 37.5k | macroOut += | 168 | 37.5k | cmSystemTools::GetParentDirectory(Preset.OriginFile->Filename); | 169 | 37.5k | return ExpandMacroResult::Ok; | 170 | 37.5k | } | 171 | 40.5k | } | 172 | 57.8k | return ExpandMacroResult::Ignore; | 173 | 154k | } |
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 | 84.8k | : Preset(preset) |
184 | 84.8k | { |
185 | 84.8k | } cmCMakePresetsGraphInternal::ImmediateMacroExpander<cmCMakePresetsGraph::ConfigurePreset>::ImmediateMacroExpander(cmCMakePresetsGraph::ConfigurePreset const&) Line | Count | Source | 183 | 47.7k | : Preset(preset) | 184 | 47.7k | { | 185 | 47.7k | } |
cmCMakePresetsGraphInternal::ImmediateMacroExpander<cmCMakePresetsGraph::BuildPreset>::ImmediateMacroExpander(cmCMakePresetsGraph::BuildPreset const&) Line | Count | Source | 183 | 11.7k | : Preset(preset) | 184 | 11.7k | { | 185 | 11.7k | } |
cmCMakePresetsGraphInternal::ImmediateMacroExpander<cmCMakePresetsGraph::TestPreset>::ImmediateMacroExpander(cmCMakePresetsGraph::TestPreset const&) Line | Count | Source | 183 | 12.9k | : Preset(preset) | 184 | 12.9k | { | 185 | 12.9k | } |
cmCMakePresetsGraphInternal::ImmediateMacroExpander<cmCMakePresetsGraph::PackagePreset>::ImmediateMacroExpander(cmCMakePresetsGraph::PackagePreset const&) Line | Count | Source | 183 | 10.6k | : Preset(preset) | 184 | 10.6k | { | 185 | 10.6k | } |
cmCMakePresetsGraphInternal::ImmediateMacroExpander<cmCMakePresetsGraph::WorkflowPreset>::ImmediateMacroExpander(cmCMakePresetsGraph::WorkflowPreset const&) Line | Count | Source | 183 | 1.91k | : Preset(preset) | 184 | 1.91k | { | 185 | 1.91k | } |
|
186 | | ExpandMacroResult operator()(std::string const& macroNamespace, |
187 | | std::string const& macroName, |
188 | | std::string& macroOut, |
189 | | int version) const override |
190 | 29.3k | { |
191 | 29.3k | if (macroNamespace.empty()) { |
192 | 18.2k | if (macroName == "fileDir") { |
193 | 1.62k | if (version < 12) { |
194 | 510 | return ExpandMacroResult::Defer; |
195 | 510 | } |
196 | 1.11k | macroOut += |
197 | 1.11k | cmSystemTools::GetParentDirectory(Preset.OriginFile->Filename); |
198 | 1.11k | return ExpandMacroResult::Ok; |
199 | 1.62k | } |
200 | 18.2k | } |
201 | 27.7k | return ExpandMacroResult::Defer; |
202 | 29.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 | 17.4k | { | 191 | 17.4k | if (macroNamespace.empty()) { | 192 | 15.3k | if (macroName == "fileDir") { | 193 | 213 | if (version < 12) { | 194 | 168 | return ExpandMacroResult::Defer; | 195 | 168 | } | 196 | 45 | macroOut += | 197 | 45 | cmSystemTools::GetParentDirectory(Preset.OriginFile->Filename); | 198 | 45 | return ExpandMacroResult::Ok; | 199 | 213 | } | 200 | 15.3k | } | 201 | 17.2k | return ExpandMacroResult::Defer; | 202 | 17.4k | } |
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 | 11.8k | { | 191 | 11.8k | if (macroNamespace.empty()) { | 192 | 2.93k | if (macroName == "fileDir") { | 193 | 1.41k | if (version < 12) { | 194 | 342 | return ExpandMacroResult::Defer; | 195 | 342 | } | 196 | 1.07k | macroOut += | 197 | 1.07k | cmSystemTools::GetParentDirectory(Preset.OriginFile->Filename); | 198 | 1.07k | return ExpandMacroResult::Ok; | 199 | 1.41k | } | 200 | 2.93k | } | 201 | 10.4k | return ExpandMacroResult::Defer; | 202 | 11.8k | } |
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 | 0 | 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 | 570 | { |
237 | 570 | out = this->Value; |
238 | 570 | return true; |
239 | 570 | } |
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 | 1.86M | { |
311 | 1.86M | cm::optional<bool> temp; |
312 | 1.86M | if (!PresetOptionalBoolHelper(temp, value, state)) { |
313 | 0 | return false; |
314 | 0 | } |
315 | | |
316 | 1.86M | if (temp) { |
317 | 0 | out[key] = *temp; |
318 | 0 | } |
319 | | |
320 | 1.86M | return true; |
321 | 1.86M | } |
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 | 24 | { |
380 | 24 | obj.Bind("name"_s, &cmCMakePresetsGraph::Preset::Name, PresetNameHelper) |
381 | 24 | .Bind("inherits"_s, &cmCMakePresetsGraph::Preset::Inherits, |
382 | 24 | PresetVectorOneOrMoreStringHelper, false) |
383 | 24 | .Bind("hidden"_s, &cmCMakePresetsGraph::Preset::Hidden, PresetBoolHelper, |
384 | 24 | false) |
385 | 24 | .template Bind<std::nullptr_t>( |
386 | 24 | "vendor"_s, nullptr, VendorHelper(cmCMakePresetsErrors::INVALID_PRESET), |
387 | 24 | false) |
388 | 24 | .Bind("displayName"_s, &cmCMakePresetsGraph::Preset::DisplayName, |
389 | 24 | PresetStringHelper, false) |
390 | 24 | .Bind("description"_s, &cmCMakePresetsGraph::Preset::Description, |
391 | 24 | PresetStringHelper, false) |
392 | 24 | .Bind("condition"_s, &cmCMakePresetsGraph::Preset::ConditionEvaluator, |
393 | 24 | PresetConditionHelper, false); |
394 | 24 | return obj; |
395 | 24 | } cmJSONHelperBuilder::Object<cmCMakePresetsGraph::BuildPreset> cmCMakePresetsGraphInternal::BindPresetIdentityFields<cmCMakePresetsGraph::BuildPreset>(cmJSONHelperBuilder::Object<cmCMakePresetsGraph::BuildPreset>) Line | Count | Source | 379 | 6 | { | 380 | 6 | obj.Bind("name"_s, &cmCMakePresetsGraph::Preset::Name, PresetNameHelper) | 381 | 6 | .Bind("inherits"_s, &cmCMakePresetsGraph::Preset::Inherits, | 382 | 6 | PresetVectorOneOrMoreStringHelper, false) | 383 | 6 | .Bind("hidden"_s, &cmCMakePresetsGraph::Preset::Hidden, PresetBoolHelper, | 384 | 6 | false) | 385 | 6 | .template Bind<std::nullptr_t>( | 386 | 6 | "vendor"_s, nullptr, VendorHelper(cmCMakePresetsErrors::INVALID_PRESET), | 387 | 6 | false) | 388 | 6 | .Bind("displayName"_s, &cmCMakePresetsGraph::Preset::DisplayName, | 389 | 6 | PresetStringHelper, false) | 390 | 6 | .Bind("description"_s, &cmCMakePresetsGraph::Preset::Description, | 391 | 6 | PresetStringHelper, false) | 392 | 6 | .Bind("condition"_s, &cmCMakePresetsGraph::Preset::ConditionEvaluator, | 393 | 6 | PresetConditionHelper, false); | 394 | 6 | return obj; | 395 | 6 | } |
cmJSONHelperBuilder::Object<cmCMakePresetsGraph::ConfigurePreset> cmCMakePresetsGraphInternal::BindPresetIdentityFields<cmCMakePresetsGraph::ConfigurePreset>(cmJSONHelperBuilder::Object<cmCMakePresetsGraph::ConfigurePreset>) Line | Count | Source | 379 | 6 | { | 380 | 6 | obj.Bind("name"_s, &cmCMakePresetsGraph::Preset::Name, PresetNameHelper) | 381 | 6 | .Bind("inherits"_s, &cmCMakePresetsGraph::Preset::Inherits, | 382 | 6 | PresetVectorOneOrMoreStringHelper, false) | 383 | 6 | .Bind("hidden"_s, &cmCMakePresetsGraph::Preset::Hidden, PresetBoolHelper, | 384 | 6 | false) | 385 | 6 | .template Bind<std::nullptr_t>( | 386 | 6 | "vendor"_s, nullptr, VendorHelper(cmCMakePresetsErrors::INVALID_PRESET), | 387 | 6 | false) | 388 | 6 | .Bind("displayName"_s, &cmCMakePresetsGraph::Preset::DisplayName, | 389 | 6 | PresetStringHelper, false) | 390 | 6 | .Bind("description"_s, &cmCMakePresetsGraph::Preset::Description, | 391 | 6 | PresetStringHelper, false) | 392 | 6 | .Bind("condition"_s, &cmCMakePresetsGraph::Preset::ConditionEvaluator, | 393 | 6 | PresetConditionHelper, false); | 394 | 6 | return obj; | 395 | 6 | } |
cmJSONHelperBuilder::Object<cmCMakePresetsGraph::PackagePreset> cmCMakePresetsGraphInternal::BindPresetIdentityFields<cmCMakePresetsGraph::PackagePreset>(cmJSONHelperBuilder::Object<cmCMakePresetsGraph::PackagePreset>) Line | Count | Source | 379 | 6 | { | 380 | 6 | obj.Bind("name"_s, &cmCMakePresetsGraph::Preset::Name, PresetNameHelper) | 381 | 6 | .Bind("inherits"_s, &cmCMakePresetsGraph::Preset::Inherits, | 382 | 6 | PresetVectorOneOrMoreStringHelper, false) | 383 | 6 | .Bind("hidden"_s, &cmCMakePresetsGraph::Preset::Hidden, PresetBoolHelper, | 384 | 6 | false) | 385 | 6 | .template Bind<std::nullptr_t>( | 386 | 6 | "vendor"_s, nullptr, VendorHelper(cmCMakePresetsErrors::INVALID_PRESET), | 387 | 6 | false) | 388 | 6 | .Bind("displayName"_s, &cmCMakePresetsGraph::Preset::DisplayName, | 389 | 6 | PresetStringHelper, false) | 390 | 6 | .Bind("description"_s, &cmCMakePresetsGraph::Preset::Description, | 391 | 6 | PresetStringHelper, false) | 392 | 6 | .Bind("condition"_s, &cmCMakePresetsGraph::Preset::ConditionEvaluator, | 393 | 6 | PresetConditionHelper, false); | 394 | 6 | return obj; | 395 | 6 | } |
cmJSONHelperBuilder::Object<cmCMakePresetsGraph::TestPreset> cmCMakePresetsGraphInternal::BindPresetIdentityFields<cmCMakePresetsGraph::TestPreset>(cmJSONHelperBuilder::Object<cmCMakePresetsGraph::TestPreset>) Line | Count | Source | 379 | 6 | { | 380 | 6 | obj.Bind("name"_s, &cmCMakePresetsGraph::Preset::Name, PresetNameHelper) | 381 | 6 | .Bind("inherits"_s, &cmCMakePresetsGraph::Preset::Inherits, | 382 | 6 | PresetVectorOneOrMoreStringHelper, false) | 383 | 6 | .Bind("hidden"_s, &cmCMakePresetsGraph::Preset::Hidden, PresetBoolHelper, | 384 | 6 | false) | 385 | 6 | .template Bind<std::nullptr_t>( | 386 | 6 | "vendor"_s, nullptr, VendorHelper(cmCMakePresetsErrors::INVALID_PRESET), | 387 | 6 | false) | 388 | 6 | .Bind("displayName"_s, &cmCMakePresetsGraph::Preset::DisplayName, | 389 | 6 | PresetStringHelper, false) | 390 | 6 | .Bind("description"_s, &cmCMakePresetsGraph::Preset::Description, | 391 | 6 | PresetStringHelper, false) | 392 | 6 | .Bind("condition"_s, &cmCMakePresetsGraph::Preset::ConditionEvaluator, | 393 | 6 | PresetConditionHelper, false); | 394 | 6 | return obj; | 395 | 6 | } |
|
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 | 18 | { |
403 | 18 | obj |
404 | 18 | .Bind("environment"_s, &cmCMakePresetsGraph::Preset::Environment, |
405 | 18 | EnvironmentMapHelper, false) |
406 | 18 | .Bind("configurePreset"_s, &T::ConfigurePreset, PresetStringHelper, false) |
407 | 18 | .Bind("inheritConfigureEnvironment"_s, &T::InheritConfigureEnvironment, |
408 | 18 | PresetOptionalBoolHelper, false); |
409 | 18 | return obj; |
410 | 18 | } cmJSONHelperBuilder::Object<cmCMakePresetsGraph::BuildPreset> cmCMakePresetsGraphInternal::BindDependentPresetFields<cmCMakePresetsGraph::BuildPreset>(cmJSONHelperBuilder::Object<cmCMakePresetsGraph::BuildPreset>) Line | Count | Source | 402 | 6 | { | 403 | 6 | obj | 404 | 6 | .Bind("environment"_s, &cmCMakePresetsGraph::Preset::Environment, | 405 | 6 | EnvironmentMapHelper, false) | 406 | 6 | .Bind("configurePreset"_s, &T::ConfigurePreset, PresetStringHelper, false) | 407 | 6 | .Bind("inheritConfigureEnvironment"_s, &T::InheritConfigureEnvironment, | 408 | 6 | PresetOptionalBoolHelper, false); | 409 | 6 | return obj; | 410 | 6 | } |
cmJSONHelperBuilder::Object<cmCMakePresetsGraph::PackagePreset> cmCMakePresetsGraphInternal::BindDependentPresetFields<cmCMakePresetsGraph::PackagePreset>(cmJSONHelperBuilder::Object<cmCMakePresetsGraph::PackagePreset>) Line | Count | Source | 402 | 6 | { | 403 | 6 | obj | 404 | 6 | .Bind("environment"_s, &cmCMakePresetsGraph::Preset::Environment, | 405 | 6 | EnvironmentMapHelper, false) | 406 | 6 | .Bind("configurePreset"_s, &T::ConfigurePreset, PresetStringHelper, false) | 407 | 6 | .Bind("inheritConfigureEnvironment"_s, &T::InheritConfigureEnvironment, | 408 | 6 | PresetOptionalBoolHelper, false); | 409 | 6 | return obj; | 410 | 6 | } |
cmJSONHelperBuilder::Object<cmCMakePresetsGraph::TestPreset> cmCMakePresetsGraphInternal::BindDependentPresetFields<cmCMakePresetsGraph::TestPreset>(cmJSONHelperBuilder::Object<cmCMakePresetsGraph::TestPreset>) Line | Count | Source | 402 | 6 | { | 403 | 6 | obj | 404 | 6 | .Bind("environment"_s, &cmCMakePresetsGraph::Preset::Environment, | 405 | 6 | EnvironmentMapHelper, false) | 406 | 6 | .Bind("configurePreset"_s, &T::ConfigurePreset, PresetStringHelper, false) | 407 | 6 | .Bind("inheritConfigureEnvironment"_s, &T::InheritConfigureEnvironment, | 408 | 6 | PresetOptionalBoolHelper, false); | 409 | 6 | return obj; | 410 | 6 | } |
|
411 | | } |