Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-10-28 08:52:47

0001 // Copyright (C) 2019 The Qt Company Ltd.
0002 // Copyright (C) 2019 Intel Corporation.
0003 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
0004 
0005 #if 0
0006 #pragma qt_class(QtSystemDetection)
0007 #pragma qt_sync_skip_header_check
0008 #pragma qt_sync_stop_processing
0009 #endif
0010 
0011 #ifndef QSYSTEMDETECTION_H
0012 #define QSYSTEMDETECTION_H
0013 
0014 /*
0015    The operating system, must be one of: (Q_OS_x)
0016 
0017      DARWIN   - Any Darwin system (macOS, iOS, watchOS, tvOS)
0018      MACOS    - macOS
0019      IOS      - iOS
0020      WATCHOS  - watchOS
0021      TVOS     - tvOS
0022      VISIONOS - visionOS
0023      WIN32    - Win32 (Windows 2000/XP/Vista/7 and Windows Server 2003/2008)
0024      CYGWIN   - Cygwin
0025      SOLARIS  - Sun Solaris
0026      HPUX     - HP-UX
0027      LINUX    - Linux [has variants]
0028      FREEBSD  - FreeBSD [has variants]
0029      NETBSD   - NetBSD
0030      OPENBSD  - OpenBSD
0031      INTERIX  - Interix
0032      AIX      - AIX
0033      HURD     - GNU Hurd
0034      QNX      - QNX [has variants]
0035      QNX6     - QNX RTP 6.1
0036      LYNX     - LynxOS
0037      BSD4     - Any BSD 4.4 system
0038      UNIX     - Any UNIX BSD/SYSV system
0039      ANDROID  - Android platform
0040      HAIKU    - Haiku
0041      WEBOS    - LG WebOS
0042      WASM     - WebAssembly
0043 
0044    The following operating systems have variants:
0045      LINUX    - both Q_OS_LINUX and Q_OS_ANDROID are defined when building for Android
0046               - only Q_OS_LINUX is defined if building for other Linux systems
0047      MACOS    - both Q_OS_BSD4 and Q_OS_IOS are defined when building for iOS
0048               - both Q_OS_BSD4 and Q_OS_MACOS are defined when building for macOS
0049      FREEBSD  - Q_OS_FREEBSD is defined only when building for FreeBSD with a BSD userland
0050               - Q_OS_FREEBSD_KERNEL is always defined on FreeBSD, even if the userland is from GNU
0051 */
0052 
0053 #if defined(__APPLE__) && (defined(__GNUC__) || defined(__xlC__) || defined(__xlc__))
0054 #  include <TargetConditionals.h>
0055 #  define Q_OS_APPLE
0056 #  if defined(TARGET_OS_MAC) && TARGET_OS_MAC
0057 #    define Q_OS_DARWIN
0058 #    define Q_OS_BSD4
0059 #    if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
0060 #      define QT_PLATFORM_UIKIT
0061 #      if defined(TARGET_OS_WATCH) && TARGET_OS_WATCH
0062 #        define Q_OS_WATCHOS
0063 #      elif defined(TARGET_OS_TV) && TARGET_OS_TV
0064 #        define Q_OS_TVOS
0065 #      elif defined(TARGET_OS_VISION) && TARGET_OS_VISION
0066 #        define Q_OS_VISIONOS
0067 #      else
0068 #        // TARGET_OS_IOS is only available in newer SDKs,
0069 #        // so assume any other iOS-based platform is iOS for now
0070 #        define Q_OS_IOS
0071 #      endif
0072 #    else
0073 #      // TARGET_OS_OSX is only available in newer SDKs,
0074 #      // so assume any non iOS-based platform is macOS for now
0075 #      define Q_OS_MACOS
0076 #    endif
0077 #  else
0078 #    error "Qt has not been ported to this Apple platform - see http://www.qt.io/developers"
0079 #  endif
0080 #elif defined(__WEBOS__)
0081 #  define Q_OS_WEBOS
0082 #  define Q_OS_LINUX
0083 #elif defined(__ANDROID__) || defined(ANDROID)
0084 #  define Q_OS_ANDROID
0085 #  define Q_OS_LINUX
0086 #elif defined(__CYGWIN__)
0087 #  define Q_OS_CYGWIN
0088 #elif !defined(SAG_COM) && (!defined(WINAPI_FAMILY) || WINAPI_FAMILY==WINAPI_FAMILY_DESKTOP_APP) && (defined(WIN64) || defined(_WIN64) || defined(__WIN64__))
0089 #  define Q_OS_WIN32
0090 #  define Q_OS_WIN64
0091 #elif !defined(SAG_COM) && (defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__))
0092 #    define Q_OS_WIN32
0093 #elif defined(__sun) || defined(sun)
0094 #  define Q_OS_SOLARIS
0095 #elif defined(hpux) || defined(__hpux)
0096 #  define Q_OS_HPUX
0097 #elif defined(__EMSCRIPTEN__)
0098 #  define Q_OS_WASM
0099 #elif defined(__linux__) || defined(__linux)
0100 #  define Q_OS_LINUX
0101 #elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__FreeBSD_kernel__)
0102 #  ifndef __FreeBSD_kernel__
0103 #    define Q_OS_FREEBSD
0104 #  endif
0105 #  define Q_OS_FREEBSD_KERNEL
0106 #  define Q_OS_BSD4
0107 #elif defined(__NetBSD__)
0108 #  define Q_OS_NETBSD
0109 #  define Q_OS_BSD4
0110 #elif defined(__OpenBSD__)
0111 #  define Q_OS_OPENBSD
0112 #  define Q_OS_BSD4
0113 #elif defined(__INTERIX)
0114 #  define Q_OS_INTERIX
0115 #  define Q_OS_BSD4
0116 #elif defined(_AIX)
0117 #  define Q_OS_AIX
0118 #elif defined(__Lynx__)
0119 #  define Q_OS_LYNX
0120 #elif defined(__GNU__)
0121 #  define Q_OS_HURD
0122 #elif defined(__QNXNTO__)
0123 #  define Q_OS_QNX
0124 #elif defined(__INTEGRITY)
0125 #  define Q_OS_INTEGRITY
0126 #elif defined(__rtems__)
0127 #  define Q_OS_RTEMS
0128 #elif defined(__vxworks)
0129 #  define Q_OS_VXWORKS
0130 #elif defined(__HAIKU__)
0131 #  define Q_OS_HAIKU
0132 #elif defined(__MAKEDEPEND__)
0133 #else
0134 #  error "Qt has not been ported to this OS - see http://www.qt-project.org/"
0135 #endif
0136 
0137 #if defined(Q_OS_WIN32) || defined(Q_OS_WIN64)
0138 #  define Q_OS_WINDOWS
0139 #  define Q_OS_WIN
0140 // On Windows, pointers to dllimport'ed variables are not constant expressions,
0141 // so to keep to certain initializations (like QMetaObject) constexpr, we need
0142 // to use functions instead.
0143 #  define QT_NO_DATA_RELOCATION
0144 #endif
0145 
0146 #if defined(Q_OS_WIN)
0147 #  undef Q_OS_UNIX
0148 #elif !defined(Q_OS_UNIX)
0149 #  define Q_OS_UNIX
0150 #endif
0151 
0152 // Compatibility synonyms
0153 #ifdef Q_OS_DARWIN
0154 #  pragma clang diagnostic push
0155 #  pragma clang diagnostic ignored "-Wunknown-pragmas"
0156 #  define Q_OS_MAC // FIXME: Deprecate
0157 #  ifdef __LP64__
0158 #    define Q_OS_DARWIN64
0159 #    pragma clang deprecated(Q_OS_DARWIN64, "use Q_OS_DARWIN and QT_POINTER_SIZE/Q_PROCESSOR_* instead")
0160 #    define Q_OS_MAC64
0161 #    pragma clang deprecated(Q_OS_MAC64, "use Q_OS_DARWIN and QT_POINTER_SIZE/Q_PROCESSOR_* instead")
0162 #  else
0163 #    define Q_OS_DARWIN32
0164 #    pragma clang deprecated(Q_OS_DARWIN32, "use Q_OS_DARWIN and QT_POINTER_SIZE/Q_PROCESSOR_* instead")
0165 #    define Q_OS_MAC32
0166 #    pragma clang deprecated(Q_OS_MAC32, "use Q_OS_DARWIN and QT_POINTER_SIZE/Q_PROCESSOR_* instead")
0167 #  endif
0168 #  ifdef Q_OS_MACOS
0169 #    define Q_OS_MACX
0170 #    pragma clang deprecated(Q_OS_MACX, "use Q_OS_MACOS instead")
0171 #    define Q_OS_OSX
0172 #    pragma clang deprecated(Q_OS_OSX, "use Q_OS_MACOS instead")
0173 #  endif
0174 #  pragma clang diagnostic pop
0175 #endif
0176 
0177 #ifdef Q_OS_DARWIN
0178 #  include <Availability.h>
0179 #  include <AvailabilityMacros.h>
0180 
0181 #  define QT_DARWIN_PLATFORM_SDK_EQUAL_OR_ABOVE(macos, ios, tvos, watchos) \
0182     ((defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && macos != __MAC_NA && __MAC_OS_X_VERSION_MAX_ALLOWED >= macos) || \
0183      (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && ios != __IPHONE_NA && __IPHONE_OS_VERSION_MAX_ALLOWED >= ios) || \
0184      (defined(__TV_OS_VERSION_MAX_ALLOWED) && tvos != __TVOS_NA && __TV_OS_VERSION_MAX_ALLOWED >= tvos) || \
0185      (defined(__WATCH_OS_VERSION_MAX_ALLOWED) && watchos != __WATCHOS_NA && __WATCH_OS_VERSION_MAX_ALLOWED >= watchos))
0186 
0187 #  define QT_DARWIN_DEPLOYMENT_TARGET_BELOW(macos, ios, tvos, watchos) \
0188     ((defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && macos != __MAC_NA && __MAC_OS_X_VERSION_MIN_REQUIRED < macos) || \
0189      (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && ios != __IPHONE_NA && __IPHONE_OS_VERSION_MIN_REQUIRED < ios) || \
0190      (defined(__TV_OS_VERSION_MIN_REQUIRED) && tvos != __TVOS_NA && __TV_OS_VERSION_MIN_REQUIRED < tvos) || \
0191      (defined(__WATCH_OS_VERSION_MIN_REQUIRED) && watchos != __WATCHOS_NA && __WATCH_OS_VERSION_MIN_REQUIRED < watchos))
0192 
0193 #  define QT_MACOS_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(macos, ios) \
0194       QT_DARWIN_PLATFORM_SDK_EQUAL_OR_ABOVE(macos, ios, __TVOS_NA, __WATCHOS_NA)
0195 #  define QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(macos) \
0196       QT_DARWIN_PLATFORM_SDK_EQUAL_OR_ABOVE(macos, __IPHONE_NA, __TVOS_NA, __WATCHOS_NA)
0197 #  define QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(ios) \
0198       QT_DARWIN_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_NA, ios, __TVOS_NA, __WATCHOS_NA)
0199 #  define QT_TVOS_PLATFORM_SDK_EQUAL_OR_ABOVE(tvos) \
0200       QT_DARWIN_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_NA, __IPHONE_NA, tvos, __WATCHOS_NA)
0201 #  define QT_WATCHOS_PLATFORM_SDK_EQUAL_OR_ABOVE(watchos) \
0202       QT_DARWIN_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_NA, __IPHONE_NA, __TVOS_NA, watchos)
0203 
0204 #  define QT_MACOS_IOS_DEPLOYMENT_TARGET_BELOW(macos, ios) \
0205       QT_DARWIN_DEPLOYMENT_TARGET_BELOW(macos, ios, __TVOS_NA, __WATCHOS_NA)
0206 #  define QT_MACOS_DEPLOYMENT_TARGET_BELOW(macos) \
0207       QT_DARWIN_DEPLOYMENT_TARGET_BELOW(macos, __IPHONE_NA, __TVOS_NA, __WATCHOS_NA)
0208 #  define QT_IOS_DEPLOYMENT_TARGET_BELOW(ios) \
0209       QT_DARWIN_DEPLOYMENT_TARGET_BELOW(__MAC_NA, ios, __TVOS_NA, __WATCHOS_NA)
0210 #  define QT_TVOS_DEPLOYMENT_TARGET_BELOW(tvos) \
0211       QT_DARWIN_DEPLOYMENT_TARGET_BELOW(__MAC_NA, __IPHONE_NA, tvos, __WATCHOS_NA)
0212 #  define QT_WATCHOS_DEPLOYMENT_TARGET_BELOW(watchos) \
0213       QT_DARWIN_DEPLOYMENT_TARGET_BELOW(__MAC_NA, __IPHONE_NA, __TVOS_NA, watchos)
0214 
0215 #else // !Q_OS_DARWIN
0216 
0217 #define QT_DARWIN_PLATFORM_SDK_EQUAL_OR_ABOVE(macos, ios, tvos, watchos) (0)
0218 #define QT_MACOS_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(macos, ios) (0)
0219 #define QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(macos) (0)
0220 #define QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(ios) (0)
0221 #define QT_TVOS_PLATFORM_SDK_EQUAL_OR_ABOVE(tvos) (0)
0222 #define QT_WATCHOS_PLATFORM_SDK_EQUAL_OR_ABOVE(watchos) (0)
0223 
0224 #endif // Q_OS_DARWIN
0225 
0226 #ifdef __LSB_VERSION__
0227 #  if __LSB_VERSION__ < 40
0228 #    error "This version of the Linux Standard Base is unsupported"
0229 #  endif
0230 #ifndef QT_LINUXBASE
0231 #  define QT_LINUXBASE
0232 #endif
0233 #endif
0234 
0235 #if defined (__ELF__)
0236 #  define Q_OF_ELF
0237 #endif
0238 #if defined (__MACH__) && defined (__APPLE__)
0239 #  define Q_OF_MACH_O
0240 #endif
0241 
0242 #if defined(__SIZEOF_INT128__)
0243 // Compiler used in VxWorks SDK declares __SIZEOF_INT128__ but VxWorks doesn't support this type,
0244 // so we can't rely solely on compiler here.
0245 // MSVC STL used by MSVC and clang-cl does not support int128
0246 #if !defined(Q_OS_VXWORKS) && !defined(_MSC_VER)
0247 #  define QT_COMPILER_SUPPORTS_INT128 __SIZEOF_INT128__
0248 #endif
0249 #endif // defined(__SIZEOF_INT128__)
0250 
0251 #endif // QSYSTEMDETECTION_H