summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas Epting <thomas.epting@stryker.com>2016-10-04 11:29:30 +0200
committerThomas Epting <thomas.epting@stryker.com>2016-10-10 17:28:50 +0000
commit2d2db8312dca1747aadde698ff4d565de0d412d2 (patch)
tree0e6f3e4594a98496bd6f5b8b5e12f5a7ee9d0ccc /src
parent3b8087a85cf412013acb404a09a2eb5b319e56cb (diff)
downloadqt-creator-2d2db8312dca1747aadde698ff4d565de0d412d2.tar.gz
MSVC: Ensure the correct MSVC installation folder is detected
With this change, tools like Bullseye Coverage that wrap cl.exe are disregarded. Only true MSVC installation folders are considered now, which allows using Creator+Qbs with such tools again. Task-number: QBS-1000 Change-Id: Ifb49b3c032359aa4ba1bc702de0dc3d30d3b6075 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/libs/utils/environment.cpp7
-rw-r--r--src/libs/utils/environment.h4
-rw-r--r--src/plugins/projectexplorer/abstractmsvctoolchain.cpp11
3 files changed, 17 insertions, 5 deletions
diff --git a/src/libs/utils/environment.cpp b/src/libs/utils/environment.cpp
index 50c32f9a07..900d4e63e1 100644
--- a/src/libs/utils/environment.cpp
+++ b/src/libs/utils/environment.cpp
@@ -273,7 +273,8 @@ QStringList Environment::appendExeExtensions(const QString &executable) const
}
FileName Environment::searchInPath(const QString &executable,
- const QStringList &additionalDirs) const
+ const QStringList &additionalDirs,
+ bool (*func)(const QString &name)) const
{
if (executable.isEmpty())
return FileName();
@@ -296,7 +297,7 @@ FileName Environment::searchInPath(const QString &executable,
continue;
alreadyChecked.insert(dir);
FileName tmp = searchInDirectory(execs, dir);
- if (!tmp.isEmpty())
+ if (!tmp.isEmpty() && (!func || func(tmp.toString())))
return tmp;
}
@@ -308,7 +309,7 @@ FileName Environment::searchInPath(const QString &executable,
continue;
alreadyChecked.insert(p);
FileName tmp = searchInDirectory(execs, QDir::fromNativeSeparators(p));
- if (!tmp.isEmpty())
+ if (!tmp.isEmpty() && (!func || func(tmp.toString())))
return tmp;
}
return FileName();
diff --git a/src/libs/utils/environment.h b/src/libs/utils/environment.h
index 78f51bb7f4..a04cbe9284 100644
--- a/src/libs/utils/environment.h
+++ b/src/libs/utils/environment.h
@@ -100,7 +100,9 @@ public:
Environment::const_iterator constFind(const QString &name) const;
FileName searchInPath(const QString &executable,
- const QStringList &additionalDirs = QStringList()) const;
+ const QStringList &additionalDirs = QStringList(),
+ bool (*func)(const QString &name) = nullptr) const;
+
QStringList path() const;
QStringList appendExeExtensions(const QString &executable) const;
diff --git a/src/plugins/projectexplorer/abstractmsvctoolchain.cpp b/src/plugins/projectexplorer/abstractmsvctoolchain.cpp
index 34436b892c..e2930db03a 100644
--- a/src/plugins/projectexplorer/abstractmsvctoolchain.cpp
+++ b/src/plugins/projectexplorer/abstractmsvctoolchain.cpp
@@ -201,7 +201,16 @@ Utils::FileName AbstractMsvcToolChain::compilerCommand() const
{
Utils::Environment env = Utils::Environment::systemEnvironment();
addToEnvironment(env);
- return env.searchInPath(QLatin1String("cl.exe"));
+
+ Utils::FileName clexe = env.searchInPath(QLatin1String("cl.exe"), QStringList(), [](const QString &name) {
+ QDir dir(QDir::cleanPath(QFileInfo(name).absolutePath() + QStringLiteral("/..")));
+ do {
+ if (QFile::exists(dir.absoluteFilePath(QStringLiteral("vcvarsall.bat"))))
+ return true;
+ } while (dir.cdUp() && !dir.isRoot());
+ return false;
+ });
+ return clexe;
}
IOutputParser *AbstractMsvcToolChain::outputParser() const