From 67c3b232f8990a0197e490651ffd372f62304a7e Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Wed, 13 Dec 2017 13:37:33 +0100 Subject: [PATCH] ProjectExplorer: No native dir separators in detectCppBuildTools2015 Having native dir separators in the autodetected C++ build tools 2015 caused Qt Creator to add all msvc compilers a second time as manual MSVC versions. Reason was one different dir separator during string comparison in AbstractMsvcToolChain::operator == detectCppBuildTools2017 did the conversion right Change-Id: Iff04428bcc47636b161b944c94cadf12b0c549da Reviewed-by: Eike Ziller Reviewed-by: David Schulz --- src/plugins/projectexplorer/msvctoolchain.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index 2f0db8d0748..a64b749e33c 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -146,16 +146,20 @@ QDebug operator<<(QDebug d, const VisualStudioInstallation &i) return d; } -// Detect build tools introduced with MSVC2017 -static Utils::optional detectCppBuildTools2017() +static QString windowsProgramFilesDir() { #ifdef Q_OS_WIN64 const char programFilesC[] = "ProgramFiles(x86)"; #else const char programFilesC[] = "ProgramFiles"; #endif + return QDir::fromNativeSeparators(QFile::decodeName(qgetenv(programFilesC))); +} - const QString installPath = QDir::fromNativeSeparators(QFile::decodeName(qgetenv(programFilesC))) +// Detect build tools introduced with MSVC2017 +static Utils::optional detectCppBuildTools2017() +{ + const QString installPath = windowsProgramFilesDir() + "/Microsoft Visual Studio/2017/BuildTools"; const QString vcVarsPath = installPath + "/VC/Auxiliary/Build"; const QString vcVarsAllPath = vcVarsPath + "/vcvarsall.bat"; @@ -887,14 +891,9 @@ static void detectCppBuildTools2015(QList *list) {" (x64_arm)", "amd64_arm", Abi::ArmArchitecture, Abi::PEFormat, 64} }; -#ifdef Q_OS_WIN64 - const char programFilesC[] = "ProgramFiles(x86)"; -#else - const char programFilesC[] = "ProgramFiles"; -#endif const QString name = QStringLiteral("Microsoft Visual C++ Build Tools"); - const QString vcVarsBat = QFile::decodeName(qgetenv(programFilesC)) - + QLatin1Char('/') + name + QStringLiteral("/vcbuildtools.bat"); + const QString vcVarsBat = windowsProgramFilesDir() + + QLatin1Char('/') + name + QStringLiteral("/vcbuildtools.bat"); if (!QFileInfo(vcVarsBat).isFile()) return; const size_t count = sizeof(entries) / sizeof(entries[0]);