presets: Add trace options to configure presets

Add JSON schema version 7 to support them.

Fixes: #22543
This commit is contained in:
Artin Alavi
2023-02-06 23:30:21 -08:00
committed by Brad King
parent 4901fdb201
commit 8e579b0228
28 changed files with 455 additions and 46 deletions

View File

@@ -17,12 +17,15 @@
#include "cmCMakePresetsGraphInternal.h"
#include "cmJSONHelpers.h"
#include "cmJSONState.h"
#include "cmStateTypes.h"
namespace {
using CacheVariable = cmCMakePresetsGraph::CacheVariable;
using ConfigurePreset = cmCMakePresetsGraph::ConfigurePreset;
using ArchToolsetStrategy = cmCMakePresetsGraph::ArchToolsetStrategy;
using JSONHelperBuilder = cmJSONHelperBuilder;
using TraceEnableMode = cmCMakePresetsGraph::TraceEnableMode;
using TraceOutputFormat = cmTraceEnums::TraceOutputFormat;
bool ArchToolsetStrategyHelper(cm::optional<ArchToolsetStrategy>& out,
const Json::Value* value, cmJSONState* state)
@@ -91,6 +94,58 @@ auto const ArchitectureHelper = ArchToolsetHelper(
auto const ToolsetHelper = ArchToolsetHelper(
&ConfigurePreset::Toolset, &ConfigurePreset::ToolsetStrategy);
bool TraceEnableModeHelper(cm::optional<TraceEnableMode>& out,
const Json::Value* value, cmJSONState* state)
{
if (!value) {
out = cm::nullopt;
return true;
}
if (!value->isString()) {
cmCMakePresetErrors::INVALID_PRESET(value, state);
return false;
}
if (value->asString() == "on") {
out = TraceEnableMode::Default;
} else if (value->asString() == "off") {
out = TraceEnableMode::Disable;
} else if (value->asString() == "expand") {
out = TraceEnableMode::Expand;
} else {
cmCMakePresetErrors::INVALID_PRESET(value, state);
return false;
}
return true;
}
bool TraceOutputFormatHelper(cm::optional<TraceOutputFormat>& out,
const Json::Value* value, cmJSONState* state)
{
if (!value) {
out = cm::nullopt;
return true;
}
if (!value->isString()) {
cmCMakePresetErrors::INVALID_PRESET(value, state);
return false;
}
if (value->asString() == "human") {
out = TraceOutputFormat::Human;
} else if (value->asString() == "json-v1") {
out = TraceOutputFormat::JSONv1;
} else {
cmCMakePresetErrors::INVALID_PRESET(value, state);
return false;
}
return true;
}
auto const VariableStringHelper = JSONHelperBuilder::String();
bool VariableValueHelper(std::string& out, const Json::Value* value,
@@ -180,6 +235,18 @@ auto const PresetDebugHelper =
.Bind("find"_s, &ConfigurePreset::DebugFind,
cmCMakePresetsGraphInternal::PresetOptionalBoolHelper, false);
auto const PresetTraceHelper =
JSONHelperBuilder::Object<ConfigurePreset>(
cmCMakePresetErrors::INVALID_PRESET_OBJECT, false)
.Bind("mode"_s, &ConfigurePreset::TraceMode, TraceEnableModeHelper, false)
.Bind("format"_s, &ConfigurePreset::TraceFormat, TraceOutputFormatHelper,
false)
.Bind("source"_s, &ConfigurePreset::TraceSource,
cmCMakePresetsGraphInternal::PresetVectorOneOrMoreStringHelper,
false)
.Bind("redirect"_s, &ConfigurePreset::TraceRedirect,
cmCMakePresetsGraphInternal::PresetStringHelper, false);
auto const ConfigurePresetHelper =
JSONHelperBuilder::Object<ConfigurePreset>(
cmCMakePresetErrors::INVALID_PRESET_OBJECT, false)
@@ -217,6 +284,7 @@ auto const ConfigurePresetHelper =
.Bind("warnings"_s, PresetWarningsHelper, false)
.Bind("errors"_s, PresetErrorsHelper, false)
.Bind("debug"_s, PresetDebugHelper, false)
.Bind("trace"_s, PresetTraceHelper, false)
.Bind("condition"_s, &ConfigurePreset::ConditionEvaluator,
cmCMakePresetsGraphInternal::PresetConditionHelper, false);
}