aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp
diff options
context:
space:
mode:
authorDaniel Teske <daniel.teske@theqtcompany.com>2015-07-15 14:21:45 +0200
committerDaniel Teske <daniel.teske@theqtcompany.com>2015-07-17 10:25:25 +0000
commitca8b43f6c864ca18ca7da78f1dff810afa697119 (patch)
tree394506061238c8eddf685fa1d0c87759c5949208 /src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp
parentb927391e5b0a14deeb7e47906639a1c906667bb4 (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.cpp31
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;