| 1 | /**************************************************************************** |
| 2 | ** |
| 3 | ** Copyright (C) 2016 The Qt Company Ltd. |
| 4 | ** Copyright (C) 2016 Intel Corporation. |
| 5 | ** Contact: https://www.qt.io/licensing/ |
| 6 | ** |
| 7 | ** This file is part of the QtCore module of the Qt Toolkit. |
| 8 | ** |
| 9 | ** $QT_BEGIN_LICENSE:LGPL$ |
| 10 | ** Commercial License Usage |
| 11 | ** Licensees holding valid commercial Qt licenses may use this file in |
| 12 | ** accordance with the commercial license agreement provided with the |
| 13 | ** Software or, alternatively, in accordance with the terms contained in |
| 14 | ** a written agreement between you and The Qt Company. For licensing terms |
| 15 | ** and conditions see https://www.qt.io/terms-conditions. For further |
| 16 | ** information use the contact form at https://www.qt.io/contact-us. |
| 17 | ** |
| 18 | ** GNU Lesser General Public License Usage |
| 19 | ** Alternatively, this file may be used under the terms of the GNU Lesser |
| 20 | ** General Public License version 3 as published by the Free Software |
| 21 | ** Foundation and appearing in the file LICENSE.LGPL3 included in the |
| 22 | ** packaging of this file. Please review the following information to |
| 23 | ** ensure the GNU Lesser General Public License version 3 requirements |
| 24 | ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. |
| 25 | ** |
| 26 | ** GNU General Public License Usage |
| 27 | ** Alternatively, this file may be used under the terms of the GNU |
| 28 | ** General Public License version 2.0 or (at your option) the GNU General |
| 29 | ** Public license version 3 or any later version approved by the KDE Free |
| 30 | ** Qt Foundation. The licenses are as published by the Free Software |
| 31 | ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 |
| 32 | ** included in the packaging of this file. Please review the following |
| 33 | ** information to ensure the GNU General Public License requirements will |
| 34 | ** be met: https://www.gnu.org/licenses/gpl-2.0.html and |
| 35 | ** https://www.gnu.org/licenses/gpl-3.0.html. |
| 36 | ** |
| 37 | ** $QT_END_LICENSE$ |
| 38 | ** |
| 39 | ****************************************************************************/ |
| 40 | |
| 41 | #include <QtCore/qglobal.h> |
| 42 | |
| 43 | #ifndef QSYSINFO_H |
| 44 | #define QSYSINFO_H |
| 45 | |
| 46 | QT_BEGIN_NAMESPACE |
| 47 | |
| 48 | /* |
| 49 | System information |
| 50 | */ |
| 51 | |
| 52 | /* |
| 53 | * GCC (5-7) has a regression that causes it to emit wrong deprecated warnings: |
| 54 | * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77849 |
| 55 | * |
| 56 | * Try to work around it by defining our own macro. |
| 57 | */ |
| 58 | |
| 59 | #ifdef QT_SYSINFO_DEPRECATED_X |
| 60 | #error "QT_SYSINFO_DEPRECATED_X already defined" |
| 61 | #endif |
| 62 | |
| 63 | #ifdef Q_CC_GNU |
| 64 | #define QT_SYSINFO_DEPRECATED_X(x) |
| 65 | #else |
| 66 | #define QT_SYSINFO_DEPRECATED_X(x) QT_DEPRECATED_X(x) |
| 67 | #endif |
| 68 | |
| 69 | class QString; |
| 70 | class Q_CORE_EXPORT QSysInfo { |
| 71 | public: |
| 72 | enum Sizes { |
| 73 | WordSize = (sizeof(void *)<<3) |
| 74 | }; |
| 75 | |
| 76 | #if defined(QT_BUILD_QMAKE) |
| 77 | enum Endian { |
| 78 | BigEndian, |
| 79 | LittleEndian |
| 80 | }; |
| 81 | /* needed to bootstrap qmake */ |
| 82 | static const int ByteOrder; |
| 83 | #elif defined(Q_BYTE_ORDER) |
| 84 | enum Endian { |
| 85 | BigEndian, |
| 86 | LittleEndian |
| 87 | |
| 88 | # ifdef Q_QDOC |
| 89 | , ByteOrder = BigEndian or LittleEndian |
| 90 | # elif Q_BYTE_ORDER == Q_BIG_ENDIAN |
| 91 | , ByteOrder = BigEndian |
| 92 | # elif Q_BYTE_ORDER == Q_LITTLE_ENDIAN |
| 93 | , ByteOrder = LittleEndian |
| 94 | # else |
| 95 | # error "Undefined byte order" |
| 96 | # endif |
| 97 | }; |
| 98 | #endif |
| 99 | #if QT_DEPRECATED_SINCE(5, 9) |
| 100 | enum QT_DEPRECATED_X("Use QOperatingSystemVersion" ) WinVersion { |
| 101 | WV_None = 0x0000, |
| 102 | |
| 103 | WV_32s = 0x0001, |
| 104 | WV_95 = 0x0002, |
| 105 | WV_98 = 0x0003, |
| 106 | WV_Me = 0x0004, |
| 107 | WV_DOS_based= 0x000f, |
| 108 | |
| 109 | /* codenames */ |
| 110 | WV_NT = 0x0010, |
| 111 | WV_2000 = 0x0020, |
| 112 | WV_XP = 0x0030, |
| 113 | WV_2003 = 0x0040, |
| 114 | WV_VISTA = 0x0080, |
| 115 | WV_WINDOWS7 = 0x0090, |
| 116 | WV_WINDOWS8 = 0x00a0, |
| 117 | WV_WINDOWS8_1 = 0x00b0, |
| 118 | WV_WINDOWS10 = 0x00c0, |
| 119 | WV_NT_based = 0x00f0, |
| 120 | |
| 121 | /* version numbers */ |
| 122 | WV_4_0 = WV_NT, |
| 123 | WV_5_0 = WV_2000, |
| 124 | WV_5_1 = WV_XP, |
| 125 | WV_5_2 = WV_2003, |
| 126 | WV_6_0 = WV_VISTA, |
| 127 | WV_6_1 = WV_WINDOWS7, |
| 128 | WV_6_2 = WV_WINDOWS8, |
| 129 | WV_6_3 = WV_WINDOWS8_1, |
| 130 | WV_10_0 = WV_WINDOWS10, |
| 131 | |
| 132 | WV_CE = 0x0100, |
| 133 | WV_CENET = 0x0200, |
| 134 | WV_CE_5 = 0x0300, |
| 135 | WV_CE_6 = 0x0400, |
| 136 | WV_CE_based = 0x0f00 |
| 137 | }; |
| 138 | |
| 139 | #define Q_MV_OSX(major, minor) (major == 10 ? minor + 2 : (major == 9 ? 1 : 0)) |
| 140 | #define Q_MV_IOS(major, minor) (QSysInfo::MV_IOS | major << 4 | minor) |
| 141 | #define Q_MV_TVOS(major, minor) (QSysInfo::MV_TVOS | major << 4 | minor) |
| 142 | #define Q_MV_WATCHOS(major, minor) (QSysInfo::MV_WATCHOS | major << 4 | minor) |
| 143 | enum QT_DEPRECATED_X("Use QOperatingSystemVersion" ) MacVersion { |
| 144 | MV_None = 0xffff, |
| 145 | MV_Unknown = 0x0000, |
| 146 | |
| 147 | /* version */ |
| 148 | MV_9 = Q_MV_OSX(9, 0), |
| 149 | MV_10_0 = Q_MV_OSX(10, 0), |
| 150 | MV_10_1 = Q_MV_OSX(10, 1), |
| 151 | MV_10_2 = Q_MV_OSX(10, 2), |
| 152 | MV_10_3 = Q_MV_OSX(10, 3), |
| 153 | MV_10_4 = Q_MV_OSX(10, 4), |
| 154 | MV_10_5 = Q_MV_OSX(10, 5), |
| 155 | MV_10_6 = Q_MV_OSX(10, 6), |
| 156 | MV_10_7 = Q_MV_OSX(10, 7), |
| 157 | MV_10_8 = Q_MV_OSX(10, 8), |
| 158 | MV_10_9 = Q_MV_OSX(10, 9), |
| 159 | MV_10_10 = Q_MV_OSX(10, 10), |
| 160 | MV_10_11 = Q_MV_OSX(10, 11), |
| 161 | MV_10_12 = Q_MV_OSX(10, 12), |
| 162 | |
| 163 | /* codenames */ |
| 164 | MV_CHEETAH = MV_10_0, |
| 165 | MV_PUMA = MV_10_1, |
| 166 | MV_JAGUAR = MV_10_2, |
| 167 | MV_PANTHER = MV_10_3, |
| 168 | MV_TIGER = MV_10_4, |
| 169 | MV_LEOPARD = MV_10_5, |
| 170 | MV_SNOWLEOPARD = MV_10_6, |
| 171 | MV_LION = MV_10_7, |
| 172 | MV_MOUNTAINLION = MV_10_8, |
| 173 | MV_MAVERICKS = MV_10_9, |
| 174 | MV_YOSEMITE = MV_10_10, |
| 175 | MV_ELCAPITAN = MV_10_11, |
| 176 | MV_SIERRA = MV_10_12, |
| 177 | |
| 178 | /* iOS */ |
| 179 | MV_IOS = 1 << 8, |
| 180 | MV_IOS_4_3 = Q_MV_IOS(4, 3), |
| 181 | MV_IOS_5_0 = Q_MV_IOS(5, 0), |
| 182 | MV_IOS_5_1 = Q_MV_IOS(5, 1), |
| 183 | MV_IOS_6_0 = Q_MV_IOS(6, 0), |
| 184 | MV_IOS_6_1 = Q_MV_IOS(6, 1), |
| 185 | MV_IOS_7_0 = Q_MV_IOS(7, 0), |
| 186 | MV_IOS_7_1 = Q_MV_IOS(7, 1), |
| 187 | MV_IOS_8_0 = Q_MV_IOS(8, 0), |
| 188 | MV_IOS_8_1 = Q_MV_IOS(8, 1), |
| 189 | MV_IOS_8_2 = Q_MV_IOS(8, 2), |
| 190 | MV_IOS_8_3 = Q_MV_IOS(8, 3), |
| 191 | MV_IOS_8_4 = Q_MV_IOS(8, 4), |
| 192 | MV_IOS_9_0 = Q_MV_IOS(9, 0), |
| 193 | MV_IOS_9_1 = Q_MV_IOS(9, 1), |
| 194 | MV_IOS_9_2 = Q_MV_IOS(9, 2), |
| 195 | MV_IOS_9_3 = Q_MV_IOS(9, 3), |
| 196 | MV_IOS_10_0 = Q_MV_IOS(10, 0), |
| 197 | |
| 198 | /* tvOS */ |
| 199 | MV_TVOS = 1 << 9, |
| 200 | MV_TVOS_9_0 = Q_MV_TVOS(9, 0), |
| 201 | MV_TVOS_9_1 = Q_MV_TVOS(9, 1), |
| 202 | MV_TVOS_9_2 = Q_MV_TVOS(9, 2), |
| 203 | MV_TVOS_10_0 = Q_MV_TVOS(10, 0), |
| 204 | |
| 205 | /* watchOS */ |
| 206 | MV_WATCHOS = 1 << 10, |
| 207 | MV_WATCHOS_2_0 = Q_MV_WATCHOS(2, 0), |
| 208 | MV_WATCHOS_2_1 = Q_MV_WATCHOS(2, 1), |
| 209 | MV_WATCHOS_2_2 = Q_MV_WATCHOS(2, 2), |
| 210 | MV_WATCHOS_3_0 = Q_MV_WATCHOS(3, 0) |
| 211 | }; |
| 212 | |
| 213 | QT_WARNING_PUSH |
| 214 | QT_WARNING_DISABLE_DEPRECATED |
| 215 | #if defined(Q_OS_WIN) || defined(Q_OS_CYGWIN) |
| 216 | QT_SYSINFO_DEPRECATED_X("Use QOperatingSystemVersion::current()" ) static const WinVersion WindowsVersion; |
| 217 | QT_SYSINFO_DEPRECATED_X("Use QOperatingSystemVersion::current()" ) static WinVersion windowsVersion(); |
| 218 | #else |
| 219 | QT_SYSINFO_DEPRECATED_X("Use QOperatingSystemVersion::current()" ) static const WinVersion WindowsVersion = WV_None; |
| 220 | QT_SYSINFO_DEPRECATED_X("Use QOperatingSystemVersion::current()" ) static WinVersion windowsVersion() { return WV_None; } |
| 221 | #endif |
| 222 | #if defined(Q_OS_MAC) |
| 223 | QT_SYSINFO_DEPRECATED_X("Use QOperatingSystemVersion::current()" ) static const MacVersion MacintoshVersion; |
| 224 | QT_SYSINFO_DEPRECATED_X("Use QOperatingSystemVersion::current()" ) static MacVersion macVersion(); |
| 225 | #else |
| 226 | QT_SYSINFO_DEPRECATED_X("Use QOperatingSystemVersion::current()" ) static const MacVersion MacintoshVersion = MV_None; |
| 227 | QT_SYSINFO_DEPRECATED_X("Use QOperatingSystemVersion::current()" ) static MacVersion macVersion() { return MV_None; } |
| 228 | #endif |
| 229 | QT_WARNING_POP |
| 230 | #endif // QT_DEPRECATED_SINCE(5, 9) |
| 231 | |
| 232 | static QString buildCpuArchitecture(); |
| 233 | static QString currentCpuArchitecture(); |
| 234 | static QString buildAbi(); |
| 235 | |
| 236 | static QString kernelType(); |
| 237 | static QString kernelVersion(); |
| 238 | static QString productType(); |
| 239 | static QString productVersion(); |
| 240 | static QString prettyProductName(); |
| 241 | |
| 242 | static QString machineHostName(); |
| 243 | static QByteArray machineUniqueId(); |
| 244 | static QByteArray bootUniqueId(); |
| 245 | }; |
| 246 | |
| 247 | #undef QT_SYSINFO_DEPRECATED_X |
| 248 | |
| 249 | QT_END_NAMESPACE |
| 250 | #endif // QSYSINFO_H |
| 251 | |