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; macVersion()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