forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -273,7 +273,8 @@ QStringList Environment::appendExeExtensions(const QString &executable) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
FileName Environment::searchInPath(const QString &executable,
|
FileName Environment::searchInPath(const QString &executable,
|
||||||
const QStringList &additionalDirs) const
|
const QStringList &additionalDirs,
|
||||||
|
bool (*func)(const QString &name)) const
|
||||||
{
|
{
|
||||||
if (executable.isEmpty())
|
if (executable.isEmpty())
|
||||||
return FileName();
|
return FileName();
|
||||||
@@ -296,7 +297,7 @@ FileName Environment::searchInPath(const QString &executable,
|
|||||||
continue;
|
continue;
|
||||||
alreadyChecked.insert(dir);
|
alreadyChecked.insert(dir);
|
||||||
FileName tmp = searchInDirectory(execs, dir);
|
FileName tmp = searchInDirectory(execs, dir);
|
||||||
if (!tmp.isEmpty())
|
if (!tmp.isEmpty() && (!func || func(tmp.toString())))
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -308,7 +309,7 @@ FileName Environment::searchInPath(const QString &executable,
|
|||||||
continue;
|
continue;
|
||||||
alreadyChecked.insert(p);
|
alreadyChecked.insert(p);
|
||||||
FileName tmp = searchInDirectory(execs, QDir::fromNativeSeparators(p));
|
FileName tmp = searchInDirectory(execs, QDir::fromNativeSeparators(p));
|
||||||
if (!tmp.isEmpty())
|
if (!tmp.isEmpty() && (!func || func(tmp.toString())))
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
return FileName();
|
return FileName();
|
||||||
|
@@ -100,7 +100,9 @@ public:
|
|||||||
Environment::const_iterator constFind(const QString &name) const;
|
Environment::const_iterator constFind(const QString &name) const;
|
||||||
|
|
||||||
FileName searchInPath(const QString &executable,
|
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 path() const;
|
||||||
QStringList appendExeExtensions(const QString &executable) const;
|
QStringList appendExeExtensions(const QString &executable) const;
|
||||||
|
|
||||||
|
@@ -201,7 +201,16 @@ Utils::FileName AbstractMsvcToolChain::compilerCommand() const
|
|||||||
{
|
{
|
||||||
Utils::Environment env = Utils::Environment::systemEnvironment();
|
Utils::Environment env = Utils::Environment::systemEnvironment();
|
||||||
addToEnvironment(env);
|
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
|
IOutputParser *AbstractMsvcToolChain::outputParser() const
|
||||||
|
Reference in New Issue
Block a user