mirror of
https://github.com/crystalidea/qt6windows7.git
synced 2024-11-26 14:17:05 +08:00
147 lines
3.7 KiB
C++
147 lines
3.7 KiB
C++
// Copyright (C) 2016 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
|
|
|
#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>
|
|
#if QT_CONFIG(process)
|
|
# 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;
|
|
};
|
|
|
|
size_t 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
|