resolve cyclic dependency with zstd
[platform/upstream/cmake.git] / Source / cmGeneratorExpressionNode.h
1 /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
2    file Copyright.txt or https://cmake.org/licensing for details.  */
3 #pragma once
4
5 #include "cmConfigure.h" // IWYU pragma: keep
6
7 #include <string>
8 #include <vector>
9
10 class cmGeneratorTarget;
11 class cmLocalGenerator;
12 struct GeneratorExpressionContent;
13 struct cmGeneratorExpressionContext;
14 struct cmGeneratorExpressionDAGChecker;
15
16 struct cmGeneratorExpressionNode
17 {
18   enum
19   {
20     DynamicParameters = 0,
21     OneOrMoreParameters = -1,
22     TwoOrMoreParameters = -2,
23     ZeroOrMoreParameters = -3,
24     OneOrZeroParameters = -4
25   };
26   virtual ~cmGeneratorExpressionNode() = default;
27
28   virtual bool GeneratesContent() const { return true; }
29
30   virtual bool RequiresLiteralInput() const { return false; }
31
32   virtual bool AcceptsArbitraryContentParameter() const { return false; }
33
34   virtual int NumExpectedParameters() const { return 1; }
35
36   virtual std::string Evaluate(
37     const std::vector<std::string>& parameters,
38     cmGeneratorExpressionContext* context,
39     const GeneratorExpressionContent* content,
40     cmGeneratorExpressionDAGChecker* dagChecker) const = 0;
41
42   static std::string EvaluateDependentExpression(
43     std::string const& prop, cmLocalGenerator* lg,
44     cmGeneratorExpressionContext* context, const cmGeneratorTarget* headTarget,
45     cmGeneratorExpressionDAGChecker* dagChecker,
46     const cmGeneratorTarget* currentTarget);
47
48   static const cmGeneratorExpressionNode* GetNode(
49     const std::string& identifier);
50 };
51
52 void reportError(cmGeneratorExpressionContext* context,
53                  const std::string& expr, const std::string& result);