Browse Source

VS: Fix x64 host recognition by x86 cmake process

In commit 57e48f16f2 (VS: Add Visual Studio 16 2019 generator,
2019-01-09, v3.14.0-rc1~150^2) and commit 0fd742a6ff (VS: Teach VS 2019
generator to select host tools matching host arch, 2019-01-28,
v3.14.0-rc1~63^2) we intended to select the `x64` target architecture
and `x64` host tools by default on x64 host machines.  Fix detection
of a x64 host when CMake itself is a 32-bit x86 process.

The KWSys SystemInformation `Is64Bits` member is not set correctly,
which led to this bug.  Pending investigation on the KWSys side,
simply test ourselves via `IsWow64Process`.
Brad King 6 years ago
parent
commit
5c50eeaffc
1 changed files with 10 additions and 5 deletions
  1. 10 5
      Source/cmGlobalVisualStudioVersionedGenerator.cxx

+ 10 - 5
Source/cmGlobalVisualStudioVersionedGenerator.cxx

@@ -18,8 +18,15 @@
 #elif defined(_M_IA64)
 #  define HOST_PLATFORM_NAME "Itanium"
 #  define HOST_TOOLS_ARCH ""
+#elif defined(_WIN64)
+#  define HOST_PLATFORM_NAME "x64"
+#  define HOST_TOOLS_ARCH "x64"
 #else
-#  include "cmsys/SystemInformation.hxx"
+static bool VSIsWow64()
+{
+  BOOL isWow64 = false;
+  return IsWow64Process(GetCurrentProcess(), &isWow64) && isWow64;
+}
 #endif
 
 static std::string VSHostPlatformName()
@@ -27,8 +34,7 @@ static std::string VSHostPlatformName()
 #ifdef HOST_PLATFORM_NAME
   return HOST_PLATFORM_NAME;
 #else
-  cmsys::SystemInformation info;
-  if (info.Is64Bits()) {
+  if (VSIsWow64()) {
     return "x64";
   } else {
     return "Win32";
@@ -41,8 +47,7 @@ static std::string VSHostArchitecture()
 #ifdef HOST_TOOLS_ARCH
   return HOST_TOOLS_ARCH;
 #else
-  cmsys::SystemInformation info;
-  if (info.Is64Bits()) {
+  if (VSIsWow64()) {
     return "x64";
   } else {
     return "x86";