diff options
Diffstat (limited to 'Source/cmGeneratorExpression.h')
-rw-r--r-- | Source/cmGeneratorExpression.h | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/Source/cmGeneratorExpression.h b/Source/cmGeneratorExpression.h new file mode 100644 index 000000000..1a9d4c6e9 --- /dev/null +++ b/Source/cmGeneratorExpression.h @@ -0,0 +1,58 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmStandardIncludes.h" + +#include <stack> + +#include <cmsys/RegularExpression.hxx> + +class cmTarget; +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, + bool quiet = false); + + /** Evaluate generator expressions in a string. */ + const char* Process(std::string const& input); + const char* Process(const char* input); + + /** Get set of targets found during evaluations. */ + std::set<cmTarget*> const& GetTargets() const + { return this->Targets; } +private: + cmMakefile* Makefile; + const char* Config; + cmListFileBacktrace const& Backtrace; + bool Quiet; + std::vector<char> Data; + std::stack<size_t> Barriers; + cmsys::RegularExpression TargetInfo; + std::set<cmTarget*> Targets; + bool Evaluate(); + bool Evaluate(const char* expr, std::string& result); + bool EvaluateTargetInfo(std::string& result); +}; |