1 /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 file Copyright.txt or https://cmake.org/licensing for details. */
10 #include <cm/optional>
11 #include <cmext/string_view>
13 #include <cm3p/json/value.h>
15 #include "cmBuildOptions.h"
16 #include "cmCMakePresetsGraph.h"
17 #include "cmCMakePresetsGraphInternal.h"
18 #include "cmJSONHelpers.h"
21 using ReadFileResult = cmCMakePresetsGraph::ReadFileResult;
22 using BuildPreset = cmCMakePresetsGraph::BuildPreset;
23 using JSONHelperBuilder = cmJSONHelperBuilder<ReadFileResult>;
25 ReadFileResult PackageResolveModeHelper(cm::optional<PackageResolveMode>& out,
26 const Json::Value* value)
30 return ReadFileResult::READ_OK;
33 if (!value->isString()) {
34 return ReadFileResult::INVALID_PRESET;
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;
44 return ReadFileResult::INVALID_PRESET;
47 return ReadFileResult::READ_OK;
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);
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,
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),
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,
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);
99 namespace cmCMakePresetsGraphInternal {
100 ReadFileResult BuildPresetsHelper(std::vector<BuildPreset>& out,
101 const Json::Value* value)
103 static auto const helper = JSONHelperBuilder::Vector<BuildPreset>(
104 ReadFileResult::READ_OK, ReadFileResult::INVALID_PRESETS,
107 return helper(out, value);