| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
- file Copyright.txt or https://cmake.org/licensing for details. */
- #pragma once
- #include <cstddef>
- #include <memory>
- #include <string>
- #include <vector>
- #include <cm3p/json/value.h>
- #include "cmCMakePresetsGraph.h"
- #include "cmJSONHelpers.h"
- #define CHECK_OK(expr) \
- do { \
- auto _result = expr; \
- if (_result != true) \
- return _result; \
- } while (false)
- namespace cmCMakePresetsGraphInternal {
- enum class ExpandMacroResult
- {
- Ok,
- Ignore,
- Error,
- };
- using MacroExpander = std::function<ExpandMacroResult(
- const std::string&, const std::string&, std::string&, int version)>;
- ExpandMacroResult ExpandMacros(
- std::string& out, const std::vector<MacroExpander>& macroExpanders,
- int version);
- ExpandMacroResult ExpandMacro(std::string& out,
- const std::string& macroNamespace,
- const std::string& macroName,
- const std::vector<MacroExpander>& macroExpanders,
- int version);
- }
- class cmCMakePresetsGraph::Condition
- {
- public:
- virtual ~Condition() = default;
- virtual bool Evaluate(
- const std::vector<cmCMakePresetsGraphInternal::MacroExpander>& expanders,
- int version, cm::optional<bool>& out) const = 0;
- virtual bool IsNull() const { return false; }
- };
- namespace cmCMakePresetsGraphInternal {
- class NullCondition : public cmCMakePresetsGraph::Condition
- {
- bool Evaluate(const std::vector<MacroExpander>& /*expanders*/,
- int /*version*/, cm::optional<bool>& out) const override
- {
- out = true;
- return true;
- }
- bool IsNull() const override { return true; }
- };
- class ConstCondition : public cmCMakePresetsGraph::Condition
- {
- public:
- bool Evaluate(const std::vector<MacroExpander>& /*expanders*/,
- int /*version*/, cm::optional<bool>& out) const override
- {
- out = this->Value;
- return true;
- }
- bool Value;
- };
- class EqualsCondition : public cmCMakePresetsGraph::Condition
- {
- public:
- bool Evaluate(const std::vector<MacroExpander>& expanders, int version,
- cm::optional<bool>& out) const override;
- std::string Lhs;
- std::string Rhs;
- };
- class InListCondition : public cmCMakePresetsGraph::Condition
- {
- public:
- bool Evaluate(const std::vector<MacroExpander>& expanders, int version,
- cm::optional<bool>& out) const override;
- std::string String;
- std::vector<std::string> List;
- };
- class MatchesCondition : public cmCMakePresetsGraph::Condition
- {
- public:
- bool Evaluate(const std::vector<MacroExpander>& expanders, int version,
- cm::optional<bool>& out) const override;
- std::string String;
- std::string Regex;
- };
- class AnyAllOfCondition : public cmCMakePresetsGraph::Condition
- {
- public:
- bool Evaluate(const std::vector<MacroExpander>& expanders, int version,
- cm::optional<bool>& out) const override;
- std::vector<std::unique_ptr<Condition>> Conditions;
- bool StopValue;
- };
- class NotCondition : public cmCMakePresetsGraph::Condition
- {
- public:
- bool Evaluate(const std::vector<MacroExpander>& expanders, int version,
- cm::optional<bool>& out) const override;
- std::unique_ptr<Condition> SubCondition;
- };
- bool PresetStringHelper(std::string& out, const Json::Value* value,
- cmJSONState* state);
- bool PresetNameHelper(std::string& out, const Json::Value* value,
- cmJSONState* state);
- bool PresetVectorStringHelper(std::vector<std::string>& out,
- const Json::Value* value, cmJSONState* state);
- bool PresetBoolHelper(bool& out, const Json::Value* value, cmJSONState* state);
- bool PresetOptionalBoolHelper(cm::optional<bool>& out,
- const Json::Value* value, cmJSONState* state);
- bool PresetIntHelper(int& out, const Json::Value* value, cmJSONState* state);
- bool PresetOptionalIntHelper(cm::optional<int>& out, const Json::Value* value,
- cmJSONState* state);
- bool PresetVectorIntHelper(std::vector<int>& out, const Json::Value* value,
- cmJSONState* state);
- bool ConfigurePresetsHelper(
- std::vector<cmCMakePresetsGraph::ConfigurePreset>& out,
- const Json::Value* value, cmJSONState* state);
- bool BuildPresetsHelper(std::vector<cmCMakePresetsGraph::BuildPreset>& out,
- const Json::Value* value, cmJSONState* state);
- bool TestPresetsHelper(std::vector<cmCMakePresetsGraph::TestPreset>& out,
- const Json::Value* value, cmJSONState* state);
- bool PackagePresetsHelper(std::vector<cmCMakePresetsGraph::PackagePreset>& out,
- const Json::Value* value, cmJSONState* state);
- bool WorkflowPresetsHelper(
- std::vector<cmCMakePresetsGraph::WorkflowPreset>& out,
- const Json::Value* value, cmJSONState* state);
- cmJSONHelper<std::nullptr_t> VendorHelper(const ErrorGenerator& error);
- bool PresetConditionHelper(
- std::shared_ptr<cmCMakePresetsGraph::Condition>& out,
- const Json::Value* value, cmJSONState* state);
- bool PresetVectorOneOrMoreStringHelper(std::vector<std::string>& out,
- const Json::Value* value,
- cmJSONState* state);
- bool EnvironmentMapHelper(
- std::map<std::string, cm::optional<std::string>>& out,
- const Json::Value* value, cmJSONState* state);
- cmJSONHelper<std::nullptr_t> SchemaHelper();
- }
|