BaseQtVersion: use QMakeEvaluator's native format for m_versionInfo

Change-Id: I926bc97fe6fa510ac5a8fe77b64014333a69bd04
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
Oswald Buddenhagen
2017-01-24 13:33:14 +01:00
parent 8288ca1251
commit 8a69c25475
5 changed files with 35 additions and 40 deletions

View File

@@ -677,8 +677,8 @@ QStringList BaseQtVersion::warningReason() const
QStringList ret; QStringList ret;
if (qtAbis().isEmpty()) if (qtAbis().isEmpty())
ret << QCoreApplication::translate("QtVersion", "ABI detection failed: Make sure to use a matching compiler when building."); ret << QCoreApplication::translate("QtVersion", "ABI detection failed: Make sure to use a matching compiler when building.");
if (m_versionInfo.value(QLatin1String("QT_INSTALL_PREFIX/get")) if (m_versionInfo.value(ProKey("QT_INSTALL_PREFIX/get"))
!= m_versionInfo.value(QLatin1String("QT_INSTALL_PREFIX"))) { != m_versionInfo.value(ProKey("QT_INSTALL_PREFIX"))) {
ret << QCoreApplication::translate("QtVersion", "Non-installed -prefix build - for internal development only."); ret << QCoreApplication::translate("QtVersion", "Non-installed -prefix build - for internal development only.");
} }
return ret; return ret;
@@ -792,12 +792,13 @@ QString BaseQtVersion::toHtml(bool verbose) const
str << "<tr><td><b>" << QCoreApplication::translate("BaseQtVersion", "Version:") str << "<tr><td><b>" << QCoreApplication::translate("BaseQtVersion", "Version:")
<< "</b></td><td>" << qtVersionString() << "</td></tr>"; << "</b></td><td>" << qtVersionString() << "</td></tr>";
if (verbose) { if (verbose) {
const QHash<QString,QString> vInfo = versionInfo(); const QHash<ProKey, ProString> vInfo = versionInfo();
if (!vInfo.isEmpty()) { if (!vInfo.isEmpty()) {
QStringList keys = vInfo.keys(); QList<ProKey> keys = vInfo.keys();
keys.sort(); Utils::sort(keys);
foreach (QString variableName, keys) { foreach (const ProKey &key, keys) {
const QString &value = vInfo.value(variableName); const QString &value = vInfo.value(key).toQString();
QString variableName = key.toQString();
if (variableName != QLatin1String("QMAKE_MKSPECS") if (variableName != QLatin1String("QMAKE_MKSPECS")
&& !variableName.endsWith(QLatin1String("/raw"))) { && !variableName.endsWith(QLatin1String("/raw"))) {
bool isPath = false; bool isPath = false;
@@ -1196,20 +1197,20 @@ void BaseQtVersion::updateVersionInfo() const
m_versionInfoUpToDate = true; m_versionInfoUpToDate = true;
} }
QHash<QString,QString> BaseQtVersion::versionInfo() const QHash<ProKey,ProString> BaseQtVersion::versionInfo() const
{ {
updateVersionInfo(); updateVersionInfo();
return m_versionInfo; return m_versionInfo;
} }
QString BaseQtVersion::qmakeProperty(const QHash<QString,QString> &versionInfo, const QByteArray &name, QString BaseQtVersion::qmakeProperty(const QHash<ProKey,ProString> &versionInfo, const QByteArray &name,
PropertyVariant variant) PropertyVariant variant)
{ {
QString val = versionInfo.value(QString::fromLatin1( QString val = versionInfo.value(ProKey(QString::fromLatin1(
name + (variant == PropertyVariantGet ? "/get" : "/src"))); name + (variant == PropertyVariantGet ? "/get" : "/src")))).toQString();
if (!val.isNull()) if (!val.isNull())
return val; return val;
return versionInfo.value(QString::fromLatin1(name)); return versionInfo.value(ProKey(QString::fromLatin1(name))).toQString();
} }
QString BaseQtVersion::qmakeProperty(const QByteArray &name, PropertyVariant variant) const QString BaseQtVersion::qmakeProperty(const QByteArray &name, PropertyVariant variant) const
@@ -1410,7 +1411,7 @@ static QByteArray runQmakeQuery(const FileName &binary, const Environment &env,
} }
bool BaseQtVersion::queryQMakeVariables(const FileName &binary, const Environment &env, bool BaseQtVersion::queryQMakeVariables(const FileName &binary, const Environment &env,
QHash<QString, QString> *versionInfo, QString *error) QHash<ProKey, ProString> *versionInfo, QString *error)
{ {
QString tmp; QString tmp;
if (!error) if (!error)
@@ -1452,23 +1453,23 @@ bool BaseQtVersion::queryQMakeVariables(const FileName &binary, const Environmen
const int index = line.indexOf(QLatin1Char(':')); const int index = line.indexOf(QLatin1Char(':'));
if (index != -1) { if (index != -1) {
QString name = line.left(index); QString name = line.left(index);
QString value = QDir::fromNativeSeparators(line.mid(index+1)); ProString value(QDir::fromNativeSeparators(line.mid(index+1)));
if (value.isNull()) if (value.isNull())
value = QLatin1String(""); // Make sure it is not null, to discern from missing keys value = ProString(""); // Make sure it is not null, to discern from missing keys
versionInfo->insert(name, value); versionInfo->insert(ProKey(name), value);
if (name.startsWith(QLatin1String("QT_")) && !name.contains(QLatin1Char('/'))) { if (name.startsWith(QLatin1String("QT_")) && !name.contains(QLatin1Char('/'))) {
if (name.startsWith(QLatin1String("QT_INSTALL_"))) { if (name.startsWith(QLatin1String("QT_INSTALL_"))) {
versionInfo->insert(name + QLatin1String("/raw"), value); versionInfo->insert(ProKey(name + QLatin1String("/raw")), value);
versionInfo->insert(name + QLatin1String("/get"), value); versionInfo->insert(ProKey(name + QLatin1String("/get")), value);
if (name == QLatin1String("QT_INSTALL_PREFIX") if (name == QLatin1String("QT_INSTALL_PREFIX")
|| name == QLatin1String("QT_INSTALL_DATA") || name == QLatin1String("QT_INSTALL_DATA")
|| name == QLatin1String("QT_INSTALL_BINS")) { || name == QLatin1String("QT_INSTALL_BINS")) {
name.replace(3, 7, QLatin1String("HOST")); name.replace(3, 7, QLatin1String("HOST"));
versionInfo->insert(name, value); versionInfo->insert(ProKey(name), value);
versionInfo->insert(name + QLatin1String("/get"), value); versionInfo->insert(ProKey(name + QLatin1String("/get")), value);
} }
} else if (name.startsWith(QLatin1String("QT_HOST_"))) { } else if (name.startsWith(QLatin1String("QT_HOST_"))) {
versionInfo->insert(name + QLatin1String("/get"), value); versionInfo->insert(ProKey(name + QLatin1String("/get")), value);
} }
} }
} }
@@ -1476,7 +1477,7 @@ bool BaseQtVersion::queryQMakeVariables(const FileName &binary, const Environmen
return true; return true;
} }
FileName BaseQtVersion::mkspecDirectoryFromVersionInfo(const QHash<QString, QString> &versionInfo) FileName BaseQtVersion::mkspecDirectoryFromVersionInfo(const QHash<ProKey, ProString> &versionInfo)
{ {
QString dataDir = qmakeProperty(versionInfo, "QT_HOST_DATA", PropertyVariantSrc); QString dataDir = qmakeProperty(versionInfo, "QT_HOST_DATA", PropertyVariantSrc);
if (dataDir.isEmpty()) if (dataDir.isEmpty())
@@ -1484,7 +1485,7 @@ FileName BaseQtVersion::mkspecDirectoryFromVersionInfo(const QHash<QString, QStr
return FileName::fromUserInput(dataDir + QLatin1String("/mkspecs")); return FileName::fromUserInput(dataDir + QLatin1String("/mkspecs"));
} }
FileName BaseQtVersion::mkspecFromVersionInfo(const QHash<QString, QString> &versionInfo) FileName BaseQtVersion::mkspecFromVersionInfo(const QHash<ProKey, ProString> &versionInfo)
{ {
FileName baseMkspecDir = mkspecDirectoryFromVersionInfo(versionInfo); FileName baseMkspecDir = mkspecDirectoryFromVersionInfo(versionInfo);
if (baseMkspecDir.isEmpty()) if (baseMkspecDir.isEmpty())
@@ -1564,7 +1565,7 @@ FileName BaseQtVersion::mkspecFromVersionInfo(const QHash<QString, QString> &ver
return mkspecFullPath; return mkspecFullPath;
} }
FileName BaseQtVersion::sourcePath(const QHash<QString, QString> &versionInfo) FileName BaseQtVersion::sourcePath(const QHash<ProKey, ProString> &versionInfo)
{ {
const QString qt5Source = qmakeProperty(versionInfo, "QT_INSTALL_PREFIX/src"); const QString qt5Source = qmakeProperty(versionInfo, "QT_INSTALL_PREFIX/src");
if (!qt5Source.isEmpty()) if (!qt5Source.isEmpty())

View File

@@ -48,6 +48,8 @@ class Task;
} // namespace ProjectExplorer } // namespace ProjectExplorer
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class ProKey;
class ProString;
class ProFileEvaluator; class ProFileEvaluator;
class QMakeGlobals; class QMakeGlobals;
class QSettings; class QSettings;
@@ -246,14 +248,14 @@ private:
enum Binaries { QmlViewer, QmlScene, Designer, Linguist, Uic, QScxmlc }; enum Binaries { QmlViewer, QmlScene, Designer, Linguist, Uic, QScxmlc };
QString findQtBinary(Binaries binary) const; QString findQtBinary(Binaries binary) const;
void updateMkspec() const; void updateMkspec() const;
QHash<QString,QString> versionInfo() const; QHash<ProKey, ProString> versionInfo() const;
static bool queryQMakeVariables(const Utils::FileName &binary, const Utils::Environment &env, static bool queryQMakeVariables(const Utils::FileName &binary, const Utils::Environment &env,
QHash<QString, QString> *versionInfo, QString *error = 0); QHash<ProKey, ProString> *versionInfo, QString *error = 0);
static QString qmakeProperty(const QHash<QString,QString> &versionInfo, const QByteArray &name, static QString qmakeProperty(const QHash<ProKey, ProString> &versionInfo, const QByteArray &name,
PropertyVariant variant = PropertyVariantGet); PropertyVariant variant = PropertyVariantGet);
static Utils::FileName mkspecDirectoryFromVersionInfo(const QHash<QString, QString> &versionInfo); static Utils::FileName mkspecDirectoryFromVersionInfo(const QHash<ProKey,ProString> &versionInfo);
static Utils::FileName mkspecFromVersionInfo(const QHash<QString, QString> &versionInfo); static Utils::FileName mkspecFromVersionInfo(const QHash<ProKey,ProString> &versionInfo);
static Utils::FileName sourcePath(const QHash<QString, QString> &versionInfo); static Utils::FileName sourcePath(const QHash<ProKey,ProString> &versionInfo);
void setId(int id); // used by the qtversionmanager for legacy restore void setId(int id); // used by the qtversionmanager for legacy restore
// and by the qtoptionspage to replace Qt versions // and by the qtoptionspage to replace Qt versions
@@ -286,7 +288,7 @@ private:
mutable QHash<QString, QString> m_mkspecValues; mutable QHash<QString, QString> m_mkspecValues;
mutable QHash<QString,QString> m_versionInfo; mutable QHash<ProKey, ProString> m_versionInfo;
Utils::FileName m_qmakeCommand; Utils::FileName m_qmakeCommand;
mutable QString m_qtVersionString; mutable QString m_qtVersionString;

View File

@@ -47,7 +47,7 @@ QtVersionFactory::~QtVersionFactory()
BaseQtVersion *QtVersionFactory::createQtVersionFromQMakePath(const Utils::FileName &qmakePath, bool isAutoDetected, const QString &autoDetectionSource, QString *error) BaseQtVersion *QtVersionFactory::createQtVersionFromQMakePath(const Utils::FileName &qmakePath, bool isAutoDetected, const QString &autoDetectionSource, QString *error)
{ {
QHash<QString, QString> versionInfo; QHash<ProKey, ProString> versionInfo;
if (!BaseQtVersion::queryQMakeVariables(qmakePath, Utils::Environment::systemEnvironment(), if (!BaseQtVersion::queryQMakeVariables(qmakePath, Utils::Environment::systemEnvironment(),
&versionInfo, error)) &versionInfo, error))
return 0; return 0;

View File

@@ -367,13 +367,6 @@ bool QMakeGlobals::initProperties()
} }
return true; return true;
} }
#else
void QMakeGlobals::setProperties(const QHash<QString, QString> &props)
{
QHash<QString, QString>::ConstIterator it = props.constBegin(), eit = props.constEnd();
for (; it != eit; ++it)
properties.insert(ProKey(it.key()), ProString(it.value()));
}
#endif #endif
#endif // QT_BUILD_QMAKE #endif // QT_BUILD_QMAKE

View File

@@ -126,7 +126,6 @@ public:
# ifdef PROEVALUATOR_INIT_PROPS # ifdef PROEVALUATOR_INIT_PROPS
bool initProperties(); bool initProperties();
# else # else
void setProperties(const QHash<QString, QString> &props);
void setProperties(const QHash<ProKey, ProString> &props) { properties = props; } void setProperties(const QHash<ProKey, ProString> &props) { properties = props; }
# endif # endif
ProString propertyValue(const ProKey &name) const { return properties.value(name); } ProString propertyValue(const ProKey &name) const { return properties.value(name); }