From 5380948faec94270f9b799fba6f8b0e7c9ad0899 Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 11 Oct 2016 13:36:41 -0400 Subject: cmake: Fix default VS generator selection for Microsoft Build Tools Some versions of the VS tools do not install the registry entry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\$v;InstallDir but all appear to set HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\$v\Setup\VC;ProductDir Update our search to consider both entries. Closes: #16360 --- Source/cmake.cxx | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 78f8c48..b4ab42e 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -1467,17 +1467,23 @@ void cmake::CreateDefaultGlobalGenerator() { "8.0", "Visual Studio 8 2005" }, // { "7.1", "Visual Studio 7 .NET 2003" } }; + static const char* const vsEntries[] = { + "\\Setup\\VC;ProductDir", // + ";InstallDir" // + }; for (VSVersionedGenerator const* g = cmArrayBegin(vsGenerators); found.empty() && g != cmArrayEnd(vsGenerators); ++g) { for (const char* const* v = cmArrayBegin(vsVariants); found.empty() && v != cmArrayEnd(vsVariants); ++v) { - std::string reg = vsregBase + *v + g->MSVersion; - reg += ";InstallDir"; - std::string dir; - if (cmSystemTools::ReadRegistryValue(reg, dir, - cmSystemTools::KeyWOW64_32) && - cmSystemTools::PathExists(dir)) { - found = g->GeneratorName; + for (const char* const* e = cmArrayBegin(vsEntries); + found.empty() && e != cmArrayEnd(vsEntries); ++e) { + std::string const reg = vsregBase + *v + g->MSVersion + *e; + std::string dir; + if (cmSystemTools::ReadRegistryValue(reg, dir, + cmSystemTools::KeyWOW64_32) && + cmSystemTools::PathExists(dir)) { + found = g->GeneratorName; + } } } } -- cgit v0.12