91011bd217
Removing the Process() API and removing the parameters from the constructor will allow cmGeneratorExpressions to be cached and evaluated with multiple configs for example, such as when evaluating target properties. This requires the creation of a new compiled representation of cmGeneratorExpression. The cmListFileBacktrace remains in the constructor so that we can record where a particular generator expression appeared in the CMakeLists file.
83 lines
2.6 KiB
C++
83 lines
2.6 KiB
C++
/*============================================================================
|
|
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;
|
|
|
|
struct cmGeneratorExpressionEvaluator;
|
|
|
|
class cmCompiledGeneratorExpression;
|
|
|
|
/** \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. */
|
|
cmGeneratorExpression(cmListFileBacktrace const& backtrace);
|
|
~cmGeneratorExpression();
|
|
|
|
const cmCompiledGeneratorExpression& Parse(std::string const& input);
|
|
const cmCompiledGeneratorExpression& Parse(const char* input);
|
|
|
|
private:
|
|
cmGeneratorExpression(const cmGeneratorExpression &);
|
|
void operator=(const cmGeneratorExpression &);
|
|
|
|
cmListFileBacktrace const& Backtrace;
|
|
cmCompiledGeneratorExpression *CompiledExpression;
|
|
};
|
|
|
|
class cmCompiledGeneratorExpression
|
|
{
|
|
public:
|
|
const char* Evaluate(cmMakefile* mf, const char* config,
|
|
bool quiet = false) const;
|
|
|
|
/** Get set of targets found during evaluations. */
|
|
std::set<cmTarget*> const& GetTargets() const
|
|
{ return this->Targets; }
|
|
|
|
~cmCompiledGeneratorExpression();
|
|
|
|
private:
|
|
cmCompiledGeneratorExpression(cmListFileBacktrace const& backtrace,
|
|
const std::vector<cmGeneratorExpressionEvaluator*> &evaluators,
|
|
const char *input, bool needsParsing);
|
|
|
|
friend class cmGeneratorExpression;
|
|
|
|
cmCompiledGeneratorExpression(const cmCompiledGeneratorExpression &);
|
|
void operator=(const cmCompiledGeneratorExpression &);
|
|
|
|
cmListFileBacktrace const& Backtrace;
|
|
const std::vector<cmGeneratorExpressionEvaluator*> Evaluators;
|
|
const char* const Input;
|
|
const bool NeedsParsing;
|
|
|
|
mutable std::set<cmTarget*> Targets;
|
|
mutable std::string Output;
|
|
};
|