1 /////////////////////////////////////////////////////////////////////////////// 2 // Name: wx/osx/private/available.h 3 // Purpose: Helper for checking API availability under macOS. 4 // Author: Vadim Zeitlin 5 // Created: 2019-04-17 6 // Copyright: (c) 2019 Vadim Zeitlin <vadim@wxwidgets.org> 7 // Licence: wxWindows licence 8 /////////////////////////////////////////////////////////////////////////////// 9 10 #ifndef _WX_OSX_PRIVATE_AVAILABLE_H_ 11 #define _WX_OSX_PRIVATE_AVAILABLE_H_ 12 13 // Xcode 9 adds new @available keyword and the corresponding __builtin_available 14 // builtin which should be used instead of manual checks for API availability 15 // as using this builtin suppresses the compiler -Wunguarded-availability 16 // warnings, so use it if possible for the implementation of our own macro. 17 #if defined(__clang__) && __has_builtin(__builtin_available) 18 #define WX_IS_MACOS_AVAILABLE(major, minor) \ 19 __builtin_available(macOS major ## . ## minor, *) 20 21 #define WX_IS_MACOS_OR_IOS_AVAILABLE(macmajor, macminor, imajor, iminor) \ 22 __builtin_available(macOS macmajor ## . ## macminor, iOS imajor ##. ## iminor, *) 23 24 #define WX_IS_MACOS_AVAILABLE_FULL(major, minor, micro) \ 25 __builtin_available(macOS major ## . ## minor ## . ## micro, *) 26 27 // Note that we can't easily forward to API_AVAILABLE macro here, so go 28 // directly to its expansion instead. 29 #define WX_API_AVAILABLE_MACOS(major, minor) \ 30 __attribute__((availability(macos,introduced=major ## . ## minor))) 31 #else // Not clang or old clang version without __builtin_available 32 #include "wx/platinfo.h" 33 34 #define WX_IS_MACOS_AVAILABLE(major, minor) \ 35 wxPlatformInfo::Get().CheckOSVersion(major, minor) 36 37 #ifdef wxOSX_USE_IPHONE 38 #define WX_IS_MACOS_OR_IOS_AVAILABLE(macmajor, macminor, imajor, iminor) \ 39 wxPlatformInfo::Get().CheckOSVersion(imajor, iminor) 40 #else 41 #define WX_IS_MACOS_OR_IOS_AVAILABLE(macmajor, macminor, imajor, iminor) \ 42 wxPlatformInfo::Get().CheckOSVersion(macmajor, macminor) 43 #endif 44 45 #define WX_IS_MACOS_AVAILABLE_FULL(major, minor, micro) \ 46 wxPlatformInfo::Get().CheckOSVersion(major, minor, micro) 47 48 #define WX_API_AVAILABLE_MACOS(major, minor) 49 #endif 50 51 #endif // _WX_OSX_PRIVATE_AVAILABLE_H_ 52