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
qmakeevaluator.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 QMAKEEVALUATOR_H
5#define QMAKEEVALUATOR_H
6
7#if defined(PROEVALUATOR_FULL) && defined(PROEVALUATOR_THREAD_SAFE)
8# error PROEVALUATOR_FULL is incompatible with PROEVALUATOR_THREAD_SAFE due to cache() implementation
9#endif
10
11#include "qmakeparser.h"
12#include "qmakevfs.h"
13#include "ioutils.h"
14
15#include <qlist.h>
16#include <qmap.h>
17#include <qset.h>
18#include <qstack.h>
19#include <qstring.h>
20#include <qstringlist.h>
21#include <qshareddata.h>
22#if QT_CONFIG(process)
23# include <qprocess.h>
24#else
25# include <qiodevice.h>
26#endif
27#ifdef PROEVALUATOR_THREAD_SAFE
28# include <qmutex.h>
29#endif
30
31#include <list>
32
34
35class QMakeGlobals;
36
38{
39public:
40 enum {
42
44
47
49 };
50
51 // error(), warning() and message() from .pro file
52 virtual void fileMessage(int type, const QString &msg) = 0;
53
55 virtual void aboutToEval(ProFile *parent, ProFile *proFile, EvalFileType type) = 0;
56 virtual void doneWithEval(ProFile *parent) = 0;
57};
58
59typedef QPair<QString, QString> QMakeFeatureKey; // key, parent
61
63{
64public:
65 QMakeFeatureRoots(const QStringList &_paths) : paths(_paths) {}
68#ifdef PROEVALUATOR_THREAD_SAFE
69 mutable QMutex mutex;
70#endif
71};
72
73// We use a list-based stack instead of a vector-based one, so that
74// the addresses of value maps stay constant. The qmake generators rely on that.
76{
77public:
78 inline void push(const ProValueMap &t) { push_back(t); }
79 inline ProValueMap pop() { auto r = std::move(back()); pop_back(); return r; }
80 ProValueMap &top() { return back(); }
81 const ProValueMap &top() const { return back(); }
82};
83
84namespace QMakeInternal { struct QMakeBuiltin; }
85
87{
88public:
97 Q_DECLARE_FLAGS(LoadFlags, LoadFlag)
98
99 static void initStatics();
100 static void initFunctionStatics();
101 QMakeEvaluator(QMakeGlobals *option, QMakeParser *parser, QMakeVfs *vfs,
102 QMakeHandler *handler);
104
105 void setExtraVars(const ProValueMap &extraVars) { m_extraVars = extraVars; }
106 void setExtraConfigs(const ProStringList &extraConfigs) { m_extraConfigs = extraConfigs; }
107 void setOutputDir(const QString &outputDir) { m_outputDir = outputDir; }
108
109 ProStringList values(const ProKey &variableName) const;
110 ProStringList &valuesRef(const ProKey &variableName);
111 ProString first(const ProKey &variableName) const;
112 ProString propertyValue(const ProKey &val) const;
113
114 ProString dirSep() const { return m_dirSep; }
115 bool isHostBuild() const { return m_hostBuild; }
116
125
127 { return b ? ReturnTrue : ReturnFalse; }
128
129 static ALWAYS_INLINE uint getBlockLen(const ushort *&tokPtr);
130 VisitReturn evaluateExpression(const ushort *&tokPtr, ProStringList *ret, bool joined);
131 static ALWAYS_INLINE void skipStr(const ushort *&tokPtr);
132 static ALWAYS_INLINE void skipHashStr(const ushort *&tokPtr);
133 void skipExpression(const ushort *&tokPtr);
134
135 void loadDefaults();
136 bool prepareProject(const QString &inDir);
137 bool loadSpecInternal();
138 bool loadSpec();
139 void initFrom(const QMakeEvaluator *other);
140 void setupProject();
141 void evaluateCommand(const QString &cmds, const QString &where);
142 void applyExtraConfigs();
144 LoadFlags flags);
145 VisitReturn visitProBlock(ProFile *pro, const ushort *tokPtr);
146 VisitReturn visitProBlock(const ushort *tokPtr);
147 VisitReturn visitProLoop(const ProKey &variable, const ushort *exprPtr,
148 const ushort *tokPtr);
149 void visitProFunctionDef(ushort tok, const ProKey &name, const ushort *tokPtr);
150 VisitReturn visitProVariable(ushort tok, const ProStringList &curr, const ushort *&tokPtr);
151
152 ALWAYS_INLINE const ProKey &map(const ProString &var) { return map(var.toKey()); }
153 const ProKey &map(const ProKey &var);
154 ProValueMap *findValues(const ProKey &variableName, ProValueMap::Iterator *it);
155
156 void setTemplate();
157
158 ProStringList split_value_list(QStringView vals, int source = 0);
159 VisitReturn expandVariableReferences(const ushort *&tokPtr, int sizeHint, ProStringList *ret, bool joined);
160
161 QString currentFileName() const;
162 QString currentDirectory() const;
163 ProFile *currentProFile() const;
164 int currentFileId() const;
165 QString resolvePath(const QString &fileName) const
167 QString filePathArg0(const ProStringList &args);
168 QString filePathEnvArg0(const ProStringList &args);
169
170 VisitReturn evaluateFile(const QString &fileName, QMakeHandler::EvalFileType type,
171 LoadFlags flags);
172 VisitReturn evaluateFileChecked(const QString &fileName, QMakeHandler::EvalFileType type,
173 LoadFlags flags);
174 VisitReturn evaluateFeatureFile(const QString &fileName, bool silent = false);
175 VisitReturn evaluateFileInto(const QString &fileName,
176 ProValueMap *values, // output-only
177 LoadFlags flags);
179 void message(int type, const QString &msg) const;
180 void evalError(const QString &msg) const
182 void languageWarning(const QString &msg) const
184 void deprecationWarning(const QString &msg) const
186
187 VisitReturn prepareFunctionArgs(const ushort *&tokPtr, QList<ProStringList> *ret);
189 const QList<ProStringList> &argumentsList, ProStringList *ret);
191 const QList<ProStringList> &argumentsList,
192 const ProString &function);
193
194 VisitReturn evaluateExpandFunction(const ProKey &function, const ushort *&tokPtr, ProStringList *ret);
195 VisitReturn evaluateConditionalFunction(const ProKey &function, const ushort *&tokPtr);
196
198 const ProKey &function, const ProStringList &args, ProStringList &ret);
200 const ProKey &function, const ProStringList &args);
201
202 VisitReturn evaluateConditional(QStringView cond, const QString &where, int line = -1);
203#ifdef PROEVALUATOR_FULL
205#endif
206
207 void updateMkspecPaths();
208 void updateFeaturePaths();
209
210 bool isActiveConfig(QStringView config, bool regex = false);
211
212 void populateDeps(
213 const ProStringList &deps, const ProString &prefix, const ProStringList &suffixes,
214 const ProString &priosfx,
215 QHash<ProKey, QSet<ProKey> > &dependencies, ProValueMap &dependees,
216 QMultiMap<int, ProString> &rootSet) const;
217
218 bool getMemberArgs(const ProKey &name, int srclen, const ProStringList &args,
219 int *start, int *end);
220 VisitReturn parseJsonInto(const QByteArray &json, const QString &into, ProValueMap *value);
221
222 VisitReturn writeFile(const QString &ctx, const QString &fn, QIODevice::OpenMode mode,
223 QMakeVfs::VfsFlags flags, const QString &contents);
224#if QT_CONFIG(process)
225 void runProcess(QProcess *proc, const QString &command) const;
226#endif
227 QByteArray getCommandOutput(const QString &args, int *exitCode) const;
228
229private:
230 // Implementation detail of evaluateBuiltinConditional():
231 VisitReturn testFunc_cache(const ProStringList &args);
232
233public:
235#ifdef PROEVALUATOR_CUMULATIVE
236 bool m_cumulative;
237 int m_skipLevel;
238#else
239 enum { m_cumulative = 0 };
240 enum { m_skipLevel = 0 };
241#endif
242
243 static QString quoteValue(const ProString &val);
244
245#ifdef PROEVALUATOR_DEBUG
246 void debugMsgInternal(int level, const char *fmt, ...) const;
247 void traceMsgInternal(const char *fmt, ...) const;
248 static QString formatValue(const ProString &val, bool forceQuote = false);
249 static QString formatValueList(const ProStringList &vals, bool commas = false);
251
252 const int m_debugLevel;
253#else
254 ALWAYS_INLINE void debugMsgInternal(int, const char *, ...) const {}
255 ALWAYS_INLINE void traceMsgInternal(const char *, ...) const {}
256
257 enum { m_debugLevel = 0 };
258#endif
259
260 struct Location {
261 Location() : pro(nullptr), line(0) {}
262 Location(ProFile *_pro, ushort _line) : pro(_pro), line(_line) {}
263 void clear() { pro = nullptr; line = 0; }
265 ushort line;
266 };
267
268 Location m_current; // Currently evaluated location
269 QStack<Location> m_locationStack; // All execution location changes
270 QStack<ProFile *> m_profileStack; // Includes only
271
274 QString m_outputDir;
275
280 QString m_qmakespec;
282 QString m_superfile;
283 QString m_conffile;
284 QString m_cachefile;
285 QString m_stashfile;
287 QString m_buildRoot;
295 ProValueMapStack m_valuemapStack; // VariableName must be us-ascii, the content however can be non-us-ascii.
296 QString m_tmp1, m_tmp2, m_tmp3, m_tmp[2]; // Temporaries for efficient toQString
297
302};
304
305Q_DECLARE_OPERATORS_FOR_FLAGS(QMakeEvaluator::LoadFlags)
306
307QT_END_NAMESPACE
308
309#endif // QMAKEEVALUATOR_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
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
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)
#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)