b22e5d0ab7
Ensure that cmStandardIncludes.h is included before any platform header in cmGeneratorExpressionEvaluator.h. That file needs to change as a result of removal of the cmMakefile.h header from cmGeneratorExpressionNode.h, affecting the compilation of cmGeneratorExpressionNode.cxx. On AIX we need to include our own headers first to get large file support macros defined consistently within system headers. The old order in this header worked only because it was always included after other headers.
130 lines
3.6 KiB
C++
130 lines
3.6 KiB
C++
/*============================================================================
|
|
CMake - Cross Platform Makefile Generator
|
|
Copyright 2012 Stephen Kelly <steveire@gmail.com>
|
|
|
|
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 "cmListFileCache.h"
|
|
#include "cmGeneratorExpressionContext.h"
|
|
|
|
#include <vector>
|
|
#include <string>
|
|
|
|
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, size_t 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(size_t length)
|
|
{
|
|
this->Length += length;
|
|
}
|
|
|
|
size_t GetLength()
|
|
{
|
|
return this->Length;
|
|
}
|
|
|
|
private:
|
|
const char *Content;
|
|
size_t Length;
|
|
};
|
|
|
|
//----------------------------------------------------------------------------
|
|
struct GeneratorExpressionContent : public cmGeneratorExpressionEvaluator
|
|
{
|
|
GeneratorExpressionContent(const char *startContent, size_t 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;
|
|
|
|
std::string ProcessArbitraryContent(
|
|
const cmGeneratorExpressionNode *node,
|
|
const std::string &identifier,
|
|
cmGeneratorExpressionContext *context,
|
|
cmGeneratorExpressionDAGChecker *dagChecker,
|
|
std::vector<std::vector<cmGeneratorExpressionEvaluator*> >::const_iterator
|
|
pit) const;
|
|
|
|
private:
|
|
std::vector<cmGeneratorExpressionEvaluator*> IdentifierChildren;
|
|
std::vector<std::vector<cmGeneratorExpressionEvaluator*> > ParamChildren;
|
|
const char *StartContent;
|
|
size_t ContentLength;
|
|
};
|
|
|
|
#endif
|