cmGeneratorExpressionNode.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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 "cmGeneratorExpressionEvaluator.h"
  13. #include "cmGeneratorExpressionParser.h"
  14. #include "cmGeneratorExpressionDAGChecker.h"
  15. #include "cmGeneratorExpression.h"
  16. #include "cmLocalGenerator.h"
  17. #include "cmSourceFile.h"
  18. #include <cmsys/String.h>
  19. #include <assert.h>
  20. #include <errno.h>
  21. #include "cmListFileCache.h"
  22. //----------------------------------------------------------------------------
  23. struct cmGeneratorExpressionNode
  24. {
  25. enum {
  26. DynamicParameters = 0,
  27. OneOrMoreParameters = -1,
  28. OneOrZeroParameters = -2
  29. };
  30. virtual ~cmGeneratorExpressionNode() {}
  31. virtual bool GeneratesContent() const { return true; }
  32. virtual bool RequiresLiteralInput() const { return false; }
  33. virtual bool AcceptsArbitraryContentParameter() const
  34. { return false; }
  35. virtual int NumExpectedParameters() const { return 1; }
  36. virtual std::string Evaluate(const std::vector<std::string> &parameters,
  37. cmGeneratorExpressionContext *context,
  38. const GeneratorExpressionContent *content,
  39. cmGeneratorExpressionDAGChecker *dagChecker
  40. ) const = 0;
  41. static std::string EvaluateDependentExpression(
  42. std::string const& prop, cmLocalGenerator *lg,
  43. cmGeneratorExpressionContext *context,
  44. const cmGeneratorTarget* headTarget,
  45. const cmGeneratorTarget* 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