aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/projectexplorer/msvctoolchain.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp
index 16633ecc4e2..4709d3197f8 100644
--- a/src/plugins/projectexplorer/msvctoolchain.cpp
+++ b/src/plugins/projectexplorer/msvctoolchain.cpp
@@ -545,6 +545,45 @@ static ToolChain *findOrCreateToolChain(const QList<ToolChain *> &alreadyKnown,
return tc;
}
+// Detect build tools introduced with MSVC2015
+static void detectCppBuildTools(QList<ToolChain *> *list)
+{
+ struct Entry {
+ const char *postFix;
+ const char *varsBatArg;
+ Abi::Architecture architecture;
+ Abi::BinaryFormat format;
+ unsigned char wordSize;
+ };
+
+ const Entry entries[] = {
+ {" (x86)", "x86", Abi::X86Architecture, Abi::PEFormat, 32},
+ {" (x64)", "amd64", Abi::X86Architecture, Abi::PEFormat, 64},
+ {" (x86_arm)", "x86_arm", Abi::ArmArchitecture, Abi::PEFormat, 32},
+ {" (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");
+ if (!QFileInfo(vcVarsBat).isFile())
+ return;
+ const size_t count = sizeof(entries) / sizeof(entries[0]);
+ for (size_t i = 0; i < count; ++i) {
+ const Entry &e = entries[i];
+ const Abi abi(e.architecture, Abi::WindowsOS, Abi::WindowsMsvc2015Flavor,
+ e.format, e.wordSize);
+ list->append(new MsvcToolChain(name + QLatin1String(e.postFix), abi,
+ vcVarsBat, QLatin1String(e.varsBatArg),
+ ToolChain::AutoDetection));
+ }
+}
+
QList<ToolChain *> MsvcToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
{
QList<ToolChain *> results;
@@ -635,6 +674,8 @@ QList<ToolChain *> MsvcToolChainFactory::autoDetect(const QList<ToolChain *> &al
}
}
+ detectCppBuildTools(&results);
+
return results;
}