From 833fd30eb88391e9394022c8952ce26e8678e328 Mon Sep 17 00:00:00 2001 From: Edward Rudd Date: Sun, 25 Aug 2013 11:24:01 -0400 Subject: [PATCH] reworked GetBasePath on OS X to use Contents/Resource by default if bundled, or exedir if not bundled. - also adds OS X specific magic for bundled apps adding an Info.plist property of name SDL_FILESYSTEM_BASE_DIR_TYPE to the following values will change the bahaviour. * bundle -- use the bundle directory e.g. "/Applications/MyGame/Blah.app/" * parent -- use the bundle parent directory e.g. "/Applications/MyGame/" * resource -- use the bundle resource directory (default) e.g. "/Applications/MyGame/Blah.app/Contents/Resources/" --- src/filesystem/cocoa/SDL_sysfilesystem.m | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/filesystem/cocoa/SDL_sysfilesystem.m b/src/filesystem/cocoa/SDL_sysfilesystem.m index 298c1f75ab09d..c9b0eccebe7c9 100644 --- a/src/filesystem/cocoa/SDL_sysfilesystem.m +++ b/src/filesystem/cocoa/SDL_sysfilesystem.m @@ -37,8 +37,21 @@ SDL_GetBasePath(void) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - const char *base = [[[NSBundle mainBundle] bundlePath] UTF8String]; + NSBundle *bundle = [NSBundle mainBundle]; + const char* baseType = [[[bundle infoDictionary] objectForKey:@"SDL_FILESYSTEM_BASE_DIR_TYPE"] UTF8String]; + const char *base = NULL; char *retval = NULL; + if (baseType == NULL) { + baseType = "resource"; + } + if (SDL_strcasecmp(baseType, "bundle")==0) { + base = [[bundle bundlePath] UTF8String]; + } else if (SDL_strcasecmp(baseType, "parent")==0) { + base = [[[bundle bundlePath] stringByDeletingLastPathComponent] UTF8String]; + } else { + /* this returns the exedir for non-bundled and the resourceDir for bundled apps */ + base = [[bundle resourcePath] UTF8String]; + } if (base) { const size_t len = SDL_strlen(base) + 2; retval = (char *) SDL_malloc(len);