1
0

cmGeneratorExpressionNode.h 1.7 KB

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