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
46QT_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
69class QString;
70class Q_CORE_EXPORT QSysInfo {
71public:
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
213QT_WARNING_PUSH
214QT_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
229QT_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
249QT_END_NAMESPACE
250#endif // QSYSINFO_H
251