Ver Fonte

Enable SDL_LoadObject on iOS 8+ and tvOS.

Alex Szpakowski há 8 anos atrás
pai
commit
f31c7086d8

+ 1 - 5
include/SDL_config_iphoneos.h

@@ -119,11 +119,7 @@
 #define SDL_JOYSTICK_MFI 1
 
 /* Enable Unix style SO loading */
-/* Technically this works, but violates the iOS dev agreement prior to iOS 8 */
-/* #define SDL_LOADSO_DLOPEN 1 */
-
-/* Enable the stub shared object loader (src/loadso/dummy/\*.c) */
-#define SDL_LOADSO_DISABLED 1
+#define SDL_LOADSO_DLOPEN 1
 
 /* Enable various threading systems */
 #define SDL_THREAD_PTHREAD  1

+ 2 - 2
premake/Xcode-iOS/SDL_config_premake.h

@@ -150,8 +150,8 @@
 #ifndef SDL_VIDEO_RENDER_OGL_ES2
 #define SDL_VIDEO_RENDER_OGL_ES2 1
 #endif
-#ifndef SDL_LOADSO_DISABLED
-#define SDL_LOADSO_DISABLED 1
+#ifndef SDL_LOADSO_DLOPEN
+#define SDL_LOADSO_DLOPEN 1
 #endif
 #ifndef SDL_HAPTIC_DISABLED
 #define SDL_HAPTIC_DISABLED 1

+ 1 - 1
premake/projects/SDL2.lua

@@ -369,7 +369,7 @@ SDL_project "SDL2"
 			["SDL_AUDIO_DRIVER_COREAUDIO"] = 1,
 			["SDL_JOYSTICK_MFI"] = 1,
 			["SDL_HAPTIC_DISABLED"] = 1,
-			["SDL_LOADSO_DISABLED"] = 1,
+			["SDL_LOADSO_DLOPEN"] = 1,
 			["SDL_THREAD_PTHREAD"] = 1,
 			["SDL_THREAD_PTHREAD_RECURSIVE_MUTEX"] = 1,
 			["SDL_TIMER_UNIX"] = 1,

+ 16 - 2
src/loadso/dlopen/SDL_sysloadso.c

@@ -30,11 +30,25 @@
 
 #include "SDL_loadso.h"
 
+#if SDL_VIDEO_DRIVER_UIKIT
+#include "../../video/uikit/SDL_uikitvideo.h"
+#endif
+
 void *
 SDL_LoadObject(const char *sofile)
 {
-    void *handle = dlopen(sofile, RTLD_NOW|RTLD_LOCAL);
-    const char *loaderror = (char *) dlerror();
+    void *handle;
+    const char *loaderror;
+
+#if SDL_VIDEO_DRIVER_UIKIT
+    if (!UIKit_IsSystemVersionAtLeast(8.0)) {
+        SDL_SetError("SDL_LoadObject requires iOS 8+");
+        return NULL;
+    }
+#endif
+
+    handle = dlopen(sofile, RTLD_NOW|RTLD_LOCAL);
+    loaderror = (char *) dlerror();
     if (handle == NULL) {
         SDL_SetError("Failed loading %s: %s", sofile, loaderror);
     }

+ 9 - 4
src/video/uikit/SDL_uikitvideo.h

@@ -21,20 +21,25 @@
 #ifndef _SDL_uikitvideo_h
 #define _SDL_uikitvideo_h
 
-#include <UIKit/UIKit.h>
-
 #include "../SDL_sysvideo.h"
 
+#ifdef __OBJC__
+
+#include <UIKit/UIKit.h>
+
 @interface SDL_VideoData : NSObject
 
 @property (nonatomic) id pasteboardObserver;
 
 @end
 
+CGRect UIKit_ComputeViewFrame(SDL_Window *window, UIScreen *screen);
+
+#endif /* __OBJC__ */
+
 void UIKit_SuspendScreenSaver(_THIS);
 
-BOOL UIKit_IsSystemVersionAtLeast(double version);
-CGRect UIKit_ComputeViewFrame(SDL_Window *window, UIScreen *screen);
+SDL_bool UIKit_IsSystemVersionAtLeast(double version);
 
 #endif /* _SDL_uikitvideo_h */
 

+ 1 - 1
src/video/uikit/SDL_uikitvideo.m

@@ -167,7 +167,7 @@ UIKit_SuspendScreenSaver(_THIS)
     }
 }
 
-BOOL
+SDL_bool
 UIKit_IsSystemVersionAtLeast(double version)
 {
     return [[UIDevice currentDevice].systemVersion doubleValue] >= version;