mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-30 22:20:21 +00:00
Clean up SubsurfaceSysInfo by inheriting QSysInfo
Most of the mechanics are already in QSysInfo, we only need to add the extra details that were missing until Qt 5.4. This greatly simplifies the code and will allow us to update it more easily from upstream. Signed-off-by: Thiago Macieira <thiago@macieira.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
44f872cc59
commit
aad393aa4f
2 changed files with 17 additions and 268 deletions
|
@ -46,6 +46,10 @@
|
|||
#include <QFile>
|
||||
#include <QSettings>
|
||||
|
||||
#ifndef QStringLiteral
|
||||
# define QStringLiteral QString::fromUtf8
|
||||
#endif
|
||||
|
||||
#ifdef Q_OS_UNIX
|
||||
#include <sys/utsname.h>
|
||||
#endif
|
||||
|
@ -55,6 +59,8 @@
|
|||
#include <CoreServices/CoreServices.h>
|
||||
#endif
|
||||
|
||||
// --- this is a copy of Qt 5.4's src/corelib/global/archdetect.cpp ---
|
||||
|
||||
// main part: processor type
|
||||
#if defined(Q_PROCESSOR_ALPHA)
|
||||
# define ARCH_PROCESSOR "alpha"
|
||||
|
@ -126,24 +132,9 @@
|
|||
|
||||
#define ARCH_FULL ARCH_PROCESSOR "-" ARCH_ENDIANNESS "-" ARCH_POINTER ARCH_ABI
|
||||
|
||||
// --- end of archdetect.cpp ---
|
||||
|
||||
#if defined(Q_OS_OSX)
|
||||
|
||||
SubsurfaceSysInfo::MacVersion SubsurfaceSysInfo::macVersion()
|
||||
{
|
||||
#if defined(Q_OS_OSX)
|
||||
SInt32 gestalt_version;
|
||||
if (Gestalt(gestaltSystemVersionMinor, &gestalt_version) == noErr) {
|
||||
// add 2 because OS X 10.0 is 0x02 in the enum
|
||||
return SubsurfaceSysInfo::MacVersion(gestalt_version + 2);
|
||||
}
|
||||
#elif defined(Q_OS_IOS)
|
||||
return qt_ios_version(); // qtcore_mac_objc.mm
|
||||
#endif
|
||||
return SubsurfaceSysInfo::MV_Unknown;
|
||||
}
|
||||
const SubsurfaceSysInfo::MacVersion SubsurfaceSysInfo::MacintoshVersion = SubsurfaceSysInfo::macVersion();
|
||||
#elif defined(Q_OS_WIN) || defined(Q_OS_CYGWIN) || defined(Q_OS_WINCE) || defined(Q_OS_WINRT)
|
||||
#if defined(Q_OS_WIN) || defined(Q_OS_CYGWIN) || defined(Q_OS_WINCE) || defined(Q_OS_WINRT)
|
||||
|
||||
QT_BEGIN_INCLUDE_NAMESPACE
|
||||
#include "qt_windows.h"
|
||||
|
@ -181,118 +172,6 @@ static inline OSVERSIONINFO winOsVersion()
|
|||
}
|
||||
#endif // !Q_OS_WINRT
|
||||
|
||||
SubsurfaceSysInfo::WinVersion SubsurfaceSysInfo::windowsVersion()
|
||||
{
|
||||
#ifndef VER_PLATFORM_WIN32s
|
||||
#define VER_PLATFORM_WIN32s 0
|
||||
#endif
|
||||
#ifndef VER_PLATFORM_WIN32_WINDOWS
|
||||
#define VER_PLATFORM_WIN32_WINDOWS 1
|
||||
#endif
|
||||
#ifndef VER_PLATFORM_WIN32_NT
|
||||
#define VER_PLATFORM_WIN32_NT 2
|
||||
#endif
|
||||
#ifndef VER_PLATFORM_WIN32_CE
|
||||
#define VER_PLATFORM_WIN32_CE 3
|
||||
#endif
|
||||
|
||||
static SubsurfaceSysInfo::WinVersion winver;
|
||||
if (winver)
|
||||
return winver;
|
||||
#ifdef Q_OS_WINRT
|
||||
winver = SubsurfaceSysInfo::WV_WINDOWS8;
|
||||
#else
|
||||
winver = SubsurfaceSysInfo::WV_NT;
|
||||
const OSVERSIONINFO osver = winOsVersion();
|
||||
#ifdef Q_OS_WINCE
|
||||
DWORD qt_cever = 0;
|
||||
qt_cever = osver.dwMajorVersion * 100;
|
||||
qt_cever += osver.dwMinorVersion * 10;
|
||||
#endif
|
||||
switch (osver.dwPlatformId) {
|
||||
case VER_PLATFORM_WIN32s:
|
||||
winver = SubsurfaceSysInfo::WV_32s;
|
||||
break;
|
||||
case VER_PLATFORM_WIN32_WINDOWS:
|
||||
// We treat Windows Me (minor 90) the same as Windows 98
|
||||
if (osver.dwMinorVersion == 90)
|
||||
winver = SubsurfaceSysInfo::WV_Me;
|
||||
else if (osver.dwMinorVersion == 10)
|
||||
winver = SubsurfaceSysInfo::WV_98;
|
||||
else
|
||||
winver = SubsurfaceSysInfo::WV_95;
|
||||
break;
|
||||
#ifdef Q_OS_WINCE
|
||||
case VER_PLATFORM_WIN32_CE:
|
||||
if (qt_cever >= 600)
|
||||
winver = SubsurfaceSysInfo::WV_CE_6;
|
||||
if (qt_cever >= 500)
|
||||
winver = SubsurfaceSysInfo::WV_CE_5;
|
||||
else if (qt_cever >= 400)
|
||||
winver = SubsurfaceSysInfo::WV_CENET;
|
||||
else
|
||||
winver = SubsurfaceSysInfo::WV_CE;
|
||||
break;
|
||||
#endif
|
||||
default: // VER_PLATFORM_WIN32_NT
|
||||
if (osver.dwMajorVersion < 5) {
|
||||
winver = SubsurfaceSysInfo::WV_NT;
|
||||
} else if (osver.dwMajorVersion == 5 && osver.dwMinorVersion == 0) {
|
||||
winver = SubsurfaceSysInfo::WV_2000;
|
||||
} else if (osver.dwMajorVersion == 5 && osver.dwMinorVersion == 1) {
|
||||
winver = SubsurfaceSysInfo::WV_XP;
|
||||
} else if (osver.dwMajorVersion == 5 && osver.dwMinorVersion == 2) {
|
||||
winver = SubsurfaceSysInfo::WV_2003;
|
||||
} else if (osver.dwMajorVersion == 6 && osver.dwMinorVersion == 0) {
|
||||
winver = SubsurfaceSysInfo::WV_VISTA;
|
||||
} else if (osver.dwMajorVersion == 6 && osver.dwMinorVersion == 1) {
|
||||
winver = SubsurfaceSysInfo::WV_WINDOWS7;
|
||||
} else if (osver.dwMajorVersion == 6 && osver.dwMinorVersion == 2) {
|
||||
winver = SubsurfaceSysInfo::WV_WINDOWS8;
|
||||
} else if (osver.dwMajorVersion == 6 && osver.dwMinorVersion == 3) {
|
||||
winver = SubsurfaceSysInfo::WV_WINDOWS8_1;
|
||||
} else {
|
||||
qWarning("Qt: Untested Windows version %d.%d detected!",
|
||||
int(osver.dwMajorVersion), int(osver.dwMinorVersion));
|
||||
winver = SubsurfaceSysInfo::WV_NT_based;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef QT_DEBUG
|
||||
{
|
||||
QByteArray override = qgetenv("QT_WINVER_OVERRIDE");
|
||||
if (override.isEmpty())
|
||||
return winver;
|
||||
|
||||
if (override == "Me")
|
||||
winver = SubsurfaceSysInfo::WV_Me;
|
||||
if (override == "95")
|
||||
winver = SubsurfaceSysInfo::WV_95;
|
||||
else if (override == "98")
|
||||
winver = SubsurfaceSysInfo::WV_98;
|
||||
else if (override == "NT")
|
||||
winver = SubsurfaceSysInfo::WV_NT;
|
||||
else if (override == "2000")
|
||||
winver = SubsurfaceSysInfo::WV_2000;
|
||||
else if (override == "2003")
|
||||
winver = SubsurfaceSysInfo::WV_2003;
|
||||
else if (override == "XP")
|
||||
winver = SubsurfaceSysInfo::WV_XP;
|
||||
else if (override == "VISTA")
|
||||
winver = SubsurfaceSysInfo::WV_VISTA;
|
||||
else if (override == "WINDOWS7")
|
||||
winver = SubsurfaceSysInfo::WV_WINDOWS7;
|
||||
else if (override == "WINDOWS8")
|
||||
winver = SubsurfaceSysInfo::WV_WINDOWS8;
|
||||
else if (override == "WINDOWS8_1")
|
||||
winver = SubsurfaceSysInfo::WV_WINDOWS8_1;
|
||||
}
|
||||
#endif
|
||||
#endif // !Q_OS_WINRT
|
||||
|
||||
return winver;
|
||||
}
|
||||
|
||||
static const char *winVer_helper()
|
||||
{
|
||||
switch (int(SubsurfaceSysInfo::WindowsVersion)) {
|
||||
|
@ -325,9 +204,6 @@ static const char *winVer_helper()
|
|||
// unknown, future version
|
||||
return 0;
|
||||
}
|
||||
|
||||
const SubsurfaceSysInfo::WinVersion SubsurfaceSysInfo::WindowsVersion = SubsurfaceSysInfo::windowsVersion();
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(Q_OS_UNIX)
|
||||
|
@ -403,7 +279,7 @@ static QUnixOSVersion detectUnixVersion()
|
|||
}
|
||||
#endif
|
||||
|
||||
QString SubsurfaceSysInfo::unknownText()
|
||||
static QString unknownText()
|
||||
{
|
||||
return QStringLiteral("unknown");
|
||||
}
|
||||
|
@ -525,15 +401,6 @@ QString SubsurfaceSysInfo::prettyOsName()
|
|||
// get the known codenames
|
||||
const char *basename = 0;
|
||||
switch (int(MacintoshVersion)) {
|
||||
case MV_CHEETAH:
|
||||
case MV_PUMA:
|
||||
case MV_JAGUAR:
|
||||
case MV_PANTHER:
|
||||
case MV_TIGER:
|
||||
// This version of Qt does not run on those versions of OS X
|
||||
// so this case label will never be reached
|
||||
Q_UNREACHABLE();
|
||||
break;
|
||||
case MV_LEOPARD:
|
||||
basename = "Mac OS X Leopard (";
|
||||
break;
|
||||
|
@ -549,7 +416,7 @@ QString SubsurfaceSysInfo::prettyOsName()
|
|||
case MV_MAVERICKS:
|
||||
basename = "OS X Mavericks (";
|
||||
break;
|
||||
case MV_YOSEMITE:
|
||||
case 0x000C: // MV_YOSEMITE
|
||||
basename = "OS X Yosemite (";
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -43,9 +43,12 @@
|
|||
#ifndef SUBSURFACESYSINFO_H
|
||||
#define SUBSURFACESYSINFO_H
|
||||
|
||||
#include <QtGlobal>
|
||||
#include <QSysInfo>
|
||||
|
||||
#if QT_VERSION < 0x050000
|
||||
#ifdef Q_OS_MACX
|
||||
# define Q_OS_OSX
|
||||
#endif
|
||||
#if defined(__arm__) || defined(__TARGET_ARCH_ARM) || defined(_M_ARM) || defined(__arm64__)
|
||||
# define Q_PROCESSOR_ARM
|
||||
# if defined(__arm64__)
|
||||
|
@ -200,137 +203,16 @@
|
|||
#endif
|
||||
#endif // Qt < 5.0.0
|
||||
|
||||
class QString;
|
||||
class SubsurfaceSysInfo {
|
||||
class SubsurfaceSysInfo : public QSysInfo {
|
||||
public:
|
||||
enum Sizes {
|
||||
WordSize = (sizeof(void *)<<3)
|
||||
};
|
||||
|
||||
#ifndef QStringLiteral
|
||||
// no lambdas, not GCC, or GCC in C++98 mode with 4-byte wchar_t
|
||||
// fallback, return a temporary QString
|
||||
// source code is assumed to be encoded in UTF-8
|
||||
|
||||
# define QStringLiteral(str) QString::fromUtf8("" str "", sizeof(str) - 1)
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(QT_BUILD_QMAKE)
|
||||
enum Endian {
|
||||
BigEndian,
|
||||
LittleEndian
|
||||
};
|
||||
/* needed to bootstrap qmake */
|
||||
static const int ByteOrder;
|
||||
#elif defined(Q_BYTE_ORDER)
|
||||
enum Endian {
|
||||
BigEndian,
|
||||
LittleEndian
|
||||
|
||||
# ifdef Q_QDOC
|
||||
, ByteOrder = <platform-dependent>
|
||||
# elif Q_BYTE_ORDER == Q_BIG_ENDIAN
|
||||
, ByteOrder = BigEndian
|
||||
# elif Q_BYTE_ORDER == Q_LITTLE_ENDIAN
|
||||
, ByteOrder = LittleEndian
|
||||
# else
|
||||
# error "Undefined byte order"
|
||||
# endif
|
||||
};
|
||||
#endif
|
||||
#if defined(Q_OS_WIN) || defined(Q_OS_CYGWIN)
|
||||
enum WinVersion {
|
||||
WV_32s = 0x0001,
|
||||
WV_95 = 0x0002,
|
||||
WV_98 = 0x0003,
|
||||
WV_Me = 0x0004,
|
||||
WV_DOS_based= 0x000f,
|
||||
|
||||
/* codenames */
|
||||
WV_NT = 0x0010,
|
||||
WV_2000 = 0x0020,
|
||||
WV_XP = 0x0030,
|
||||
WV_2003 = 0x0040,
|
||||
WV_VISTA = 0x0080,
|
||||
WV_WINDOWS7 = 0x0090,
|
||||
WV_WINDOWS8 = 0x00a0,
|
||||
WV_WINDOWS8_1 = 0x00b0,
|
||||
WV_NT_based = 0x00f0,
|
||||
|
||||
/* version numbers */
|
||||
WV_4_0 = WV_NT,
|
||||
WV_5_0 = WV_2000,
|
||||
WV_5_1 = WV_XP,
|
||||
WV_5_2 = WV_2003,
|
||||
WV_6_0 = WV_VISTA,
|
||||
WV_6_1 = WV_WINDOWS7,
|
||||
WV_6_2 = WV_WINDOWS8,
|
||||
WV_6_3 = WV_WINDOWS8_1,
|
||||
|
||||
WV_CE = 0x0100,
|
||||
WV_CENET = 0x0200,
|
||||
WV_CE_5 = 0x0300,
|
||||
WV_CE_6 = 0x0400,
|
||||
WV_CE_based = 0x0f00
|
||||
};
|
||||
static const WinVersion WindowsVersion;
|
||||
static WinVersion windowsVersion();
|
||||
|
||||
#endif
|
||||
#ifdef Q_OS_MAC
|
||||
# define Q_MV_IOS(major, minor) (QSysInfo::MV_IOS | major << 4 | minor)
|
||||
enum MacVersion {
|
||||
MV_Unknown = 0x0000,
|
||||
|
||||
/* version */
|
||||
MV_9 = 0x0001,
|
||||
MV_10_0 = 0x0002,
|
||||
MV_10_1 = 0x0003,
|
||||
MV_10_2 = 0x0004,
|
||||
MV_10_3 = 0x0005,
|
||||
MV_10_4 = 0x0006,
|
||||
MV_10_5 = 0x0007,
|
||||
MV_10_6 = 0x0008,
|
||||
MV_10_7 = 0x0009,
|
||||
MV_10_8 = 0x000A,
|
||||
MV_10_9 = 0x000B,
|
||||
MV_10_10 = 0x000C,
|
||||
|
||||
/* codenames */
|
||||
MV_CHEETAH = MV_10_0,
|
||||
MV_PUMA = MV_10_1,
|
||||
MV_JAGUAR = MV_10_2,
|
||||
MV_PANTHER = MV_10_3,
|
||||
MV_TIGER = MV_10_4,
|
||||
MV_LEOPARD = MV_10_5,
|
||||
MV_SNOWLEOPARD = MV_10_6,
|
||||
MV_LION = MV_10_7,
|
||||
MV_MOUNTAINLION = MV_10_8,
|
||||
MV_MAVERICKS = MV_10_9,
|
||||
MV_YOSEMITE = MV_10_10,
|
||||
|
||||
/* iOS */
|
||||
MV_IOS = 1 << 8,
|
||||
MV_IOS_4_3 = Q_MV_IOS(4, 3),
|
||||
MV_IOS_5_0 = Q_MV_IOS(5, 0),
|
||||
MV_IOS_5_1 = Q_MV_IOS(5, 1),
|
||||
MV_IOS_6_0 = Q_MV_IOS(6, 0),
|
||||
MV_IOS_6_1 = Q_MV_IOS(6, 1),
|
||||
MV_IOS_7_0 = Q_MV_IOS(7, 0),
|
||||
MV_IOS_7_1 = Q_MV_IOS(7, 1),
|
||||
MV_IOS_8_0 = Q_MV_IOS(8, 0)
|
||||
};
|
||||
static const MacVersion MacintoshVersion;
|
||||
static MacVersion macVersion();
|
||||
#endif
|
||||
static QString unknownText();
|
||||
#if QT_VERSION <= 0x050400
|
||||
static QString cpuArchitecture();
|
||||
static QString fullCpuArchitecture();
|
||||
static QString osType();
|
||||
static QString osKernelVersion();
|
||||
static QString osVersion();
|
||||
static QString prettyOsName();
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue