summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKWSys Upstream <kwrobot@kitware.com>2017-03-07 18:33:51 (GMT)
committerBrad King <brad.king@kitware.com>2017-03-10 21:24:52 (GMT)
commit8ba8b5537cdee251d412c331267822badc8fafdc (patch)
treee64a8e0e8def4187d7f6ac76245d639df9c5b0cc
parentced3396d048c8389327f661a99986fef51ee8a3f (diff)
downloadCMake-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.cxx20
-rw-r--r--SystemInformation.hxx.in1
-rw-r--r--SystemTools.cxx2
-rw-r--r--testSystemInformation.cxx2
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);