diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index ddf6ba6cf0b..682357fcbf9 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -488,7 +488,7 @@ QString BaseQtVersion::designerCommand() const if (!isValid()) return QString(); if (m_designerCommand.isNull()) - m_designerCommand = findQtBinary(possibleGuiBinaries(QLatin1String("designer"))); + m_designerCommand = findQtBinary(Designer); return m_designerCommand; } @@ -497,7 +497,7 @@ QString BaseQtVersion::linguistCommand() const if (!isValid()) return QString(); if (m_linguistCommand.isNull()) - m_linguistCommand = findQtBinary(possibleGuiBinaries(QLatin1String("linguist"))); + m_linguistCommand = findQtBinary(Linguist); return m_linguistCommand; } @@ -506,27 +506,67 @@ QString BaseQtVersion::qmlviewerCommand() const if (!isValid()) return QString(); - if (m_qmlviewerCommand.isNull()) { -#ifdef Q_OS_MAC - const QString qmlViewerName = QLatin1String("QMLViewer"); -#else - const QString qmlViewerName = QLatin1String("qmlviewer"); -#endif - - m_qmlviewerCommand = findQtBinary(possibleGuiBinaries(qmlViewerName)); - } + if (m_qmlviewerCommand.isNull()) + m_qmlviewerCommand = findQtBinary(QmlViewer); return m_qmlviewerCommand; } -QString BaseQtVersion::findQtBinary(const QStringList &possibleCommands) const +QString BaseQtVersion::findQtBinary(BINARIES binary) const { - QString qtdirbin = versionInfo().value(QLatin1String("QT_INSTALL_BINS")); - if (qtdirbin.isEmpty()) - return QString(); - qtdirbin += QLatin1Char('/'); + QString baseDir; + if (qtVersion() < QtVersionNumber(5, 0, 0)) { + baseDir = versionInfo().value(QLatin1String("QT_INSTALL_BINS")); + } else { + ensureMkSpecParsed(); + switch (binary) { + case QmlViewer: + baseDir = m_mkspecValues.value("QT.declarative.bins"); + break; + case Designer: + case Linguist: + baseDir = m_mkspecValues.value("QT.designer.bins"); + break; + case Uic: + baseDir = versionInfo().value(QLatin1String("QT_INSTALL_BINS")); + break; + default: + // Can't happen + Q_ASSERT(false); + } + } + if (baseDir.isEmpty()) + return QString(); + if (!baseDir.endsWith('/')) + baseDir += QLatin1Char('/'); + + QStringList possibleCommands; + switch (binary) { + case QmlViewer: +#ifdef Q_OS_MAC + possibleCommands << QLatin1String("QMLViewer"); +#else + possibleCommands << QLatin1String("qmlviewer"); +#endif + break; + case Designer: + possibleCommands << possibleGuiBinaries(QLatin1String("designer")); + break; + case Linguist: + possibleCommands << possibleGuiBinaries(QLatin1String("linguist")); + break; + case Uic: +#ifdef Q_OS_WIN + possibleCommands << QLatin1String("uic.exe"); +#else + possibleCommands << QLatin1String("uic-qt4") << QLatin1String("uic4") << QLatin1String("uic"); +#endif + break; + default: + Q_ASSERT(false); + } foreach (const QString &possibleCommand, possibleCommands) { - const QString fullPath = qtdirbin + possibleCommand; + const QString fullPath = baseDir + possibleCommand; if (QFileInfo(fullPath).isFile()) return QDir::cleanPath(fullPath); } @@ -539,13 +579,7 @@ QString BaseQtVersion::uicCommand() const return QString(); if (!m_uicCommand.isNull()) return m_uicCommand; -#ifdef Q_OS_WIN - const QStringList possibleCommands(QLatin1String("uic.exe")); -#else - QStringList possibleCommands; - possibleCommands << QLatin1String("uic-qt4") << QLatin1String("uic4") << QLatin1String("uic"); -#endif - m_uicCommand = findQtBinary(possibleCommands); + m_uicCommand = findQtBinary(Uic); return m_uicCommand; } @@ -625,6 +659,9 @@ void BaseQtVersion::parseMkSpec(ProFileEvaluator *evaluator) const else if (value == "build_all") m_defaultConfigIsDebugAndRelease = true; } + + m_mkspecValues.insert("QT.designer.bins", evaluator->value("QT.designer.bins")); + m_mkspecValues.insert("QT.declarative.bins", evaluator->value("QT.declarative.bins")); } QString BaseQtVersion::mkspec() const diff --git a/src/plugins/qtsupport/baseqtversion.h b/src/plugins/qtsupport/baseqtversion.h index 7f6ee164feb..afbb7aacbbe 100644 --- a/src/plugins/qtsupport/baseqtversion.h +++ b/src/plugins/qtsupport/baseqtversion.h @@ -228,7 +228,8 @@ private: void ctor(const QString &qmakePath); void updateSourcePath() const; void updateVersionInfo() const; - QString findQtBinary(const QStringList &possibleName) const; + enum BINARIES { QmlViewer, Designer, Linguist, Uic }; + QString findQtBinary(BINARIES binary) const; void updateMkspec() const; void setId(int id); // used by the qtversionmanager for legacy restore // and by the qtoptionspage to replace qt versions @@ -250,6 +251,7 @@ private: mutable bool m_mkspecReadUpToDate; mutable bool m_defaultConfigIsDebug; mutable bool m_defaultConfigIsDebugAndRelease; + mutable QHash m_mkspecValues; mutable bool m_versionInfoUpToDate; mutable QHash m_versionInfo;