| /**************************************************************************** | 
 | ** | 
 | ** Copyright (C) 2016 The Qt Company Ltd. | 
 | ** Contact: https://www.qt.io/licensing/ | 
 | ** | 
 | ** This file is part of the qmake application of the Qt Toolkit. | 
 | ** | 
 | ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ | 
 | ** Commercial License Usage | 
 | ** Licensees holding valid commercial Qt licenses may use this file in | 
 | ** accordance with the commercial license agreement provided with the | 
 | ** Software or, alternatively, in accordance with the terms contained in | 
 | ** a written agreement between you and The Qt Company. For licensing terms | 
 | ** and conditions see https://www.qt.io/terms-conditions. For further | 
 | ** information use the contact form at https://www.qt.io/contact-us. | 
 | ** | 
 | ** GNU General Public License Usage | 
 | ** Alternatively, this file may be used under the terms of the GNU | 
 | ** General Public License version 3 as published by the Free Software | 
 | ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT | 
 | ** included in the packaging of this file. Please review the following | 
 | ** information to ensure the GNU General Public License requirements will | 
 | ** be met: https://www.gnu.org/licenses/gpl-3.0.html. | 
 | ** | 
 | ** $QT_END_LICENSE$ | 
 | ** | 
 | ****************************************************************************/ | 
 |  | 
 | #ifndef QMAKEGLOBALS_H | 
 | #define QMAKEGLOBALS_H | 
 |  | 
 | #include "qmake_global.h" | 
 | #include "proitems.h" | 
 |  | 
 | #ifdef QT_BUILD_QMAKE | 
 | #  include <property.h> | 
 | #endif | 
 |  | 
 | #include <qhash.h> | 
 | #include <qstringlist.h> | 
 | #ifndef QT_BOOTSTRAPPED | 
 | # include <qprocess.h> | 
 | #endif | 
 | #ifdef PROEVALUATOR_THREAD_SAFE | 
 | # include <qmutex.h> | 
 | # include <qwaitcondition.h> | 
 | #endif | 
 |  | 
 | QT_BEGIN_NAMESPACE | 
 |  | 
 | class QMakeEvaluator; | 
 |  | 
 | enum QMakeEvalPhase { QMakeEvalEarly, QMakeEvalBefore, QMakeEvalAfter, QMakeEvalLate }; | 
 |  | 
 | class QMakeBaseKey | 
 | { | 
 | public: | 
 |     QMakeBaseKey(const QString &_root, const QString &_stash, bool _hostBuild); | 
 |  | 
 |     QString root; | 
 |     QString stash; | 
 |     bool hostBuild; | 
 | }; | 
 |  | 
 | uint qHash(const QMakeBaseKey &key); | 
 | bool operator==(const QMakeBaseKey &one, const QMakeBaseKey &two); | 
 |  | 
 | class QMakeBaseEnv | 
 | { | 
 | public: | 
 |     QMakeBaseEnv(); | 
 |     ~QMakeBaseEnv(); | 
 |  | 
 | #ifdef PROEVALUATOR_THREAD_SAFE | 
 |     QMutex mutex; | 
 |     QWaitCondition cond; | 
 |     bool inProgress; | 
 |     // The coupling of this flag to thread safety exists because for other | 
 |     // use cases failure is immediately fatal anyway. | 
 |     bool isOk; | 
 | #endif | 
 |     QMakeEvaluator *evaluator; | 
 | }; | 
 |  | 
 | class QMAKE_EXPORT QMakeCmdLineParserState | 
 | { | 
 | public: | 
 |     QMakeCmdLineParserState(const QString &_pwd) : pwd(_pwd), phase(QMakeEvalBefore) {} | 
 |     QString pwd; | 
 |     QStringList cmds[4], configs[4]; | 
 |     QStringList extraargs; | 
 |     QMakeEvalPhase phase; | 
 |  | 
 |     void flush() { phase = QMakeEvalBefore; } | 
 | }; | 
 |  | 
 | class QMAKE_EXPORT QMakeGlobals | 
 | { | 
 | public: | 
 |     QMakeGlobals(); | 
 |     ~QMakeGlobals(); | 
 |  | 
 |     bool do_cache; | 
 |     QString dir_sep; | 
 |     QString dirlist_sep; | 
 |     QString cachefile; | 
 | #ifdef PROEVALUATOR_SETENV | 
 |     QProcessEnvironment environment; | 
 | #endif | 
 |     QString qmake_abslocation; | 
 |     QStringList qmake_args, qmake_extra_args; | 
 |  | 
 |     QString qtconf; | 
 |     QString qmakespec, xqmakespec; | 
 |     QString user_template, user_template_prefix; | 
 |     QString extra_cmds[4]; | 
 |  | 
 | #ifdef PROEVALUATOR_DEBUG | 
 |     int debugLevel; | 
 | #endif | 
 |  | 
 |     enum ArgumentReturn { ArgumentUnknown, ArgumentMalformed, ArgumentsOk }; | 
 |     ArgumentReturn addCommandLineArguments(QMakeCmdLineParserState &state, | 
 |                                            QStringList &args, int *pos); | 
 |     void commitCommandLineArguments(QMakeCmdLineParserState &state); | 
 |     void setCommandLineArguments(const QString &pwd, const QStringList &args); | 
 |     void useEnvironment(); | 
 |     void setDirectories(const QString &input_dir, const QString &output_dir); | 
 | #ifdef QT_BUILD_QMAKE | 
 |     void setQMakeProperty(QMakeProperty *prop) { property = prop; } | 
 |     void reloadProperties() { property->reload(); } | 
 |     ProString propertyValue(const ProKey &name) const { return property->value(name); } | 
 | #else | 
 |     static void parseProperties(const QByteArray &data, QHash<ProKey, ProString> &props); | 
 | #  ifdef PROEVALUATOR_INIT_PROPS | 
 |     bool initProperties(); | 
 | #  else | 
 |     void setProperties(const QHash<ProKey, ProString> &props) { properties = props; } | 
 | #  endif | 
 |     ProString propertyValue(const ProKey &name) const { return properties.value(name); } | 
 | #endif | 
 |  | 
 |     QString expandEnvVars(const QString &str) const; | 
 |     QString shadowedPath(const QString &fileName) const; | 
 |     QStringList splitPathList(const QString &value) const; | 
 |  | 
 | private: | 
 |     QString getEnv(const QString &) const; | 
 |     QStringList getPathListEnv(const QString &var) const; | 
 |  | 
 |     QString cleanSpec(QMakeCmdLineParserState &state, const QString &spec); | 
 |  | 
 |     QString source_root, build_root; | 
 |  | 
 | #ifdef QT_BUILD_QMAKE | 
 |     QMakeProperty *property; | 
 | #else | 
 |     QHash<ProKey, ProString> properties; | 
 | #endif | 
 |  | 
 | #ifdef PROEVALUATOR_THREAD_SAFE | 
 |     QMutex mutex; | 
 | #endif | 
 |     QHash<QMakeBaseKey, QMakeBaseEnv *> baseEnvs; | 
 |  | 
 |     friend class QMakeEvaluator; | 
 | }; | 
 |  | 
 | QT_END_NAMESPACE | 
 |  | 
 | #endif // QMAKEGLOBALS_H |