diff options
author | Kyle Edwards <kyle.edwards@kitware.com> | 2021-03-31 14:24:24 (GMT) |
---|---|---|
committer | Kyle Edwards <kyle.edwards@kitware.com> | 2021-03-31 14:24:24 (GMT) |
commit | 5ac8b923f503dcd02c47aa920afc747978bb07ab (patch) | |
tree | 197103cfb0ac32c2be731f17240e16b74bfe4885 /Source/cmCMakePresetsFileReadJSON.cxx | |
parent | bd4ebf1e58d784c94953e14e0e817ff7617dc729 (diff) | |
download | CMake-5ac8b923f503dcd02c47aa920afc747978bb07ab.zip CMake-5ac8b923f503dcd02c47aa920afc747978bb07ab.tar.gz CMake-5ac8b923f503dcd02c47aa920afc747978bb07ab.tar.bz2 |
CMakePresets.json: Add matches condition
Diffstat (limited to 'Source/cmCMakePresetsFileReadJSON.cxx')
-rw-r--r-- | Source/cmCMakePresetsFileReadJSON.cxx | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/Source/cmCMakePresetsFileReadJSON.cxx b/Source/cmCMakePresetsFileReadJSON.cxx index e26e7b4..403fac6 100644 --- a/Source/cmCMakePresetsFileReadJSON.cxx +++ b/Source/cmCMakePresetsFileReadJSON.cxx @@ -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>(); |