| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- /*============================================================================
- CMake - Cross Platform Makefile Generator
- Copyright 2012 Stephen Kelly <[email protected]>
- 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.
- ============================================================================*/
- #ifndef cmGeneratorExpressionEvaluator_h
- #define cmGeneratorExpressionEvaluator_h
- #include <vector>
- #include <string>
- #include "cmListFileCache.h"
- class cmTarget;
- class cmGeneratorTarget;
- //----------------------------------------------------------------------------
- struct cmGeneratorExpressionContext
- {
- cmListFileBacktrace Backtrace;
- std::set<cmTarget*> Targets;
- cmMakefile *Makefile;
- const char *Config;
- cmGeneratorTarget *Target;
- bool Quiet;
- bool HadError;
- };
- struct cmGeneratorExpressionDAGChecker;
- struct cmGeneratorExpressionNode;
- //----------------------------------------------------------------------------
- struct cmGeneratorExpressionEvaluator
- {
- cmGeneratorExpressionEvaluator() {}
- virtual ~cmGeneratorExpressionEvaluator() {}
- enum Type
- {
- Text,
- Generator
- };
- virtual Type GetType() const = 0;
- virtual std::string Evaluate(cmGeneratorExpressionContext *context,
- cmGeneratorExpressionDAGChecker *) const = 0;
- private:
- cmGeneratorExpressionEvaluator(const cmGeneratorExpressionEvaluator &);
- void operator=(const cmGeneratorExpressionEvaluator &);
- };
- struct TextContent : public cmGeneratorExpressionEvaluator
- {
- TextContent(const char *start, unsigned int length)
- : Content(start), Length(length)
- {
- }
- std::string Evaluate(cmGeneratorExpressionContext *,
- cmGeneratorExpressionDAGChecker *) const
- {
- return std::string(this->Content, this->Length);
- }
- Type GetType() const
- {
- return cmGeneratorExpressionEvaluator::Text;
- }
- void Extend(unsigned int length)
- {
- this->Length += length;
- }
- unsigned int GetLength()
- {
- return this->Length;
- }
- private:
- const char *Content;
- unsigned int Length;
- };
- //----------------------------------------------------------------------------
- struct GeneratorExpressionContent : public cmGeneratorExpressionEvaluator
- {
- GeneratorExpressionContent(const char *startContent, unsigned int length);
- void SetIdentifier(std::vector<cmGeneratorExpressionEvaluator*> identifier)
- {
- this->IdentifierChildren = identifier;
- }
- void SetParameters(
- std::vector<std::vector<cmGeneratorExpressionEvaluator*> > parameters)
- {
- this->ParamChildren = parameters;
- }
- Type GetType() const
- {
- return cmGeneratorExpressionEvaluator::Generator;
- }
- std::string Evaluate(cmGeneratorExpressionContext *context,
- cmGeneratorExpressionDAGChecker *) const;
- std::string GetOriginalExpression() const;
- ~GeneratorExpressionContent();
- private:
- std::string EvaluateParameters(const cmGeneratorExpressionNode *node,
- const std::string &identifier,
- cmGeneratorExpressionContext *context,
- cmGeneratorExpressionDAGChecker *dagChecker,
- std::vector<std::string> ¶meters) const;
- private:
- std::vector<cmGeneratorExpressionEvaluator*> IdentifierChildren;
- std::vector<std::vector<cmGeneratorExpressionEvaluator*> > ParamChildren;
- const char *StartContent;
- unsigned int ContentLength;
- };
- #endif
|