cmGeneratorExpressionNode.h 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /*============================================================================
  2. CMake - Cross Platform Makefile Generator
  3. Copyright 2012 Stephen Kelly <[email protected]>
  4. Distributed under the OSI-approved BSD License (the "License");
  5. see accompanying file Copyright.txt for details.
  6. This software is distributed WITHOUT ANY WARRANTY; without even the
  7. implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  8. See the License for more information.
  9. ============================================================================*/
  10. #ifndef cmGeneratorExpressionNode_h
  11. #define cmGeneratorExpressionNode_h
  12. #include "cmMakefile.h"
  13. #include "cmGeneratorExpressionEvaluator.h"
  14. #include "cmGeneratorExpressionParser.h"
  15. #include "cmGeneratorExpressionDAGChecker.h"
  16. #include "cmGeneratorExpression.h"
  17. #include "cmLocalGenerator.h"
  18. #include "cmSourceFile.h"
  19. #include <cmsys/String.h>
  20. #include <assert.h>
  21. #include <errno.h>
  22. #include "cmListFileCache.h"
  23. //----------------------------------------------------------------------------
  24. struct cmGeneratorExpressionNode
  25. {
  26. enum {
  27. DynamicParameters = 0,
  28. OneOrMoreParameters = -1,
  29. OneOrZeroParameters = -2
  30. };
  31. virtual ~cmGeneratorExpressionNode() {}
  32. virtual bool GeneratesContent() const { return true; }
  33. virtual bool RequiresLiteralInput() const { return false; }
  34. virtual bool AcceptsArbitraryContentParameter() const
  35. { return false; }
  36. virtual int NumExpectedParameters() const { return 1; }
  37. virtual std::string Evaluate(const std::vector<std::string> &parameters,
  38. cmGeneratorExpressionContext *context,
  39. const GeneratorExpressionContent *content,
  40. cmGeneratorExpressionDAGChecker *dagChecker
  41. ) const = 0;
  42. static std::string EvaluateDependentExpression(
  43. std::string const& prop, cmMakefile *makefile,
  44. cmGeneratorExpressionContext *context,
  45. cmTarget const* headTarget, cmTarget const* currentTarget,
  46. cmGeneratorExpressionDAGChecker *dagChecker);
  47. static const cmGeneratorExpressionNode* GetNode(
  48. const std::string &identifier);
  49. };
  50. //----------------------------------------------------------------------------
  51. void reportError(cmGeneratorExpressionContext *context,
  52. const std::string &expr, const std::string &result);
  53. #endif