CMakePresets.json: Add matches condition

This commit is contained in:
Kyle Edwards
2021-03-31 10:24:24 -04:00
parent bd4ebf1e58
commit 5ac8b923f5
11 changed files with 194 additions and 0 deletions

View File

@@ -93,6 +93,16 @@ auto const InListConditionHelper =
.Bind("list"_s, &cmCMakePresetsFileInternal::InListCondition::List,
ConditionStringListHelper, true);
auto const MatchesConditionHelper =
cmJSONObjectHelper<cmCMakePresetsFileInternal::MatchesCondition,
ReadFileResult>(ReadFileResult::READ_OK,
ReadFileResult::INVALID_CONDITION, false)
.Bind<std::string>("type"_s, nullptr, ConditionStringHelper, true)
.Bind("string"_s, &cmCMakePresetsFileInternal::MatchesCondition::String,
ConditionStringHelper, true)
.Bind("regex"_s, &cmCMakePresetsFileInternal::MatchesCondition::Regex,
ConditionStringHelper, true);
ReadFileResult SubConditionHelper(
std::unique_ptr<cmCMakePresetsFile::Condition>& out,
const Json::Value* value);
@@ -177,6 +187,16 @@ ReadFileResult ConditionHelper(
return ReadFileResult::READ_OK;
}
if (type == "matches" || type == "notMatches") {
auto c = cm::make_unique<cmCMakePresetsFileInternal::MatchesCondition>();
CHECK_OK(MatchesConditionHelper(*c, value));
out = std::move(c);
if (type == "notMatches") {
out = InvertCondition(std::move(out));
}
return ReadFileResult::READ_OK;
}
if (type == "anyOf" || type == "allOf") {
auto c =
cm::make_unique<cmCMakePresetsFileInternal::AnyAllOfCondition>();