resolve cyclic dependency with zstd
[platform/upstream/cmake.git] / Source / cmCMakePresetsGraphReadJSONBuildPresets.cxx
1 /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
2    file Copyright.txt or https://cmake.org/licensing for details.  */
3 #include <cstddef>
4 #include <functional>
5 #include <map>
6 #include <memory>
7 #include <string>
8 #include <vector>
9
10 #include <cm/optional>
11 #include <cmext/string_view>
12
13 #include <cm3p/json/value.h>
14
15 #include "cmBuildOptions.h"
16 #include "cmCMakePresetsGraph.h"
17 #include "cmCMakePresetsGraphInternal.h"
18 #include "cmJSONHelpers.h"
19
20 namespace {
21 using ReadFileResult = cmCMakePresetsGraph::ReadFileResult;
22 using BuildPreset = cmCMakePresetsGraph::BuildPreset;
23 using JSONHelperBuilder = cmJSONHelperBuilder<ReadFileResult>;
24
25 ReadFileResult PackageResolveModeHelper(cm::optional<PackageResolveMode>& out,
26                                         const Json::Value* value)
27 {
28   if (!value) {
29     out = cm::nullopt;
30     return ReadFileResult::READ_OK;
31   }
32
33   if (!value->isString()) {
34     return ReadFileResult::INVALID_PRESET;
35   }
36
37   if (value->asString() == "on") {
38     out = PackageResolveMode::Force;
39   } else if (value->asString() == "off") {
40     out = PackageResolveMode::Disable;
41   } else if (value->asString() == "only") {
42     out = PackageResolveMode::OnlyResolve;
43   } else {
44     return ReadFileResult::INVALID_PRESET;
45   }
46
47   return ReadFileResult::READ_OK;
48 }
49
50 std::function<ReadFileResult(BuildPreset&, const Json::Value*)> const
51   ResolvePackageReferencesHelper =
52     [](BuildPreset& out, const Json::Value* value) -> ReadFileResult {
53   return PackageResolveModeHelper(out.ResolvePackageReferences, value);
54 };
55
56 auto const BuildPresetHelper =
57   JSONHelperBuilder::Object<BuildPreset>(ReadFileResult::READ_OK,
58                                          ReadFileResult::INVALID_PRESET, false)
59     .Bind("name"_s, &BuildPreset::Name,
60           cmCMakePresetsGraphInternal::PresetStringHelper)
61     .Bind("inherits"_s, &BuildPreset::Inherits,
62           cmCMakePresetsGraphInternal::PresetVectorOneOrMoreStringHelper,
63           false)
64     .Bind("hidden"_s, &BuildPreset::Hidden,
65           cmCMakePresetsGraphInternal::PresetBoolHelper, false)
66     .Bind<std::nullptr_t>("vendor"_s, nullptr,
67                           cmCMakePresetsGraphInternal::VendorHelper(
68                             ReadFileResult::INVALID_PRESET),
69                           false)
70     .Bind("displayName"_s, &BuildPreset::DisplayName,
71           cmCMakePresetsGraphInternal::PresetStringHelper, false)
72     .Bind("description"_s, &BuildPreset::Description,
73           cmCMakePresetsGraphInternal::PresetStringHelper, false)
74     .Bind("environment"_s, &BuildPreset::Environment,
75           cmCMakePresetsGraphInternal::EnvironmentMapHelper, false)
76     .Bind("configurePreset"_s, &BuildPreset::ConfigurePreset,
77           cmCMakePresetsGraphInternal::PresetStringHelper, false)
78     .Bind("inheritConfigureEnvironment"_s,
79           &BuildPreset::InheritConfigureEnvironment,
80           cmCMakePresetsGraphInternal::PresetOptionalBoolHelper, false)
81     .Bind("jobs"_s, &BuildPreset::Jobs,
82           cmCMakePresetsGraphInternal::PresetOptionalIntHelper, false)
83     .Bind("targets"_s, &BuildPreset::Targets,
84           cmCMakePresetsGraphInternal::PresetVectorOneOrMoreStringHelper,
85           false)
86     .Bind("configuration"_s, &BuildPreset::Configuration,
87           cmCMakePresetsGraphInternal::PresetStringHelper, false)
88     .Bind("cleanFirst"_s, &BuildPreset::CleanFirst,
89           cmCMakePresetsGraphInternal::PresetOptionalBoolHelper, false)
90     .Bind("verbose"_s, &BuildPreset::Verbose,
91           cmCMakePresetsGraphInternal::PresetOptionalBoolHelper, false)
92     .Bind("nativeToolOptions"_s, &BuildPreset::NativeToolOptions,
93           cmCMakePresetsGraphInternal::PresetVectorStringHelper, false)
94     .Bind("condition"_s, &BuildPreset::ConditionEvaluator,
95           cmCMakePresetsGraphInternal::PresetConditionHelper, false)
96     .Bind("resolvePackageReferences"_s, ResolvePackageReferencesHelper, false);
97 }
98
99 namespace cmCMakePresetsGraphInternal {
100 ReadFileResult BuildPresetsHelper(std::vector<BuildPreset>& out,
101                                   const Json::Value* value)
102 {
103   static auto const helper = JSONHelperBuilder::Vector<BuildPreset>(
104     ReadFileResult::READ_OK, ReadFileResult::INVALID_PRESETS,
105     BuildPresetHelper);
106
107   return helper(out, value);
108 }
109 }