Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-08 09:20:33

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