diff options
author | KWSys Upstream <kwrobot@kitware.com> | 2017-03-07 18:33:51 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2017-03-10 21:24:52 (GMT) |
commit | 8ba8b5537cdee251d412c331267822badc8fafdc (patch) | |
tree | e64a8e0e8def4187d7f6ac76245d639df9c5b0cc | |
parent | ced3396d048c8389327f661a99986fef51ee8a3f (diff) | |
download | CMake-8ba8b5537cdee251d412c331267822badc8fafdc.zip CMake-8ba8b5537cdee251d412c331267822badc8fafdc.tar.gz CMake-8ba8b5537cdee251d412c331267822badc8fafdc.tar.bz2 |
KWSys 2017-03-07 (5da8cfe0)
Code extracted from:
https://gitlab.kitware.com/utils/kwsys.git
at commit 5da8cfe0544f95697808b0b46ed3183621902f0b (master).
Upstream Shortlog
-----------------
Ben Boeckel (1):
c5529406 SystemTools: use std::string::empty
Robert Maynard (1):
27e64d34 SystemInformation: Teach Is64Bits to check host architecture at runtime
-rw-r--r-- | SystemInformation.cxx | 20 | ||||
-rw-r--r-- | SystemInformation.hxx.in | 1 | ||||
-rw-r--r-- | SystemTools.cxx | 2 | ||||
-rw-r--r-- | testSystemInformation.cxx | 2 |
4 files changed, 22 insertions, 3 deletions
diff --git a/SystemInformation.cxx b/SystemInformation.cxx index 86f7552..93312e9 100644 --- a/SystemInformation.cxx +++ b/SystemInformation.cxx @@ -539,6 +539,7 @@ protected: std::string OSRelease; std::string OSVersion; std::string OSPlatform; + bool OSIs64Bit; }; SystemInformation::SystemInformation() @@ -1499,6 +1500,7 @@ SystemInformationImplementation::SystemInformationImplementation() this->OSRelease = ""; this->OSVersion = ""; this->OSPlatform = ""; + this->OSIs64Bit = (sizeof(void*) == 8); } SystemInformationImplementation::~SystemInformationImplementation() @@ -5320,10 +5322,20 @@ bool SystemInformationImplementation::QueryOSInformation() this->Hostname = name; const char* arch = getenv("PROCESSOR_ARCHITECTURE"); + const char* wow64 = getenv("PROCESSOR_ARCHITEW6432"); if (arch) { this->OSPlatform = arch; } + if (wow64) { + // the PROCESSOR_ARCHITEW6432 is only defined when running 32bit programs + // on 64bit OS + this->OSIs64Bit = true; + } else if (arch) { + // all values other than x86 map to 64bit architectures + this->OSIs64Bit = (strncmp(arch, "x86", 3) != 0); + } + #else struct utsname unameInfo; @@ -5334,6 +5346,12 @@ bool SystemInformationImplementation::QueryOSInformation() this->OSRelease = unameInfo.release; this->OSVersion = unameInfo.version; this->OSPlatform = unameInfo.machine; + + // This is still insufficient to capture 64bit architecture such + // powerpc and possible mips and sparc + if (this->OSPlatform.find_first_of("64") != std::string::npos) { + this->OSIs64Bit = true; + } } #ifdef __APPLE__ @@ -5387,6 +5405,6 @@ void SystemInformationImplementation::TrimNewline(std::string& output) /** Return true if the machine is 64 bits */ bool SystemInformationImplementation::Is64Bits() { - return (sizeof(void*) == 8); + return this->OSIs64Bit; } } diff --git a/SystemInformation.hxx.in b/SystemInformation.hxx.in index cc09393..54e7fc1 100644 --- a/SystemInformation.hxx.in +++ b/SystemInformation.hxx.in @@ -65,6 +65,7 @@ public: // on this system. std::string GetOSDescription(); + // returns if the operating system is 64bit or not. bool Is64Bits(); unsigned int GetNumberOfLogicalCPU(); diff --git a/SystemTools.cxx b/SystemTools.cxx index 8c82ec1..65b7b26 100644 --- a/SystemTools.cxx +++ b/SystemTools.cxx @@ -3331,7 +3331,7 @@ std::string SystemTools::CollapseFullPath(const std::string& in_path, SystemTools::SplitPath(in_path, path_components); // If the input path is relative, start with a base path. - if (path_components[0].length() == 0) { + if (path_components[0].empty()) { std::vector<std::string> base_components; if (in_base) { // Use the given base path. diff --git a/testSystemInformation.cxx b/testSystemInformation.cxx index 86a1e1e..3a9217f 100644 --- a/testSystemInformation.cxx +++ b/testSystemInformation.cxx @@ -52,6 +52,7 @@ int testSystemInformation(int, char* []) printMethod(info, GetOSRelease); printMethod(info, GetOSVersion); printMethod(info, GetOSPlatform); + printMethod(info, Is64Bits); printMethod(info, GetVendorString); printMethod(info, GetVendorID); printMethod(info, GetTypeID); @@ -63,7 +64,6 @@ int testSystemInformation(int, char* []) printMethod2(info, GetProcessorCacheSize, "KB"); printMethod(info, GetLogicalProcessorsPerPhysical); printMethod2(info, GetProcessorClockFrequency, "MHz"); - printMethod(info, Is64Bits); printMethod(info, GetNumberOfLogicalCPU); printMethod(info, GetNumberOfPhysicalCPU); printMethod(info, DoesCPUSupportCPUID); |