Coverage Report

Created: 2026-09-14 06:43

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 <functional>
4
#include <string>
5
#include <vector>
6
7
#include <cm/optional>
8
#include <cmext/string_view>
9
10
#include <cm3p/json/value.h>
11
12
#include "cmBuildOptions.h"
13
#include "cmCMakePresetsErrors.h"
14
#include "cmCMakePresetsGraph.h"
15
#include "cmCMakePresetsGraphInternal.h"
16
#include "cmJSONHelpers.h"
17
18
class cmJSONState;
19
namespace {
20
using BuildPreset = cmCMakePresetsGraph::BuildPreset;
21
using JSONHelperBuilder = cmJSONHelperBuilder;
22
23
bool PackageResolveModeHelper(cm::optional<PackageResolveMode>& out,
24
                              Json::Value const* value, cmJSONState* state)
25
51.5k
{
26
51.5k
  if (!value) {
27
51.5k
    out = cm::nullopt;
28
51.5k
    return true;
29
51.5k
  }
30
31
0
  if (!value->isString()) {
32
0
    cmCMakePresetsErrors::INVALID_PRESET(value, state);
33
0
    return false;
34
0
  }
35
36
0
  if (value->asString() == "on") {
37
0
    out = PackageResolveMode::Force;
38
0
  } else if (value->asString() == "off") {
39
0
    out = PackageResolveMode::Disable;
40
0
  } else if (value->asString() == "only") {
41
0
    out = PackageResolveMode::OnlyResolve;
42
0
  } else {
43
0
    cmCMakePresetsErrors::INVALID_PRESET(value, state);
44
0
    return false;
45
0
  }
46
47
0
  return true;
48
0
}
49
50
std::function<bool(BuildPreset&, Json::Value const*, cmJSONState*)> const
51
  ResolvePackageReferencesHelper = [](BuildPreset& out,
52
                                      Json::Value const* value,
53
51.5k
                                      cmJSONState* state) -> bool {
54
51.5k
  return PackageResolveModeHelper(out.ResolvePackageReferences, value, state);
55
51.5k
};
56
57
auto const BuildPresetHelper =
58
  cmCMakePresetsGraphInternal::BindDependentPresetFields(
59
    cmCMakePresetsGraphInternal::BindPresetIdentityFields(
60
      JSONHelperBuilder::Object<BuildPreset>(
61
        cmCMakePresetsErrors::INVALID_PRESET_OBJECT, false)))
62
    .Bind("jobs"_s, &BuildPreset::Jobs,
63
          cmCMakePresetsGraphInternal::PresetOptionalUIntHelper, false)
64
    .Bind("targets"_s, &BuildPreset::Targets,
65
          cmCMakePresetsGraphInternal::PresetVectorOneOrMoreStringHelper,
66
          false)
67
    .Bind("configuration"_s, &BuildPreset::Configuration,
68
          cmCMakePresetsGraphInternal::PresetStringHelper, false)
69
    .Bind("cleanFirst"_s, &BuildPreset::CleanFirst,
70
          cmCMakePresetsGraphInternal::PresetOptionalBoolHelper, false)
71
    .Bind("verbose"_s, &BuildPreset::Verbose,
72
          cmCMakePresetsGraphInternal::PresetOptionalBoolHelper, false)
73
    .Bind("nativeToolOptions"_s, &BuildPreset::NativeToolOptions,
74
          cmCMakePresetsGraphInternal::PresetVectorStringHelper, false)
75
    .Bind("resolvePackageReferences"_s, ResolvePackageReferencesHelper, false);
76
}
77
78
namespace cmCMakePresetsGraphInternal {
79
bool BuildPresetsHelper(std::vector<BuildPreset>& out,
80
                        Json::Value const* value, cmJSONState* state)
81
26.6k
{
82
26.6k
  static auto const helper = JSONHelperBuilder::Vector<BuildPreset>(
83
26.6k
    cmCMakePresetsErrors::INVALID_PRESETS, BuildPresetHelper);
84
85
26.6k
  return helper(out, value, state);
86
26.6k
}
87
}