summaryrefslogtreecommitdiff
path: root/Source/cmGeneratorExpression.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmGeneratorExpression.h')
-rw-r--r--Source/cmGeneratorExpression.h58
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);
+};