std::string CSysInfo::GetUsedCompilerNameAndVer(void) { #if defined(__clang__) #ifdef __clang_version__ return "Clang " __clang_version__; #else // ! __clang_version__ return "Clang " XSTR_MACRO(__clang_major__) "." XSTR_MACRO(__clang_minor__) "." XSTR_MACRO(__clang_patchlevel__); #endif //! __clang_version__ #elif defined (__INTEL_COMPILER) return "Intel Compiler " XSTR_MACRO(__INTEL_COMPILER); #elif defined (__GNUC__) std::string compilerStr; #ifdef __llvm__ /* Note: this will not detect GCC + DragonEgg */ compilerStr = "llvm-gcc "; #else // __llvm__ compilerStr = "GCC "; #endif // !__llvm__ compilerStr += XSTR_MACRO(__GNUC__) "." XSTR_MACRO(__GNUC_MINOR__) "." XSTR_MACRO(__GNUC_PATCHLEVEL__); return compilerStr; #elif defined (_MSC_VER) return "MSVC " XSTR_MACRO(_MSC_FULL_VER); #else return "unknown compiler"; #endif }
std::string CSysInfo::GetBuildTargetPlatformVersion(void) { #if defined(TARGET_DARWIN_OSX) return XSTR_MACRO(__MAC_OS_X_VERSION_MIN_REQUIRED); #elif defined(TARGET_DARWIN_IOS) return XSTR_MACRO(__IPHONE_OS_VERSION_MIN_REQUIRED); #elif defined(TARGET_FREEBSD) return XSTR_MACRO(__FreeBSD_version); #elif defined(TARGET_ANDROID) return "API level " XSTR_MACRO(__ANDROID_API__); #elif defined(TARGET_LINUX) return XSTR_MACRO(LINUX_VERSION_CODE); #else return "(unknown platform)"; #endif }
std::string CSysInfo::GetBuildTargetPlatformVersion(void) { /* Expand macro before stringify */ #define STR_MACRO(x) #x #define XSTR_MACRO(x) STR_MACRO(x) #if defined(TARGET_DARWIN_OSX) return "version " XSTR_MACRO(__MAC_OS_X_VERSION_MIN_REQUIRED); #elif defined(TARGET_DARWIN_IOS) return "version " XSTR_MACRO(__IPHONE_OS_VERSION_MIN_REQUIRED); #elif defined(TARGET_FREEBSD) return "version " XSTR_MACRO(__FreeBSD_version); #elif defined(TARGET_ANDROID) return "API level " XSTR_MACRO(__ANDROID_API__); #elif defined(TARGET_LINUX) std::string ver = StringUtils::Format("%i.%i.%i", LINUX_VERSION_CODE >> 16, (LINUX_VERSION_CODE >> 8) & 0xff, LINUX_VERSION_CODE & 0xff); return ver; #elif defined(TARGET_WINDOWS) return "version " XSTR_MACRO(NTDDI_VERSION); #else return "(unknown platform)"; #endif }
std::string CSysInfo::GetBuildTargetPlatformVersionDecoded(void) { #if defined(TARGET_DARWIN_OSX) #if defined(MAC_OS_X_VERSION_10_10) && __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_10 if (__MAC_OS_X_VERSION_MIN_REQUIRED % 10) return StringUtils::Format("version %d.%d", (__MAC_OS_X_VERSION_MIN_REQUIRED / 1000) % 100, (__MAC_OS_X_VERSION_MIN_REQUIRED / 10) % 100); else return StringUtils::Format("version %d.%d.%d", (__MAC_OS_X_VERSION_MIN_REQUIRED / 1000) % 100, (__MAC_OS_X_VERSION_MIN_REQUIRED / 10) % 100, __MAC_OS_X_VERSION_MIN_REQUIRED % 10); #else // defined(MAC_OS_X_VERSION_10_10) && __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_10 if (__MAC_OS_X_VERSION_MIN_REQUIRED % 10) return StringUtils::Format("version %d.%d", (__MAC_OS_X_VERSION_MIN_REQUIRED / 100) % 100, (__MAC_OS_X_VERSION_MIN_REQUIRED / 10) % 10); else return StringUtils::Format("version %d.%d.%d", (__MAC_OS_X_VERSION_MIN_REQUIRED / 100) % 100, (__MAC_OS_X_VERSION_MIN_REQUIRED / 10) % 10, __MAC_OS_X_VERSION_MIN_REQUIRED % 10); #endif // defined(MAC_OS_X_VERSION_10_10) && __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_10 #elif defined(TARGET_DARWIN_IOS) return StringUtils::Format("version %d.%d.%d", (__IPHONE_OS_VERSION_MIN_REQUIRED / 10000) % 100, (__IPHONE_OS_VERSION_MIN_REQUIRED / 100) % 100, __IPHONE_OS_VERSION_MIN_REQUIRED % 100); #elif defined(TARGET_FREEBSD) // FIXME: should works well starting from FreeBSD 8.1 static const int major = (__FreeBSD_version / 100000) % 100; static const int minor = (__FreeBSD_version / 1000) % 100; static const int Rxx = __FreeBSD_version % 1000; if ((major < 9 && Rxx == 0) || __FreeBSD_version == 900044 || __FreeBSD_version == 901000) return StringUtils::Format("version %d.%d-RELEASE", major, minor); if (Rxx >= 500) return StringUtils::Format("version %d.%d-STABLE", major, minor); return StringUtils::Format("version %d.%d-CURRENT", major, minor); #elif defined(TARGET_ANDROID) return "API level " XSTR_MACRO(__ANDROID_API__); #elif defined(TARGET_LINUX) return StringUtils::Format("version %d.%d.%d", (LINUX_VERSION_CODE >> 16) & 0xFF , (LINUX_VERSION_CODE >> 8) & 0xFF, LINUX_VERSION_CODE & 0xFF); #elif defined(TARGET_WINDOWS) #ifdef NTDDI_VERSION std::string version(StringUtils::Format("version %d.%d", int(NTDDI_VERSION >> 24) & 0xFF, int(NTDDI_VERSION >> 16) & 0xFF)); if (SPVER(NTDDI_VERSION)) version += StringUtils::Format(" SP%d", int(SPVER(NTDDI_VERSION))); return version; #else // !NTDDI_VERSION return "(unknown Win32 platform)"; #endif // !NTDDI_VERSION #else return "(unknown platform)"; #endif }