Merge topic 'vswhere-support-x86' into release-3.25

6eee8c9000 VS: Fix crash finding vswhere on 32-bit Windows

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !7832
This commit is contained in:
Brad King
2022-10-27 13:26:55 +00:00
committed by Kitware Robot

View File

@@ -300,13 +300,32 @@ bool cmVSSetupAPIHelper::IsEWDKEnabled()
return false;
}
#if !defined(CMAKE_BOOTSTRAP)
namespace {
std::string FindVsWhereCommand()
{
std::string vswhere;
static const char* programFiles[] = { "ProgramFiles(x86)", "ProgramFiles" };
for (const char* pf : programFiles) {
if (cmSystemTools::GetEnv(pf, vswhere)) {
vswhere += "/Microsoft Visual Studio/Installer/vswhere.exe";
if (cmSystemTools::FileExists(vswhere)) {
return vswhere;
}
}
}
vswhere = "vswhere.exe";
return vswhere;
}
}
#endif
bool cmVSSetupAPIHelper::EnumerateVSInstancesWithVswhere(
std::vector<VSInstanceInfo>& VSInstances)
{
#if !defined(CMAKE_BOOTSTRAP)
// Construct vswhere command to get installed VS instances in JSON format
std::string vswhereExe = getenv("ProgramFiles(x86)") +
std::string(R"(\Microsoft Visual Studio\Installer\vswhere.exe)");
std::string vswhereExe = FindVsWhereCommand();
std::vector<std::string> vswhereCmd = { vswhereExe, "-format", "json" };
// Execute vswhere command and capture JSON output