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