diff options
author | Thomas Epting <thomas.epting@stryker.com> | 2016-10-04 11:29:30 +0200 |
---|---|---|
committer | Thomas Epting <thomas.epting@stryker.com> | 2016-10-10 17:28:50 +0000 |
commit | 2d2db8312dca1747aadde698ff4d565de0d412d2 (patch) | |
tree | 0e6f3e4594a98496bd6f5b8b5e12f5a7ee9d0ccc /src | |
parent | 3b8087a85cf412013acb404a09a2eb5b319e56cb (diff) | |
download | qt-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.cpp | 7 | ||||
-rw-r--r-- | src/libs/utils/environment.h | 4 | ||||
-rw-r--r-- | src/plugins/projectexplorer/abstractmsvctoolchain.cpp | 11 |
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 |