/**************************************************************************** ** ** 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 #endif #include #include #ifndef QT_BOOTSTRAPPED # include #endif #ifdef PROEVALUATOR_THREAD_SAFE # include # include #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 &props); # ifdef PROEVALUATOR_INIT_PROPS bool initProperties(); # else void setProperties(const QHash &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 properties; #endif #ifdef PROEVALUATOR_THREAD_SAFE QMutex mutex; #endif QHash baseEnvs; friend class QMakeEvaluator; }; QT_END_NAMESPACE #endif // QMAKEGLOBALS_H