/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #pragma once #include "cmConfigure.h" // IWYU pragma: keep #include #include class cmGeneratorTarget; class cmLocalGenerator; struct GeneratorExpressionContent; struct cmGeneratorExpressionContext; struct cmGeneratorExpressionDAGChecker; struct cmGeneratorExpressionNode { enum { DynamicParameters = 0, OneOrMoreParameters = -1, TwoOrMoreParameters = -2, ZeroOrMoreParameters = -3, OneOrZeroParameters = -4 }; virtual ~cmGeneratorExpressionNode() = default; virtual bool GeneratesContent() const { return true; } virtual bool RequiresLiteralInput() const { return false; } virtual bool AcceptsArbitraryContentParameter() const { return false; } virtual int NumExpectedParameters() const { return 1; } virtual bool ShouldEvaluateNextParameter(const std::vector&, std::string&) const { return true; } virtual std::string Evaluate( const std::vector& parameters, cmGeneratorExpressionContext* context, const GeneratorExpressionContent* content, cmGeneratorExpressionDAGChecker* dagChecker) const = 0; static std::string EvaluateDependentExpression( std::string const& prop, cmLocalGenerator* lg, cmGeneratorExpressionContext* context, const cmGeneratorTarget* headTarget, cmGeneratorExpressionDAGChecker* dagChecker, const cmGeneratorTarget* currentTarget); static const cmGeneratorExpressionNode* GetNode( const std::string& identifier); }; void reportError(cmGeneratorExpressionContext* context, const std::string& expr, const std::string& result);