1/****************************************************************************
2**
3** Copyright (C) 2019 The Qt Company Ltd.
4** Copyright (C) 2019 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#ifndef QGLOBAL_H
42# include <QtCore/qglobal.h>
43#endif
44
45#ifndef QSYSTEMDETECTION_H
46#define QSYSTEMDETECTION_H
47
48/*
49 The operating system, must be one of: (Q_OS_x)
50
51 DARWIN - Any Darwin system (macOS, iOS, watchOS, tvOS)
52 MACOS - macOS
53 IOS - iOS
54 WATCHOS - watchOS
55 TVOS - tvOS
56 WIN32 - Win32 (Windows 2000/XP/Vista/7 and Windows Server 2003/2008)
57 WINRT - WinRT (Windows Runtime)
58 CYGWIN - Cygwin
59 SOLARIS - Sun Solaris
60 HPUX - HP-UX
61 LINUX - Linux [has variants]
62 FREEBSD - FreeBSD [has variants]
63 NETBSD - NetBSD
64 OPENBSD - OpenBSD
65 INTERIX - Interix
66 AIX - AIX
67 HURD - GNU Hurd
68 QNX - QNX [has variants]
69 QNX6 - QNX RTP 6.1
70 LYNX - LynxOS
71 BSD4 - Any BSD 4.4 system
72 UNIX - Any UNIX BSD/SYSV system
73 ANDROID - Android platform
74 HAIKU - Haiku
75 WEBOS - LG WebOS
76
77 The following operating systems have variants:
78 LINUX - both Q_OS_LINUX and Q_OS_ANDROID are defined when building for Android
79 - only Q_OS_LINUX is defined if building for other Linux systems
80 MACOS - both Q_OS_BSD4 and Q_OS_IOS are defined when building for iOS
81 - both Q_OS_BSD4 and Q_OS_MACOS are defined when building for macOS
82 FREEBSD - Q_OS_FREEBSD is defined only when building for FreeBSD with a BSD userland
83 - Q_OS_FREEBSD_KERNEL is always defined on FreeBSD, even if the userland is from GNU
84*/
85
86#if defined(__APPLE__) && (defined(__GNUC__) || defined(__xlC__) || defined(__xlc__))
87# include <TargetConditionals.h>
88# if defined(TARGET_OS_MAC) && TARGET_OS_MAC
89# define Q_OS_DARWIN
90# define Q_OS_BSD4
91# ifdef __LP64__
92# define Q_OS_DARWIN64
93# else
94# define Q_OS_DARWIN32
95# endif
96# if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
97# define QT_PLATFORM_UIKIT
98# if defined(TARGET_OS_WATCH) && TARGET_OS_WATCH
99# define Q_OS_WATCHOS
100# elif defined(TARGET_OS_TV) && TARGET_OS_TV
101# define Q_OS_TVOS
102# else
103# // TARGET_OS_IOS is only available in newer SDKs,
104# // so assume any other iOS-based platform is iOS for now
105# define Q_OS_IOS
106# endif
107# else
108# // TARGET_OS_OSX is only available in newer SDKs,
109# // so assume any non iOS-based platform is macOS for now
110# define Q_OS_MACOS
111# endif
112# else
113# error "Qt has not been ported to this Apple platform - see http://www.qt.io/developers"
114# endif
115#elif defined(__WEBOS__)
116# define Q_OS_WEBOS
117# define Q_OS_LINUX
118#elif defined(__ANDROID__) || defined(ANDROID)
119# define Q_OS_ANDROID
120# define Q_OS_LINUX
121#elif defined(__CYGWIN__)
122# define Q_OS_CYGWIN
123#elif !defined(SAG_COM) && (!defined(WINAPI_FAMILY) || WINAPI_FAMILY==WINAPI_FAMILY_DESKTOP_APP) && (defined(WIN64) || defined(_WIN64) || defined(__WIN64__))
124# define Q_OS_WIN32
125# define Q_OS_WIN64
126#elif !defined(SAG_COM) && (defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__))
127# if defined(WINAPI_FAMILY)
128# ifndef WINAPI_FAMILY_PC_APP
129# define WINAPI_FAMILY_PC_APP WINAPI_FAMILY_APP
130# endif
131# if defined(WINAPI_FAMILY_PHONE_APP) && WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP
132# define Q_OS_WINRT
133# elif WINAPI_FAMILY==WINAPI_FAMILY_PC_APP
134# define Q_OS_WINRT
135# else
136# define Q_OS_WIN32
137# endif
138# else
139# define Q_OS_WIN32
140# endif
141#elif defined(__sun) || defined(sun)
142# define Q_OS_SOLARIS
143#elif defined(hpux) || defined(__hpux)
144# define Q_OS_HPUX
145#elif defined(__native_client__)
146# define Q_OS_NACL
147#elif defined(__EMSCRIPTEN__)
148# define Q_OS_WASM
149#elif defined(__linux__) || defined(__linux)
150# define Q_OS_LINUX
151#elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__FreeBSD_kernel__)
152# ifndef __FreeBSD_kernel__
153# define Q_OS_FREEBSD
154# endif
155# define Q_OS_FREEBSD_KERNEL
156# define Q_OS_BSD4
157#elif defined(__NetBSD__)
158# define Q_OS_NETBSD
159# define Q_OS_BSD4
160#elif defined(__OpenBSD__)
161# define Q_OS_OPENBSD
162# define Q_OS_BSD4
163#elif defined(__INTERIX)
164# define Q_OS_INTERIX
165# define Q_OS_BSD4
166#elif defined(_AIX)
167# define Q_OS_AIX
168#elif defined(__Lynx__)
169# define Q_OS_LYNX
170#elif defined(__GNU__)
171# define Q_OS_HURD
172#elif defined(__QNXNTO__)
173# define Q_OS_QNX
174#elif defined(__INTEGRITY)
175# define Q_OS_INTEGRITY
176#elif defined(__rtems__)
177# define Q_OS_RTEMS
178#elif defined(VXWORKS) /* there is no "real" VxWorks define - this has to be set in the mkspec! */
179# define Q_OS_VXWORKS
180#elif defined(__HAIKU__)
181# define Q_OS_HAIKU
182#elif defined(__MAKEDEPEND__)
183#else
184# error "Qt has not been ported to this OS - see http://www.qt-project.org/"
185#endif
186
187#if defined(Q_OS_WIN32) || defined(Q_OS_WIN64) || defined(Q_OS_WINRT)
188# define Q_OS_WINDOWS
189# define Q_OS_WIN
190# if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
191// On Windows, pointers to dllimport'ed variables are not constant expressions,
192// so to keep to certain initializations (like QMetaObject) constexpr, we need
193// to use functions instead.
194# define QT_NO_DATA_RELOCATION
195# endif
196#endif
197
198#if defined(Q_OS_WIN)
199# undef Q_OS_UNIX
200#elif !defined(Q_OS_UNIX)
201# define Q_OS_UNIX
202#endif
203
204// Compatibility synonyms
205#ifdef Q_OS_DARWIN
206#define Q_OS_MAC
207#endif
208#ifdef Q_OS_DARWIN32
209#define Q_OS_MAC32
210#endif
211#ifdef Q_OS_DARWIN64
212#define Q_OS_MAC64
213#endif
214#ifdef Q_OS_MACOS
215#define Q_OS_MACX
216#define Q_OS_OSX
217#endif
218
219#ifdef Q_OS_DARWIN
220# include <Availability.h>
221# include <AvailabilityMacros.h>
222#
223# ifdef Q_OS_MACOS
224# if !defined(__MAC_OS_X_VERSION_MIN_REQUIRED) || __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_6
225# undef __MAC_OS_X_VERSION_MIN_REQUIRED
226# define __MAC_OS_X_VERSION_MIN_REQUIRED __MAC_10_6
227# endif
228# if !defined(MAC_OS_X_VERSION_MIN_REQUIRED) || MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6
229# undef MAC_OS_X_VERSION_MIN_REQUIRED
230# define MAC_OS_X_VERSION_MIN_REQUIRED MAC_OS_X_VERSION_10_6
231# endif
232# endif
233#
234# // Numerical checks are preferred to named checks, but to be safe
235# // we define the missing version names in case Qt uses them.
236#
237# if !defined(__MAC_10_11)
238# define __MAC_10_11 101100
239# endif
240# if !defined(__MAC_10_12)
241# define __MAC_10_12 101200
242# endif
243# if !defined(__MAC_10_13)
244# define __MAC_10_13 101300
245# endif
246# if !defined(__MAC_10_14)
247# define __MAC_10_14 101400
248# endif
249# if !defined(__MAC_10_15)
250# define __MAC_10_15 101500
251# endif
252# if !defined(__MAC_10_16)
253# define __MAC_10_16 101600
254# endif
255# if !defined(MAC_OS_X_VERSION_10_11)
256# define MAC_OS_X_VERSION_10_11 __MAC_10_11
257# endif
258# if !defined(MAC_OS_X_VERSION_10_12)
259# define MAC_OS_X_VERSION_10_12 __MAC_10_12
260# endif
261# if !defined(MAC_OS_X_VERSION_10_13)
262# define MAC_OS_X_VERSION_10_13 __MAC_10_13
263# endif
264# if !defined(MAC_OS_X_VERSION_10_14)
265# define MAC_OS_X_VERSION_10_14 __MAC_10_14
266# endif
267# if !defined(MAC_OS_X_VERSION_10_15)
268# define MAC_OS_X_VERSION_10_15 __MAC_10_15
269# endif
270# if !defined(MAC_OS_X_VERSION_10_16)
271# define MAC_OS_X_VERSION_10_16 __MAC_10_16
272# endif
273#
274# if !defined(__IPHONE_10_0)
275# define __IPHONE_10_0 100000
276# endif
277# if !defined(__IPHONE_10_1)
278# define __IPHONE_10_1 100100
279# endif
280# if !defined(__IPHONE_10_2)
281# define __IPHONE_10_2 100200
282# endif
283# if !defined(__IPHONE_10_3)
284# define __IPHONE_10_3 100300
285# endif
286# if !defined(__IPHONE_11_0)
287# define __IPHONE_11_0 110000
288# endif
289# if !defined(__IPHONE_12_0)
290# define __IPHONE_12_0 120000
291# endif
292#endif
293
294#ifdef __LSB_VERSION__
295# if __LSB_VERSION__ < 40
296# error "This version of the Linux Standard Base is unsupported"
297# endif
298#ifndef QT_LINUXBASE
299# define QT_LINUXBASE
300#endif
301#endif
302
303#endif // QSYSTEMDETECTION_H
304