diff --git a/src/plugins/qtsupport/qtkitinformation.cpp b/src/plugins/qtsupport/qtkitinformation.cpp index 71b8fe089e6..386f8e2ea76 100644 --- a/src/plugins/qtsupport/qtkitinformation.cpp +++ b/src/plugins/qtsupport/qtkitinformation.cpp @@ -35,6 +35,7 @@ #include "qtversionmanager.h" #include "qtparser.h" +#include #include #include #include @@ -59,23 +60,31 @@ QVariant QtKitInformation::defaultValue(ProjectExplorer::Kit *k) const Q_UNUSED(k); // find "Qt in PATH": - Utils::FileName qmake = Utils::BuildableHelperLibrary::findSystemQt(Utils::Environment::systemEnvironment()); - - if (qmake.isEmpty()) - return -1; - QList versionList = QtVersionManager::versions(); - BaseQtVersion *fallBack = 0; - foreach (BaseQtVersion *v, versionList) { - if (qmake == v->qmakeCommand()) - return v->uniqueId(); - if (v->type() == QLatin1String(QtSupport::Constants::DESKTOPQT) && !fallBack) - fallBack = v; - } - if (fallBack) - return fallBack->uniqueId(); + BaseQtVersion *result = findOrDefault(versionList, [](const BaseQtVersion *v) { + return v->autodetectionSource() == QLatin1String("PATH"); + }); - return -1; + if (result) + return result->uniqueId(); + + // Legacy: Check for system qmake path: Remove in 3.5 (or later): + // This check is expensive as it will potentially run binaries (qmake --version)! + const FileName qmakePath + = BuildableHelperLibrary::findSystemQt(Utils::Environment::systemEnvironment()); + + if (!qmakePath.isEmpty()) { + result = findOrDefault(versionList, [qmakePath](const BaseQtVersion *v) { + return v->qmakeCommand() == qmakePath; + }); + } + + // Use *any* desktop Qt: + result = findOrDefault(versionList, [](const BaseQtVersion *v) { + return v->type() == QLatin1String(QtSupport::Constants::DESKTOPQT); + }); + + return result ? result->uniqueId() : -1; } QList QtKitInformation::validate(const ProjectExplorer::Kit *k) const diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp index 59f7f3467ef..0cf8052b4af 100644 --- a/src/plugins/qtsupport/qtversionmanager.cpp +++ b/src/plugins/qtsupport/qtversionmanager.cpp @@ -440,7 +440,8 @@ static void findSystemQt() if (systemQMakePath.isNull()) return; - BaseQtVersion *version = QtVersionFactory::createQtVersionFromQMakePath(systemQMakePath); + BaseQtVersion *version + = QtVersionFactory::createQtVersionFromQMakePath(systemQMakePath, false, QLatin1String("PATH")); if (version) { version->setUnexpandedDisplayName(BaseQtVersion::defaultUnexpandedDisplayName(systemQMakePath, true)); m_versions.insert(version->uniqueId(), version);