Commit 5380948f authored by Brad King's avatar Brad King
Browse files

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
parent 1aee54ed
......@@ -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;
}
}
}
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment