Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qmakeparser.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4#ifndef QMAKEPARSER_H
5#define QMAKEPARSER_H
6
7#include "qmake_global.h"
8#include "qmakevfs.h"
9#include "proitems.h"
10
11#include <qhash.h>
12#include <qstack.h>
13#ifdef PROPARSER_THREAD_SAFE
14# include <qmutex.h>
15# include <qwaitcondition.h>
16#endif
17
20{
21public:
22 enum {
23 CategoryMask = 0xf00,
24 InfoMessage = 0x100,
26 ErrorMessage = 0x300,
27
28 SourceMask = 0xf0,
30
31 CodeMask = 0xf,
34
37
40 };
41 virtual void message(int type, const QString &msg,
42 const QString &fileName = QString(), int lineNo = 0) = 0;
43};
44
45class ProFileCache;
46class QMakeVfs;
47
49{
50public:
51 // Call this from a concurrency-free context
52 static void initialize();
53
54 enum ParseFlag {
58#ifdef PROEVALUATOR_DUAL_VFS
60#else
62#endif
63 };
64 Q_DECLARE_FLAGS(ParseFlags, ParseFlag)
65
67
69 // fileName is expected to be absolute and cleanPath()ed.
70 ProFile *parsedProFile(const QString &fileName, ParseFlags flags = ParseDefault);
71 ProFile *parsedProBlock(QStringView contents, int id, const QString &name, int line = 0,
72 SubGrammar grammar = FullGrammar);
73
74 void discardFileFromCache(int id);
75
76#ifdef PROPARSER_DEBUG
77 static QString formatProBlock(const QString &block);
78#endif
79
80private:
81 enum ScopeNesting {
82 NestNone = 0,
83 NestLoop = 1,
84 NestFunction = 2
85 };
86
87 struct BlockScope {
88 BlockScope() : start(nullptr), braceLevel(0), special(false), inBranch(false), nest(NestNone) {}
89 ushort *start; // Where this block started; store length here
90 int braceLevel; // Nesting of braces in scope
91 bool special; // Single-line conditionals inside loops, etc. cannot have else branches
92 bool inBranch; // The 'else' branch of the previous TokBranch is still open
93 uchar nest; // Into what control structures we are nested
94 };
95
96 enum ScopeState {
97 StNew, // Fresh scope
98 StCtrl, // Control statement (for or else) met on current line
99 StCond // Conditionals met on current line
100 };
101
102 enum Context { CtxTest, CtxValue, CtxPureValue, CtxArgs };
103 struct ParseCtx {
104 int parens; // Nesting of non-functional parentheses
105 int argc; // Number of arguments in current function call
106 int wordCount; // Number of words in current expression
107 Context context;
108 ushort quote; // Enclosing quote type
109 ushort terminator; // '}' if replace function call is braced, ':' if test function
110 };
111
112 bool readFile(int id, QMakeParser::ParseFlags flags, QString *contents);
113 void read(ProFile *pro, QStringView content, int line, SubGrammar grammar);
114
115 ALWAYS_INLINE void putTok(ushort *&tokPtr, ushort tok);
116 ALWAYS_INLINE void putBlockLen(ushort *&tokPtr, uint len);
117 ALWAYS_INLINE void putBlock(ushort *&tokPtr, const ushort *buf, uint len);
118 void putHashStr(ushort *&pTokPtr, const ushort *buf, uint len);
119 void finalizeHashStr(ushort *buf, uint len);
120 void putLineMarker(ushort *&tokPtr);
121 ALWAYS_INLINE bool resolveVariable(ushort *xprPtr, int tlen, int needSep, ushort **ptr,
122 ushort **buf, QString *xprBuff,
123 ushort **tokPtr, QString *tokBuff,
124 const ushort *cur, QStringView in);
125 void finalizeCond(ushort *&tokPtr, ushort *uc, ushort *ptr, int wordCount);
126 void finalizeCall(ushort *&tokPtr, ushort *uc, ushort *ptr, int argc);
127 void warnOperator(const char *msg);
128 bool failOperator(const char *msg);
129 bool acceptColon(const char *msg);
130 void putOperator(ushort *&tokPtr);
131 void finalizeTest(ushort *&tokPtr);
132 void bogusTest(ushort *&tokPtr, const QString &msg);
133 void enterScope(ushort *&tokPtr, bool special, ScopeState state);
134 void leaveScope(ushort *&tokPtr);
135 void flushCond(ushort *&tokPtr);
136 void flushScopes(ushort *&tokPtr);
137
138 void message(int type, const QString &msg) const;
139 void parseError(const QString &msg) const
140 {
142 m_proFile->setOk(false);
143 }
144 void languageWarning(const QString &msg) const
146 void deprecationWarning(const QString &msg) const
148
149 // Current location
150 ProFile *m_proFile;
151 int m_lineNo;
152
153 QStack<BlockScope> m_blockstack;
154 ScopeState m_state;
155 int m_markLine; // Put marker for this line
156 bool m_inError; // Current line had a parsing error; suppress followup error messages
157 bool m_canElse; // Conditionals met on previous line, but no scope was opened
158 int m_invert; // Pending conditional is negated
159 enum { NoOperator, AndOperator, OrOperator } m_operator; // Pending conditional is ORed/ANDed
160
161 QString m_tmp; // Temporary for efficient toQString
162
163 ProFileCache *m_cache;
164 QMakeParserHandler *m_handler;
165 QMakeVfs *m_vfs;
166
167 // This doesn't help gcc 3.3 ...
168 template<typename T> friend class QTypeInfo;
169
170 friend class ProFileCache;
171};
172
173Q_DECLARE_OPERATORS_FOR_FLAGS(QMakeParser::ParseFlags)
174
176{
177public:
178 ProFileCache();
179 ~ProFileCache();
180
181 void discardFile(int id);
182 void discardFile(const QString &fileName, QMakeVfs *vfs);
183 void discardFiles(const QString &prefix, QMakeVfs *vfs);
184
185private:
186 struct Entry {
187 ProFile *pro;
188#ifdef PROPARSER_THREAD_SAFE
189 struct Locker {
190 Locker() : waiters(0), done(false) {}
191 QWaitCondition cond;
192 int waiters;
193 bool done;
194 };
195 Locker *locker;
196#endif
197 };
198
199 QHash<int, Entry> parsed_files;
200#ifdef PROPARSER_THREAD_SAFE
202#endif
203
204 friend class QMakeParser;
205};
206
207#if !defined(__GNUC__) || __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 3)
210#endif
211
212QT_END_NAMESPACE
213
214#endif // PROFILEPARSER_H
int main(int argc, char *argv[])
[2]
Definition buffer.cpp:77
void message(int type, const QString &msg, const QString &fileName, int lineNo) override
Definition main.cpp:100
void fileMessage(int type, const QString &msg) override
Definition main.cpp:106
void doneWithEval(ProFile *) override
Definition main.cpp:115
void aboutToEval(ProFile *, ProFile *, EvalFileType) override
Definition main.cpp:114
bool verbose
Definition main.cpp:117
void discardFile(int id)
void discardFile(const QString &fileName, QMakeVfs *vfs)
void discardFiles(const QString &prefix, QMakeVfs *vfs)
ProFileEvaluator::TemplateType templateType() const
ProFileEvaluator(ProFileGlobals *option, QMakeParser *parser, QMakeVfs *vfs, QMakeHandler *handler)
void setExtraConfigs(const QStringList &extraConfigs)
void setExtraVars(const QHash< QString, QStringList > &extraVars)
QStringList values(const QString &variableName, const ProFile *pro) const
QString value(const QString &variableName) const
bool contains(const QString &variableName) const
QString resolvedMkSpec() const
static void initialize()
bool accept(ProFile *pro, QMakeEvaluator::LoadFlags flags=QMakeEvaluator::LoadAll)
QStringList absoluteFileValues(const QString &variable, const QString &baseDirectory, const QStringList &searchDirs, const ProFile *pro) const
void setOutputDir(const QString &dir)
QStringList absolutePathValues(const QString &variable, const QString &baseDirectory) const
QStringList values(const QString &variableName) const
QString propertyValue(const QString &val) const
bool loadNamedSpec(const QString &specDir, bool hostSpec)
void deref()
Definition proitems.h:420
const ushort * tokPtrEnd() const
Definition proitems.h:417
QString fileName() const
Definition proitems.h:412
ProFile(int id, const QString &fileName)
Definition proitems.cpp:428
bool isHostBuild() const
Definition proitems.h:425
const ushort * tokPtr() const
Definition proitems.h:416
QString directoryName() const
Definition proitems.h:413
ProString getStr(const ushort *&tPtr)
Definition proitems.cpp:444
QString * itemsRef()
Definition proitems.h:415
const QString & items() const
Definition proitems.h:414
void ref()
Definition proitems.h:419
ProKey getHashStr(const ushort *&tPtr)
Definition proitems.cpp:453
void setHostBuild(bool host_build)
Definition proitems.h:426
void setOk(bool ok)
Definition proitems.h:423
int id() const
Definition proitems.h:411
bool isOk() const
Definition proitems.h:422
const ushort * tokPtr() const
Definition proitems.h:472
ProFunctionDef(ProFunctionDef &&other) noexcept
Definition proitems.h:445
ProFunctionDef(ProFile *pro, int offset)
Definition proitems.h:443
ProFile * pro() const
Definition proitems.h:471
void swap(ProFunctionDef &other) noexcept
Definition proitems.h:465
ProFunctionDef & operator=(ProFunctionDef &&other) noexcept
Definition proitems.h:459
ProFunctionDef(const ProFunctionDef &o)
Definition proitems.h:444
ProFunctionDef & operator=(const ProFunctionDef &o)
Definition proitems.h:448
ProItemRefCount(int cnt=0)
Definition proitems.h:24
ProItemRefCount & operator=(int value)
Definition proitems.h:27
void setValue(const QString &str)
Definition proitems.cpp:122
ProKey(const QString &str, int off, int len, uint hash)
Definition proitems.cpp:117
ALWAYS_INLINE const ProString & toString() const
Definition proitems.h:195
ProKey(const QStringBuilder< A, B > &str)
Definition proitems.h:176
ProKey(const QString &str)
Definition proitems.cpp:102
ALWAYS_INLINE ProKey()
Definition proitems.h:173
ALWAYS_INLINE ProString & toString()
Definition proitems.h:194
PROITEM_EXPLICIT ProKey(const char *str)
Definition proitems.cpp:107
ProKey(const QString &str, int off, int len)
Definition proitems.cpp:112
void removeAll(const ProString &str)
Definition proitems.cpp:344
bool contains(const QString &str, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.h:321
QString join(QChar sep) const
Definition proitems.cpp:339
void removeAt(int idx)
Definition proitems.h:315
QString join(const ProString &sep) const
Definition proitems.cpp:329
bool contains(const char *str, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.cpp:420
void removeAll(const char *str)
Definition proitems.cpp:351
void insertUnique(const ProStringList &value)
Definition proitems.cpp:381
QString join(const QStringBuilder< A, B > &str)
Definition proitems.h:308
QString join(const QString &sep) const
Definition proitems.cpp:334
int length() const
Definition proitems.h:302
void removeEmpty()
Definition proitems.cpp:368
bool contains(QStringView str, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.cpp:412
void removeEach(const ProStringList &value)
Definition proitems.cpp:358
ProStringList(const ProString &str)
Definition proitems.h:295
ProStringList(const QStringList &list)
Definition proitems.cpp:388
void removeDuplicates()
Definition proitems.cpp:375
bool contains(const ProString &str, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.cpp:404
QStringList toQStringList() const
Definition proitems.cpp:395
ProStringRoUser(const ProString &ps, QString &rs)
Definition proitems.h:253
ProStringRoUser(QString &rs)
Definition proitems.h:249
QString * m_rs
Definition proitems.h:265
QString & str()
Definition proitems.h:262
QString & set(const ProString &ps)
Definition proitems.h:261
ProStringRwUser(QString &rs)
Definition proitems.h:274
ProString extract(const QString &s) const
Definition proitems.h:279
QString & set(const ProString &ps)
Definition proitems.h:278
ProStringRwUser(const ProString &ps, QString &rs)
Definition proitems.h:276
ProString extract(const QString &s, const ProStringRwUser &other) const
Definition proitems.h:281
ProString & operator+=(const QLatin1String other)
Definition proitems.h:78
ProString & setSource(const ProString &other)
Definition proitems.h:61
QString & toQString(QString &tmp) const
Definition proitems.cpp:133
ProString & operator=(const ProString &)=default
bool startsWith(const ProString &sub, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.h:108
ALWAYS_INLINE const ProKey & toKey() const
Definition proitems.h:139
bool startsWith(QChar c, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.h:111
friend size_t qHash(const ProString &str)
Definition proitems.cpp:95
int indexOf(QChar c, int from=0, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.h:122
bool isEmpty() const
Definition proitems.h:96
bool isNull() const
Definition proitems.h:95
bool contains(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.h:126
ProString & append(QChar other)
Definition proitems.cpp:173
ProString & operator=(const QStringBuilder< A, B > &str)
Definition proitems.h:49
QByteArray toLatin1() const
Definition proitems.h:144
bool operator<(const ProString &other) const
Definition proitems.h:94
ProString mid(int off, int len=-1) const
Definition proitems.cpp:268
bool operator==(const ProString &other) const
Definition proitems.h:85
int length() const
Definition proitems.h:97
int lastIndexOf(QChar c, int from=-1, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.h:125
QString toQString() const
Definition proitems.cpp:128
ProString(const QString &str)
Definition proitems.cpp:48
bool operator!=(const QString &other) const
Definition proitems.h:91
bool endsWith(const QStringBuilder< A, B > &str)
Definition proitems.h:118
ProString & append(const QLatin1String other)
Definition proitems.cpp:156
ALWAYS_INLINE QStringView toQStringView() const
Definition proitems.h:136
int toInt(bool *ok=nullptr, int base=10) const
Definition proitems.h:130
int indexOf(const QString &s, int from=0, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.h:120
void setValue(const QString &str)
Definition proitems.cpp:85
int size() const
Definition proitems.h:98
bool operator==(const char *other) const
Definition proitems.h:89
int compare(const QString &sub, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.h:106
ProString(const QString &str, int offset, int length)
Definition proitems.cpp:80
ProString & operator+=(QChar other)
Definition proitems.h:80
void clear()
Definition proitems.h:60
size_t hash() const
Definition proitems.h:133
ProString & operator+=(const ProString &other)
Definition proitems.h:74
int compare(const char *sub, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.h:107
bool operator!=(QLatin1String other) const
Definition proitems.h:92
int compare(const ProString &sub, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.h:105
ProString right(int len) const
Definition proitems.h:103
static size_t hash(const QChar *p, int n)
Definition proitems.cpp:15
ProString & prepend(const ProString &other)
Definition proitems.cpp:139
void chop(int n)
Definition proitems.h:82
ALWAYS_INLINE ProKey & toKey()
Definition proitems.h:138
int indexOf(const char *s, int from=0, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.h:121
qlonglong toLongLong(bool *ok=nullptr, int base=10) const
Definition proitems.h:129
ProString & append(const char *other)
Definition proitems.h:71
PROITEM_EXPLICIT ProString(QStringView str)
Definition proitems.cpp:53
int lastIndexOf(const QString &s, int from=-1, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.h:123
bool endsWith(const QString &sub, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.h:115
bool operator!=(const char *other) const
Definition proitems.h:93
bool contains(QChar c, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.h:128
const QChar * constData() const
Definition proitems.h:100
bool operator==(const QString &other) const
Definition proitems.h:86
int sourceFile() const
Definition proitems.h:63
ProString(const QStringBuilder< A, B > &str)
Definition proitems.h:55
bool startsWith(const QStringBuilder< A, B > &str)
Definition proitems.h:113
void chopFront(int n)
Definition proitems.h:83
bool startsWith(const char *sub, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.h:110
int lastIndexOf(const char *s, int from=-1, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.h:124
friend QString operator+(const ProString &one, const ProString &two)
Definition proitems.cpp:251
ProString & operator+=(const QString &other)
Definition proitems.h:75
ProString trimmed() const
Definition proitems.cpp:280
ProString & operator+=(const char *other)
Definition proitems.h:79
bool endsWith(const char *sub, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.h:116
QChar at(int i) const
Definition proitems.h:99
ProString left(int len) const
Definition proitems.h:102
ProString & append(const ProString &other, bool *pending=nullptr)
Definition proitems.cpp:189
bool endsWith(QChar c, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.h:119
ProString & append(const QString &other)
Definition proitems.h:67
ProString & append(const QStringBuilder< A, B > &other)
Definition proitems.h:69
bool contains(const char *s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.h:127
bool operator!=(const ProString &other) const
Definition proitems.h:90
ProString & operator+=(const QStringBuilder< A, B > &other)
Definition proitems.h:77
PROITEM_EXPLICIT ProString(const char *str)
Definition proitems.cpp:64
bool operator==(QStringView other) const
Definition proitems.h:87
bool endsWith(const ProString &sub, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.h:114
ProString & setSource(int id)
Definition proitems.h:62
ProString & append(const ProStringList &other, bool *pending=nullptr, bool skipEmpty1st=false)
Definition proitems.cpp:214
bool startsWith(const QString &sub, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition proitems.h:109
short toShort(bool *ok=nullptr, int base=10) const
Definition proitems.h:131
ProString(const ProString &other)
Definition proitems.cpp:32
const ProValueMap & top() const
ProValueMap pop()
void push(const ProValueMap &t)
ProValueMap & top()
\inmodule QtCore
Definition qhash.h:821
Definition qlist.h:76
QMakeEvaluator * evaluator
QMakeBaseKey(const QString &_root, const QString &_stash, bool _hostBuild)
QString stash
QStringList configs[4]
QMakeCmdLineParserState(const QString &_pwd)
QStringList m_mkspecPaths
QString resolvePath(const QString &fileName) const
ProFunctionDefs m_functionDefs
QMakeHandler * m_handler
QStringList m_qmakefeatures
ProValueMap m_extraVars
VisitReturn evaluateFileInto(const QString &fileName, ProValueMap *values, LoadFlags flags)
static ALWAYS_INLINE VisitReturn returnBool(bool b)
QStack< ProFile * > m_profileStack
QString m_qmakespecName
VisitReturn evaluateBuiltinConditional(const QMakeInternal::QMakeBuiltin &adef, const ProKey &function, const ProStringList &args)
QMakeParser * m_parser
QByteArray getCommandOutput(const QString &args, int *exitCode) const
QExplicitlySharedDataPointer< QMakeFeatureRoots > m_featureRoots
ProStringList split_value_list(QStringView vals, int source=0)
VisitReturn evaluateBuiltinExpand(const QMakeInternal::QMakeBuiltin &adef, const ProKey &function, const ProStringList &args, ProStringList &ret)
VisitReturn prepareFunctionArgs(const ushort *&tokPtr, QList< ProStringList > *ret)
QMakeGlobals * m_option
VisitReturn evaluateConfigFeatures()
VisitReturn visitProVariable(ushort tok, const ProStringList &curr, const ushort *&tokPtr)
void populateDeps(const ProStringList &deps, const ProString &prefix, const ProStringList &suffixes, const ProString &priosfx, QHash< ProKey, QSet< ProKey > > &dependencies, ProValueMap &dependees, QMultiMap< int, ProString > &rootSet) const
int currentFileId() const
VisitReturn visitProBlock(const ushort *tokPtr)
VisitReturn parseJsonInto(const QByteArray &json, const QString &into, ProValueMap *value)
bool getMemberArgs(const ProKey &name, int srclen, const ProStringList &args, int *start, int *end)
VisitReturn evaluateFunction(const ProFunctionDef &func, const QList< ProStringList > &argumentsList, ProStringList *ret)
QMakeEvaluator(QMakeGlobals *option, QMakeParser *parser, QMakeVfs *vfs, QMakeHandler *handler)
static void initFunctionStatics()
VisitReturn visitProBlock(ProFile *pro, const ushort *tokPtr)
bool prepareProject(const QString &inDir)
VisitReturn evaluateBoolFunction(const ProFunctionDef &func, const QList< ProStringList > &argumentsList, const ProString &function)
QStack< Location > m_locationStack
QString currentDirectory() const
VisitReturn evaluateFile(const QString &fileName, QMakeHandler::EvalFileType type, LoadFlags flags)
VisitReturn expandVariableReferences(const ushort *&tokPtr, int sizeHint, ProStringList *ret, bool joined)
void languageWarning(const QString &msg) const
ALWAYS_INLINE const ProKey & map(const ProString &var)
ProString first(const ProKey &variableName) const
static ALWAYS_INLINE void skipStr(const ushort *&tokPtr)
QString filePathArg0(const ProStringList &args)
ProString propertyValue(const ProKey &val) const
ProStringList m_returnValue
static QString quoteValue(const ProString &val)
static ALWAYS_INLINE void skipHashStr(const ushort *&tokPtr)
ProStringList m_extraConfigs
VisitReturn evaluateConditional(QStringView cond, const QString &where, int line=-1)
ALWAYS_INLINE void traceMsgInternal(const char *,...) const
ProStringList & valuesRef(const ProKey &variableName)
VisitReturn writeFile(const QString &ctx, const QString &fn, QIODevice::OpenMode mode, QMakeVfs::VfsFlags flags, const QString &contents)
VisitReturn evaluateFeatureFile(const QString &fileName, bool silent=false)
void setExtraConfigs(const ProStringList &extraConfigs)
VisitReturn evaluateFileChecked(const QString &fileName, QMakeHandler::EvalFileType type, LoadFlags flags)
QString filePathEnvArg0(const ProStringList &args)
VisitReturn visitProFile(ProFile *pro, QMakeHandler::EvalFileType type, LoadFlags flags)
QStringList m_qmakepath
void message(int type, const QString &msg) const
ALWAYS_INLINE void debugMsgInternal(int, const char *,...) const
ProString dirSep() const
const ProKey & map(const ProKey &var)
ProValueMap * findValues(const ProKey &variableName, ProValueMap::Iterator *it)
void initFrom(const QMakeEvaluator *other)
ProStringList values(const ProKey &variableName) const
static ALWAYS_INLINE uint getBlockLen(const ushort *&tokPtr)
void setOutputDir(const QString &outputDir)
void evaluateCommand(const QString &cmds, const QString &where)
ProFile * currentProFile() const
VisitReturn evaluateExpandFunction(const ProKey &function, const ushort *&tokPtr, ProStringList *ret)
void setExtraVars(const ProValueMap &extraVars)
void skipExpression(const ushort *&tokPtr)
void visitProFunctionDef(ushort tok, const ProKey &name, const ushort *tokPtr)
VisitReturn evaluateExpression(const ushort *&tokPtr, ProStringList *ret, bool joined)
void evalError(const QString &msg) const
ProValueMapStack m_valuemapStack
void deprecationWarning(const QString &msg) const
VisitReturn visitProLoop(const ProKey &variable, const ushort *exprPtr, const ushort *tokPtr)
QMakeEvaluator * m_caller
bool isActiveConfig(QStringView config, bool regex=false)
bool isHostBuild() const
VisitReturn evaluateConditionalFunction(const ProKey &function, const ushort *&tokPtr)
QString currentFileName() const
const QStringList paths
QMakeFeatureRoots(const QStringList &_paths)
QMakeFeatureHash cache
void useEnvironment()
QString user_template_prefix
QString cachefile
QStringList splitPathList(const QString &value) const
QString dir_sep
QString user_template
void setCommandLineArguments(const QString &pwd, const QStringList &args)
QString qtconf
QString qmakespec
void setProperties(const QHash< ProKey, ProString > &props)
void setDirectories(const QString &input_dir, const QString &output_dir)
QStringList qmake_args
QString dirlist_sep
QString expandEnvVars(const QString &str) const
QString xqmakespec
QString extra_cmds[4]
QStringList qmake_extra_args
QString qmake_abslocation
void commitCommandLineArguments(QMakeCmdLineParserState &state)
ArgumentReturn addCommandLineArguments(QMakeCmdLineParserState &state, QStringList &args, int *pos)
QString shadowedPath(const QString &fileName) const
static void parseProperties(const QByteArray &data, QHash< ProKey, ProString > &props)
ProString propertyValue(const ProKey &name) const
virtual void fileMessage(int type, const QString &msg)=0
virtual void aboutToEval(ProFile *parent, ProFile *proFile, EvalFileType type)=0
virtual void doneWithEval(ProFile *parent)=0
This class provides replacement functionality for QFileInfo, QFile & QDir, as these are abysmally slo...
Definition ioutils.h:19
static QString resolvePath(const QString &baseDir, const QString &fileName)
Definition ioutils.cpp:113
virtual void message(int type, const QString &msg, const QString &fileName=QString(), int lineNo=0)=0
void discardFileFromCache(int id)
ProFile * parsedProBlock(QStringView contents, int id, const QString &name, int line=0, SubGrammar grammar=FullGrammar)
ProFile * parsedProFile(const QString &fileName, ParseFlags flags=ParseDefault)
static void initialize()
ReadResult readFile(int id, QString *contents, QString *errStr)
Definition qmakevfs.cpp:165
@ VfsCumulative
Definition qmakevfs.h:41
Definition qmap.h:189
\inmodule QtCore
Definition qshareddata.h:20
bool hasError() const
Definition qrcreader.h:17
Combined button and popup list for selecting options.
const QString & asString(const QString &s)
Definition qstring.h:1547
Definition qcompare.h:72
Q_DECLARE_TYPEINFO(ProString, Q_RELOCATABLE_TYPE)
#define PROITEM_EXPLICIT
Definition proitems.h:34
QString & operator+=(QString &that, const ProString &other)
Definition proitems.h:237
QDebug operator<<(QDebug debug, const ProString &str)
Definition proitems.cpp:463
ProToken
Definition proitems.h:333
@ TokAssign
Definition proitems.h:337
@ TokReplaceDef
Definition proitems.h:393
@ TokNewStr
Definition proitems.h:402
@ TokEnvVar
Definition proitems.h:361
@ TokLiteral
Definition proitems.h:346
@ TokFuncTerminator
Definition proitems.h:371
@ TokVariable
Definition proitems.h:353
@ TokAppend
Definition proitems.h:338
@ TokHashLiteral
Definition proitems.h:349
@ TokMask
Definition proitems.h:400
@ TokReplace
Definition proitems.h:341
@ TokBypassNesting
Definition proitems.h:397
@ TokLine
Definition proitems.h:335
@ TokNext
Definition proitems.h:378
@ TokBreak
Definition proitems.h:377
@ TokTestDef
Definition proitems.h:392
@ TokAnd
Definition proitems.h:380
@ TokRemove
Definition proitems.h:340
@ TokNot
Definition proitems.h:379
@ TokTestCall
Definition proitems.h:373
@ TokCondition
Definition proitems.h:372
@ TokBranch
Definition proitems.h:382
@ TokProperty
Definition proitems.h:357
@ TokArgSeparator
Definition proitems.h:370
@ TokTerminator
Definition proitems.h:334
@ TokOr
Definition proitems.h:381
@ TokFuncName
Definition proitems.h:364
@ TokQuoted
Definition proitems.h:401
@ TokAppendUnique
Definition proitems.h:339
@ TokValueTerminator
Definition proitems.h:345
@ TokForLoop
Definition proitems.h:387
@ TokReturn
Definition proitems.h:376
Q_DECLARE_TYPEINFO(ProStringList, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(ProFunctionDef, Q_RELOCATABLE_TYPE)
QMap< ProKey, ProStringList > ProValueMap
Definition proitems.h:330
Q_DECLARE_TYPEINFO(ProKey, Q_RELOCATABLE_TYPE)
ProStringList operator+(const ProStringList &one, const ProStringList &two)
Definition proitems.h:327
#define ALWAYS_INLINE
#define QMAKE_EXPORT
QPair< QString, QString > QMakeFeatureKey
Q_DECLARE_TYPEINFO(QMakeEvaluator::Location, Q_PRIMITIVE_TYPE)
QHash< QMakeFeatureKey, QString > QMakeFeatureHash
bool operator==(const QMakeBaseKey &one, const QMakeBaseKey &two)
QMakeEvalPhase
@ QMakeEvalBefore
@ QMakeEvalLate
@ QMakeEvalEarly
@ QMakeEvalAfter
size_t qHash(const QMakeBaseKey &key)
Q_DECLARE_TYPEINFO(QMakeParser::BlockScope, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(QMakeParser::Context, Q_PRIMITIVE_TYPE)
#define qPrintable(string)
Definition qstring.h:1552
static void printOut(const QString &out)
Definition main.cpp:29
static void printUsage()
Definition main.cpp:60
QStringList getExcludes(const ProFileEvaluator &visitor, const QString &projectDirPath)
Definition main.cpp:207
static QStringList getSources(const ProFileEvaluator &visitor, const QString &projectDir, QMakeVfs *vfs)
Definition main.cpp:151
static void excludeProjects(const ProFileEvaluator &visitor, QStringList *subProjects)
Definition main.cpp:218
void setValue(QJsonObject &obj, const char *key, T value)
Definition main.cpp:55
static void print(const QString &fileName, int lineNo, const QString &msg)
Definition main.cpp:88
static QJsonValue toJsonValue(const QString &s)
Definition main.cpp:44
static QJsonObject processProject(const QString &proFile, const QStringList &translationsVariables, ProFileGlobals *option, QMakeVfs *vfs, QMakeParser *parser, ProFileEvaluator &visitor)
Definition main.cpp:237
static EvalHandler evalHandler
Definition main.cpp:120
static QJsonValue toJsonValue(const QJsonValue &v)
Definition main.cpp:39
static QStringList getSources(const char *var, const char *vvar, const QStringList &baseVPaths, const QString &projectDir, const ProFileEvaluator &visitor)
Definition main.cpp:142
static QJsonArray processProjects(bool topLevel, const QStringList &proFiles, const QStringList &translationsVariables, const QHash< QString, QString > &outDirMap, ProFileGlobals *option, QMakeVfs *vfs, QMakeParser *parser, bool *fail)
Definition main.cpp:281
static QStringList getResources(const QString &resourceFile, QMakeVfs *vfs)
Definition main.cpp:122
static void printErr(const QString &out)
Definition main.cpp:34
QHash< ProKey, ProFunctionDef > replaceFunctions
Definition proitems.h:482
QHash< ProKey, ProFunctionDef > testFunctions
Definition proitems.h:481
static void appendTo(const ProString &a, QChar *&out)
Definition proitems.h:208
static int size(const ProString &a)
Definition proitems.h:207
Location(ProFile *_pro, ushort _line)