From 6fcbc1639e385fdbfd7d9ee40415e1bd362ac668 Mon Sep 17 00:00:00 2001
From: Ozkan Sezer <[EMAIL REDACTED]>
Date: Fri, 5 Mar 2021 17:02:56 +0300
Subject: [PATCH] mac: try loading SDL2.framework before libSDL2.dylib (github
bug #28.)
---
src/SDL12_compat.c | 40 ++++++++++++++++++++++++++++++++++++----
1 file changed, 36 insertions(+), 4 deletions(-)
diff --git a/src/SDL12_compat.c b/src/SDL12_compat.c
index 279e922..6d8440d 100644
--- a/src/SDL12_compat.c
+++ b/src/SDL12_compat.c
@@ -786,13 +786,45 @@ static char loaderror[256];
Loaded_SDL20 = NULLHANDLE;
}
}
-#elif defined(__unix__) || defined(__APPLE__)
+#elif defined(__APPLE__)
#include <dlfcn.h>
- #ifdef __APPLE__
+ #include <pwd.h>
+ #include <unistd.h>
#define SDL20_LIBNAME "libSDL2-2.0.0.dylib"
- #else
+ #define SDL20_FRAMEWORK "SDL2.framework/Versions/A/SDL2"
+ #define SDL20_REQUIRED_VER SDL_VERSIONNUM(2,0,9)
+ #define strcpy_fn strcpy
+ #define sprintf_fn sprintf
+ static void *Loaded_SDL20 = NULL;
+ static char framework[4096];
+ #define LookupSDL20Sym(sym) dlsym(Loaded_SDL20, sym)
+ #define CloseSDL20Library() { if (Loaded_SDL20) { dlclose(Loaded_SDL20); Loaded_SDL20 = NULL; } }
+ static SDL_bool LoadSDL20Library(void) {
+ const char *homedir = NULL;
+ struct passwd *pwent;
+ pwent = getpwuid(getuid());
+ if (pwent) {
+ homedir = pwent->pw_dir;
+ }
+ if (!homedir) {
+ homedir = getenv("HOME");
+ }
+ if (homedir) {
+ sprintf_fn(framework, "%s%s/%s", homedir, "/Library/Frameworks", SDL20_FRAMEWORK);
+ Loaded_SDL20 = dlopen(framework, RTLD_LOCAL|RTLD_NOW);
+ }
+ if (!Loaded_SDL20) {
+ sprintf_fn(framework, "%s/%s", "/Library/Frameworks", SDL20_FRAMEWORK);
+ Loaded_SDL20 = dlopen(framework, RTLD_LOCAL|RTLD_NOW);
+ }
+ if (!Loaded_SDL20) {
+ Loaded_SDL20 = dlopen(SDL20_LIBNAME, RTLD_LOCAL|RTLD_NOW);
+ }
+ return (Loaded_SDL20 != NULL) ? SDL_TRUE : SDL_FALSE;
+ }
+#elif defined(__unix__)
+ #include <dlfcn.h>
#define SDL20_LIBNAME "libSDL2-2.0.so.0"
- #endif
#define SDL20_REQUIRED_VER SDL_VERSIONNUM(2,0,9)
static void *Loaded_SDL20 = NULL;
#define LoadSDL20Library() ((Loaded_SDL20 = dlopen(SDL20_LIBNAME, RTLD_LOCAL|RTLD_NOW)) != NULL)