Skip to content

Commit

Permalink
Enable SDL_LoadObject on iOS 8+ and tvOS.
Browse files Browse the repository at this point in the history
  • Loading branch information
slime73 committed Sep 25, 2016
1 parent 77bacfd commit f31c708
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 15 deletions.
6 changes: 1 addition & 5 deletions include/SDL_config_iphoneos.h
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions premake/Xcode-iOS/SDL_config_premake.h
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion premake/projects/SDL2.lua
Expand Up @@ -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,
Expand Down
18 changes: 16 additions & 2 deletions src/loadso/dlopen/SDL_sysloadso.c
Expand Up @@ -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);
}
Expand Down
13 changes: 9 additions & 4 deletions src/video/uikit/SDL_uikitvideo.h
Expand Up @@ -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 */

Expand Down
2 changes: 1 addition & 1 deletion src/video/uikit/SDL_uikitvideo.m
Expand Up @@ -167,7 +167,7 @@ static void UIKit_DeleteDevice(SDL_VideoDevice * device)
}
}

BOOL
SDL_bool
UIKit_IsSystemVersionAtLeast(double version)
{
return [[UIDevice currentDevice].systemVersion doubleValue] >= version;
Expand Down

0 comments on commit f31c708

Please sign in to comment.