Fixed trying to use @available() on older SDK

This commit is contained in:
Sam Lantinga 2020-11-24 07:29:55 -08:00
parent b4338dda47
commit a5cde4cb0c
2 changed files with 20 additions and 6 deletions

View File

@ -2823,7 +2823,7 @@ AS_HELP_STRING([--enable-joystick-mfi], [include macOS MFI joystick support [[de
AC_MSG_RESULT($enable_joystick_mfi) AC_MSG_RESULT($enable_joystick_mfi)
if test x$enable_joystick_mfi = xyes; then if test x$enable_joystick_mfi = xyes; then
AC_DEFINE(SDL_JOYSTICK_MFI, 1, [ ]) AC_DEFINE(SDL_JOYSTICK_MFI, 1, [ ])
EXTRA_CFLAGS="$EXTRA_CFLAGS -fobjc-weak" EXTRA_CFLAGS="$EXTRA_CFLAGS -fobjc-weak -Wno-unused-command-line-argument"
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-weak_framework,CoreHaptics -Wl,-weak_framework,GameController" EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-weak_framework,CoreHaptics -Wl,-weak_framework,GameController"
fi fi
fi fi

View File

@ -39,10 +39,12 @@
#if TARGET_OS_IOS #if TARGET_OS_IOS
#define SDL_JOYSTICK_iOS_ACCELEROMETER #define SDL_JOYSTICK_iOS_ACCELEROMETER
#import <CoreMotion/CoreMotion.h> #import <CoreMotion/CoreMotion.h>
#endif #else /* TARGET_OS_OSX */
#if TARGET_OS_OSX
#include <IOKit/hid/IOHIDManager.h> #include <IOKit/hid/IOHIDManager.h>
#include <AppKit/NSApplication.h>
#ifndef NSAppKitVersionNumber10_15
#define NSAppKitVersionNumber10_15 1894
#endif
#endif #endif
#ifdef SDL_JOYSTICK_MFI #ifdef SDL_JOYSTICK_MFI
@ -464,10 +466,22 @@ SDL_AppleTVRemoteRotationHintChanged(void *udata, const char *name, const char *
} }
#endif /* TARGET_OS_TV */ #endif /* TARGET_OS_TV */
#if TARGET_OS_IOS
static inline int is_macos11 (void)
{
return (@available(macos 11.0, *));
}
#else /* TARGET_OS_OSX */
static inline int is_macos11 (void)
{
return (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_15);
}
#endif
static int static int
IOS_JoystickInit(void) IOS_JoystickInit(void)
{ {
if (@available(macos 11.0, *)) @autoreleasepool { if (is_macos11()) @autoreleasepool {
#ifdef SDL_JOYSTICK_iOS_ACCELEROMETER #ifdef SDL_JOYSTICK_iOS_ACCELEROMETER
if (SDL_GetHintBoolean(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, SDL_TRUE)) { if (SDL_GetHintBoolean(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, SDL_TRUE)) {
/* Default behavior, accelerometer as joystick */ /* Default behavior, accelerometer as joystick */
@ -1368,7 +1382,7 @@ IOS_JoystickGetGamepadMapping(int device_index, SDL_GamepadMapping *out)
SDL_bool IOS_SupportedHIDDevice(IOHIDDeviceRef device) SDL_bool IOS_SupportedHIDDevice(IOHIDDeviceRef device)
{ {
#ifdef SDL_JOYSTICK_MFI #ifdef SDL_JOYSTICK_MFI
if (@available(macOS 11.0, *)) { if (is_macos11()) {
return [GCController supportsHIDDevice:device] ? SDL_TRUE : SDL_FALSE; return [GCController supportsHIDDevice:device] ? SDL_TRUE : SDL_FALSE;
} }
#endif #endif