/src/CMake/Source/cmCMakePresetsArgs.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 <string> |
6 | | |
7 | | #include <cm/optional> |
8 | | |
9 | | #include "cmCMakePresetsGraph.h" |
10 | | |
11 | | class cmCMakePresetsArgsBase |
12 | | { |
13 | | public: |
14 | | using PresetListMode = cmCMakePresetsGraph::PresetListMode; |
15 | | |
16 | 35 | virtual ~cmCMakePresetsArgsBase() = default; |
17 | | |
18 | 35 | virtual bool HasPresetsArg() const { return !this->PresetName.empty(); }; |
19 | 0 | virtual void Clear() { this->PresetName.clear(); } |
20 | | |
21 | | static PresetListMode ParseListPresetsMode(std::string& type) |
22 | 0 | { |
23 | 0 | struct DefinedPresetType |
24 | 0 | { |
25 | 0 | char const* Type; |
26 | 0 | char const* BaseType; |
27 | 0 | }; |
28 | 0 | static constexpr DefinedPresetType definedPresetTypes[] = { |
29 | 0 | { "defined", "" }, |
30 | 0 | { "configure-defined", "configure" }, |
31 | 0 | { "build-defined", "build" }, |
32 | 0 | { "test-defined", "test" }, |
33 | 0 | { "package-defined", "package" }, |
34 | 0 | { "workflow-defined", "workflow" }, |
35 | 0 | { "all-defined", "all" }, |
36 | 0 | }; |
37 | |
|
38 | 0 | for (auto const& definedPresetType : definedPresetTypes) { |
39 | 0 | if (type == definedPresetType.Type) { |
40 | 0 | type = definedPresetType.BaseType; |
41 | 0 | return PresetListMode::Defined; |
42 | 0 | } |
43 | 0 | } |
44 | 0 | return PresetListMode::Available; |
45 | 0 | } |
46 | | |
47 | | std::string PresetName; |
48 | | std::string PresetsFile; |
49 | | |
50 | | protected: |
51 | 35 | cmCMakePresetsArgsBase() = default; |
52 | | }; |
53 | | |
54 | | class cmCMakePresetsArgs : public cmCMakePresetsArgsBase |
55 | | { |
56 | | public: |
57 | | bool HasPresetsArg() const override |
58 | 0 | { |
59 | 0 | return this->cmCMakePresetsArgsBase::HasPresetsArg() || |
60 | 0 | this->ListPresetsMode.has_value(); |
61 | 0 | } |
62 | | |
63 | | void Clear() override |
64 | 0 | { |
65 | 0 | this->cmCMakePresetsArgsBase::Clear(); |
66 | 0 | this->ListPresetsMode.reset(); |
67 | 0 | } |
68 | | |
69 | | bool SetListPresets(std::string const& value) |
70 | 0 | { |
71 | 0 | std::string type = value; |
72 | 0 | auto const mode = ParseListPresetsMode(type); |
73 | 0 | if (!type.empty()) { |
74 | 0 | this->Clear(); |
75 | 0 | return false; |
76 | 0 | } |
77 | 0 | this->ListPresetsMode = mode; |
78 | 0 | return true; |
79 | 0 | } |
80 | | |
81 | | cm::optional<PresetListMode> ListPresetsMode; |
82 | | }; |
83 | | |
84 | | class cmCMakePresetsConfigureArgs : public cmCMakePresetsArgsBase |
85 | | { |
86 | | public: |
87 | | enum class ListPresetsOption |
88 | | { |
89 | | None, |
90 | | Configure, |
91 | | Build, |
92 | | Test, |
93 | | Package, |
94 | | Workflow, |
95 | | All, |
96 | | }; |
97 | | |
98 | | bool HasPresetsArg() const override |
99 | 35 | { |
100 | 35 | return this->cmCMakePresetsArgsBase::HasPresetsArg() || |
101 | 35 | this->ListPresets != ListPresetsOption::None; |
102 | 35 | } |
103 | | |
104 | | void Clear() override |
105 | 0 | { |
106 | 0 | this->cmCMakePresetsArgsBase::Clear(); |
107 | 0 | this->ListPresets = ListPresetsOption::None; |
108 | 0 | this->ListPresetsMode = PresetListMode::Available; |
109 | 0 | } |
110 | | |
111 | | ListPresetsOption ListPresets = ListPresetsOption::None; |
112 | | PresetListMode ListPresetsMode = PresetListMode::Available; |
113 | | }; |
114 | | |
115 | | class cmCMakePresetsWorkflowArgs : public cmCMakePresetsArgs |
116 | | { |
117 | | public: |
118 | | void Clear() override |
119 | 0 | { |
120 | 0 | this->cmCMakePresetsArgs::Clear(); |
121 | 0 | this->Fresh = false; |
122 | 0 | } |
123 | | |
124 | | bool Fresh = false; |
125 | | }; |