diff options
Diffstat (limited to 'Source/cmGeneratorExpression.h')
-rw-r--r-- | Source/cmGeneratorExpression.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/Source/cmGeneratorExpression.h b/Source/cmGeneratorExpression.h new file mode 100644 index 0000000..05a697f --- /dev/null +++ b/Source/cmGeneratorExpression.h @@ -0,0 +1,55 @@ +/*========================================================================= + + Program: CMake - Cross-Platform Makefile Generator + Module: $RCSfile$ + Language: C++ + Date: $Date$ + Version: $Revision$ + + Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved. + See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#include "cmStandardIncludes.h" + +#include <stack> + +#include <cmsys/RegularExpression.hxx> + +class cmMakefile; +class cmListFileBacktrace; + +/** \class cmGeneratorExpression + * \brief Evaluate generate-time query expression syntax. + * + * cmGeneratorExpression instances are used by build system generator + * implementations to evaluate the $<> generator expression syntax. + * Generator expressions are evaluated just before the generate step + * writes strings into the build system. They have knowledge of the + * build configuration which is not available at configure time. + */ +class cmGeneratorExpression +{ +public: + /** Construct with an evaluation context and configuration. */ + cmGeneratorExpression(cmMakefile* mf, const char* config, + cmListFileBacktrace const& backtrace); + + /** Evaluate generator expressions in a string. */ + const char* Process(std::string const& input); + const char* Process(const char* input); +private: + cmMakefile* Makefile; + const char* Config; + cmListFileBacktrace const& Backtrace; + std::vector<char> Data; + std::stack<size_t> Barriers; + cmsys::RegularExpression TargetInfo; + bool Evaluate(); + bool Evaluate(const char* expr, std::string& result); + bool EvaluateTargetInfo(std::string& result); +}; |