diff --git a/src/libs/utils/buildablehelperlibrary.cpp b/src/libs/utils/buildablehelperlibrary.cpp index abcae50ca8b3bc5333297e99e3657e11a7a246b6..fd1b636355878c0cccc653c68e59263f491ebdaa 100644 --- a/src/libs/utils/buildablehelperlibrary.cpp +++ b/src/libs/utils/buildablehelperlibrary.cpp @@ -65,22 +65,40 @@ QString BuildableHelperLibrary::qtChooserToQmakePath(const QString &path) return result; } +static bool isQmake(const QString &path) +{ + if (path.isEmpty()) + return false; + QFileInfo fi(path); + if (BuildableHelperLibrary::isQtChooser(fi)) + fi.setFile(BuildableHelperLibrary::qtChooserToQmakePath(fi.symLinkTarget())); + + return !BuildableHelperLibrary::qtVersionForQMake(fi.absoluteFilePath()).isEmpty(); +} + FileName BuildableHelperLibrary::findSystemQt(const Environment &env) { + const QString qmake = QLatin1String("qmake"); QStringList paths = env.path(); foreach (const QString &path, paths) { - QString prefix = path; - if (!prefix.endsWith(QLatin1Char('/'))) - prefix.append(QLatin1Char('/')); - foreach (const QString &possibleCommand, possibleQMakeCommands()) { - QFileInfo qmake(prefix + possibleCommand); - if (qmake.exists()) { - if (isQtChooser(qmake)) - qmake.setFile(qtChooserToQmakePath(qmake.symLinkTarget())); - - if (!qtVersionForQMake(qmake.absoluteFilePath()).isNull()) - return FileName(qmake); - } + if (path.isEmpty()) + continue; + + QDir dir(path); + + if (dir.exists(qmake)) { + const QString qmakePath = dir.absoluteFilePath(qmake); + if (isQmake(qmakePath)) + return FileName::fromString(qmakePath); + } + + // Prefer qmake-qt5 to qmake-qt4 by sorting the filenames in reverse order. + foreach (const QFileInfo &fi, dir.entryInfoList(possibleQMakeCommands(), QDir::Files, QDir::Name | QDir::Reversed)) { + if (fi.fileName() == qmake) + continue; + + if (isQmake(fi.absoluteFilePath())) + return FileName(fi); } } return FileName();