Coverage Report

Created: 2026-02-09 06:05

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/CMake/Source/cmCMakePresetsGraphReadJSONBuildPresets.cxx
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
#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 "cmCMakePresetsErrors.h"
17
#include "cmCMakePresetsGraph.h"
18
#include "cmCMakePresetsGraphInternal.h"
19
#include "cmJSONHelpers.h"
20
21
class cmJSONState;
22
namespace {
23
using BuildPreset = cmCMakePresetsGraph::BuildPreset;
24
using JSONHelperBuilder = cmJSONHelperBuilder;
25
26
bool PackageResolveModeHelper(cm::optional<PackageResolveMode>& out,
27
                              Json::Value const* value, cmJSONState* state)
28
0
{
29
0
  if (!value) {
30
0
    out = cm::nullopt;
31
0
    return true;
32
0
  }
33
34
0
  if (!value->isString()) {
35
0
    cmCMakePresetsErrors::INVALID_PRESET(value, state);
36
0
    return false;
37
0
  }
38
39
0
  if (value->asString() == "on") {
40
0
    out = PackageResolveMode::Force;
41
0
  } else if (value->asString() == "off") {
42
0
    out = PackageResolveMode::Disable;
43
0
  } else if (value->asString() == "only") {
44
0
    out = PackageResolveMode::OnlyResolve;
45
0
  } else {
46
0
    cmCMakePresetsErrors::INVALID_PRESET(value, state);
47
0
    return false;
48
0
  }
49
50
0
  return true;
51
0
}
52
53
std::function<bool(BuildPreset&, Json::Value const*, cmJSONState*)> const
54
  ResolvePackageReferencesHelper = [](BuildPreset& out,
55
                                      Json::Value const* value,
56
0
                                      cmJSONState* state) -> bool {
57
0
  return PackageResolveModeHelper(out.ResolvePackageReferences, value, state);
58
0
};
59
60
auto const BuildPresetHelper =
61
  JSONHelperBuilder::Object<BuildPreset>(
62
    cmCMakePresetsErrors::INVALID_PRESET_OBJECT, false)
63
    .Bind("name"_s, &BuildPreset::Name,
64
          cmCMakePresetsGraphInternal::PresetNameHelper)
65
    .Bind("inherits"_s, &BuildPreset::Inherits,
66
          cmCMakePresetsGraphInternal::PresetVectorOneOrMoreStringHelper,
67
          false)
68
    .Bind("hidden"_s, &BuildPreset::Hidden,
69
          cmCMakePresetsGraphInternal::PresetBoolHelper, false)
70
    .Bind<std::nullptr_t>("vendor"_s, nullptr,
71
                          cmCMakePresetsGraphInternal::VendorHelper(
72
                            cmCMakePresetsErrors::INVALID_PRESET),
73
                          false)
74
    .Bind("displayName"_s, &BuildPreset::DisplayName,
75
          cmCMakePresetsGraphInternal::PresetStringHelper, false)
76
    .Bind("description"_s, &BuildPreset::Description,
77
          cmCMakePresetsGraphInternal::PresetStringHelper, false)
78
    .Bind("environment"_s, &BuildPreset::Environment,
79
          cmCMakePresetsGraphInternal::EnvironmentMapHelper, false)
80
    .Bind("configurePreset"_s, &BuildPreset::ConfigurePreset,
81
          cmCMakePresetsGraphInternal::PresetStringHelper, false)
82
    .Bind("inheritConfigureEnvironment"_s,
83
          &BuildPreset::InheritConfigureEnvironment,
84
          cmCMakePresetsGraphInternal::PresetOptionalBoolHelper, false)
85
    .Bind("jobs"_s, &BuildPreset::Jobs,
86
          cmCMakePresetsGraphInternal::PresetOptionalUIntHelper, false)
87
    .Bind("targets"_s, &BuildPreset::Targets,
88
          cmCMakePresetsGraphInternal::PresetVectorOneOrMoreStringHelper,
89
          false)
90
    .Bind("configuration"_s, &BuildPreset::Configuration,
91
          cmCMakePresetsGraphInternal::PresetStringHelper, false)
92
    .Bind("cleanFirst"_s, &BuildPreset::CleanFirst,
93
          cmCMakePresetsGraphInternal::PresetOptionalBoolHelper, false)
94
    .Bind("verbose"_s, &BuildPreset::Verbose,
95
          cmCMakePresetsGraphInternal::PresetOptionalBoolHelper, false)
96
    .Bind("nativeToolOptions"_s, &BuildPreset::NativeToolOptions,
97
          cmCMakePresetsGraphInternal::PresetVectorStringHelper, false)
98
    .Bind("condition"_s, &BuildPreset::ConditionEvaluator,
99
          cmCMakePresetsGraphInternal::PresetConditionHelper, false)
100
    .Bind("resolvePackageReferences"_s, ResolvePackageReferencesHelper, false);
101
}
102
103
namespace cmCMakePresetsGraphInternal {
104
bool BuildPresetsHelper(std::vector<BuildPreset>& out,
105
                        Json::Value const* value, cmJSONState* state)
106
0
{
107
0
  static auto const helper = JSONHelperBuilder::Vector<BuildPreset>(
108
0
    cmCMakePresetsErrors::INVALID_PRESETS, BuildPresetHelper);
109
110
0
  return helper(out, value, state);
111
0
}
112
}