mirror of
https://github.com/reactos/CMake.git
synced 2024-11-28 14:01:21 +00:00
daa0f6f98d
Teach the CMake language parser to recognize Lua-style "long bracket" arguments. These start with two '[' separated by zero or more '=' characters e.g. "[[" or "[=[" or "[==[". They end with two ']' separated by the same number of '=' as the opening bracket. There is no nesting of brackets of the same level (number of '='). No escapes, variable expansion, or other processing is performed on the content between such brackets so they always represent exactly one argument. Also teach CMake to parse and ignore "long comment" syntax. A long comment starts with "#" immediately followed by an opening long bracket. It ends at the matching close long bracket. Teach the RunCMake.Syntax test to cover long bracket and long comment cases.
95 lines
2.4 KiB
C++
95 lines
2.4 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.
|
|
============================================================================*/
|
|
#ifndef cmListFileCache_h
|
|
#define cmListFileCache_h
|
|
|
|
#include "cmStandardIncludes.h"
|
|
|
|
/** \class cmListFileCache
|
|
* \brief A class to cache list file contents.
|
|
*
|
|
* cmListFileCache is a class used to cache the contents of parsed
|
|
* cmake list files.
|
|
*/
|
|
|
|
class cmMakefile;
|
|
|
|
struct cmListFileArgument
|
|
{
|
|
enum Delimiter
|
|
{
|
|
Unquoted,
|
|
Quoted,
|
|
Bracket
|
|
};
|
|
cmListFileArgument(): Value(), Delim(Unquoted), FilePath(0), Line(0) {}
|
|
cmListFileArgument(const cmListFileArgument& r):
|
|
Value(r.Value), Delim(r.Delim), FilePath(r.FilePath), Line(r.Line) {}
|
|
cmListFileArgument(const std::string& v, Delimiter d, const char* file,
|
|
long line): Value(v), Delim(d),
|
|
FilePath(file), Line(line) {}
|
|
bool operator == (const cmListFileArgument& r) const
|
|
{
|
|
return (this->Value == r.Value) && (this->Delim == r.Delim);
|
|
}
|
|
bool operator != (const cmListFileArgument& r) const
|
|
{
|
|
return !(*this == r);
|
|
}
|
|
std::string Value;
|
|
Delimiter Delim;
|
|
const char* FilePath;
|
|
long Line;
|
|
};
|
|
|
|
struct cmListFileContext
|
|
{
|
|
std::string Name;
|
|
std::string FilePath;
|
|
long Line;
|
|
cmListFileContext(): Name(), FilePath(), Line(0) {}
|
|
};
|
|
|
|
std::ostream& operator<<(std::ostream&, cmListFileContext const&);
|
|
|
|
struct cmListFileFunction: public cmListFileContext
|
|
{
|
|
std::vector<cmListFileArgument> Arguments;
|
|
};
|
|
|
|
class cmListFileBacktrace: public std::vector<cmListFileContext> {};
|
|
|
|
struct cmListFile
|
|
{
|
|
cmListFile()
|
|
:ModifiedTime(0)
|
|
{
|
|
}
|
|
bool ParseFile(const char* path,
|
|
bool topLevel,
|
|
cmMakefile *mf);
|
|
|
|
long int ModifiedTime;
|
|
std::vector<cmListFileFunction> Functions;
|
|
};
|
|
|
|
struct cmValueWithOrigin {
|
|
cmValueWithOrigin(const std::string &value,
|
|
const cmListFileBacktrace &bt)
|
|
: Value(value), Backtrace(bt)
|
|
{}
|
|
std::string Value;
|
|
cmListFileBacktrace Backtrace;
|
|
};
|
|
|
|
#endif
|