diff options
author | Daniel Teske <daniel.teske@theqtcompany.com> | 2015-07-15 14:21:45 +0200 |
---|---|---|
committer | Daniel Teske <daniel.teske@theqtcompany.com> | 2015-07-17 10:25:25 +0000 |
commit | ca8b43f6c864ca18ca7da78f1dff810afa697119 (patch) | |
tree | 394506061238c8eddf685fa1d0c87759c5949208 /src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp | |
parent | b927391e5b0a14deeb7e47906639a1c906667bb4 (diff) |
Cmake: Fix autodetection of cmake on Windows
By using some of the infrastructure in Utils::Environment. Due to
wanting to find all cmake executables in PATH and not just the
first one, we need some custom code.
Change-Id: If3161d712b9f6e659450a3d0647f83344e68ba5d
Task-number: QTCREATORBUG-14740
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Benjamin Zeller <benjamin.zeller@canonical.com>
Reviewed-by: Daniel Teske <daniel.teske@theqtcompany.com>
Diffstat (limited to 'src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp')
-rw-r--r-- | src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp b/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp index c3ea485c8b..9620acecc5 100644 --- a/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp +++ b/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp @@ -163,20 +163,29 @@ static void readAndDeleteLegacyCMakeSettings () static QList<CMakeTool *> autoDetectCMakeTools() { - QStringList filters; - filters.append(QStringLiteral("cmake")); - QList<FileName> suspects; - QStringList path = Environment::systemEnvironment().path(); + Utils::Environment env = Environment::systemEnvironment(); + + QStringList path = env.path(); path.removeDuplicates(); - QDir dir; - dir.setNameFilters(filters); - dir.setFilter(QDir::Files | QDir::Executable); - foreach (const QString &base, path) { - dir.setPath(base); - foreach (const QString &entry, dir.entryList()) - suspects.append(FileName::fromString(dir.absoluteFilePath(entry))); + + QStringList execs = env.appendExeExtensions(QLatin1String("cmake")); + + foreach (QString base, path) { + const QChar slash = QLatin1Char('/'); + if (base.isEmpty()) + continue; + // Avoid turning '/' into '//' on Windows which triggers Windows to check + // for network drives! + if (!base.endsWith(slash)) + base += slash; + + foreach (const QString &exec, execs) { + QFileInfo fi(base + exec); + if (fi.exists() && fi.isFile() && fi.isExecutable()) + suspects << FileName::fromString(fi.absoluteFilePath()); + } } QList<CMakeTool *> found; |