diff --git a/CMakeLists.txt b/CMakeLists.txt index fafcde394..6902829fa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -81,18 +81,6 @@ include(GitUtilities) git_describe(SRB2_COMP_REVISION "${CMAKE_CURRENT_SOURCE_DIR}") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/src/config.h) - -# Mac bundle fixup -if(CLANG) - install(CODE " - include(BundleUtilities) - fixup_bundle(\"${CMAKE_INSTALL_PREFIX}/Sonic Robo Blast 2.app\" - \"\" - /Library/Frameworks - )" - ) -endif() - ##### PACKAGE CONFIGURATION ##### if(${CMAKE_SYSTEM} MATCHES "Windows") diff --git a/src/config.h.in b/src/config.h.in index 9c98d36e7..6e7c64da3 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -13,6 +13,8 @@ #define SRB2_COMP_REVISION "${SRB2_COMP_REVISION}" +#define CMAKE_ASSETS_DIR "${CMAKE_SOURCE_DIR}/assets" + #else #define ASSET_HASH_SRB2_SRB "c1b9577687f8a795104aef4600720ea7" diff --git a/src/sdl/CMakeLists.txt b/src/sdl/CMakeLists.txt index 1228fd2c5..567a1ba97 100644 --- a/src/sdl/CMakeLists.txt +++ b/src/sdl/CMakeLists.txt @@ -89,6 +89,8 @@ if(${SDL2_FOUND}) set(SRB2_SDL2_TOTAL_SOURCES ${SRB2_SDL2_TOTAL_SOURCES} macosx/mac_alert.c macosx/mac_alert.h + macosx/mac_resources.c + macosx/mac_resources.h macosx/Srb2mac.icns ) endif() @@ -205,6 +207,18 @@ if(${SDL2_FOUND}) DESTINATION . ) endif() + + + # Mac bundle fixup + if(CLANG) + install(CODE " + include(BundleUtilities) + fixup_bundle(\"${CMAKE_INSTALL_PREFIX}/Sonic Robo Blast 2.app\" + \"\" + /Library/Frameworks + )" + ) + endif() else() message(WARNING "SDL2 wasn't found, so ${SRB2_SDL2_EXE_NAME} won't be available") endif() diff --git a/src/sdl/i_system.c b/src/sdl/i_system.c index 19b6262b3..08cccfc6d 100644 --- a/src/sdl/i_system.c +++ b/src/sdl/i_system.c @@ -20,6 +20,8 @@ /// \file /// \brief SRB2 system stuff for SDL +#include "config.h" + #ifndef _WIN32_WCE #include #endif @@ -145,6 +147,10 @@ void __set_fpscr(long); // in libgcc / kernel's startup.s? #define O_BINARY 0 #endif +#ifdef __APPLE__ +#include "macosx/mac_resources.h" +#endif + // Locations for searching the srb2.srb #ifdef _arch_dreamcast #define DEFAULTWADLOCATION1 "/cd" @@ -2758,6 +2764,28 @@ static const char *locateWad(void) if (isWadPathOk(returnWadPath)) return NULL; #endif + + +#ifdef CMAKECONFIG +#ifndef NDEBUG + I_OutputMsg(","CMAKE_ASSETS_DIR); + strcpy(returnWadPath, CMAKE_ASSETS_DIR); + if (isWadPathOk(returnWadPath)) + { + return returnWadPath; + } +#endif +#endif + +#ifdef __APPLE__ + OSX_GetResourcesPath(returnWadPath); + I_OutputMsg(",%s", returnWadPath); + if (isWadPathOk(returnWadPath)) + { + return returnWadPath; + } + +#endif // examine default dirs #ifdef DEFAULTWADLOCATION1 diff --git a/src/sdl/macosx/mac_resources.c b/src/sdl/macosx/mac_resources.c new file mode 100644 index 000000000..dacc8014b --- /dev/null +++ b/src/sdl/macosx/mac_resources.c @@ -0,0 +1,31 @@ +#include "mac_resources.h" +#include + +#include + +void OSX_GetResourcesPath(char * buffer) +{ + CFBundleRef mainBundle; + mainBundle = CFBundleGetMainBundle(); + if (mainBundle) + { + CFURLRef appUrlRef = CFBundleCopyBundleURL(mainBundle); + CFStringRef macPath = CFURLCopyFileSystemPath(appUrlRef, kCFURLPOSIXPathStyle); + CFStringRef resources = CFStringCreateWithCString(kCFAllocatorMalloc, "/Contents/Resources", kCFStringEncodingASCII); + const void* rawarray[2] = {macPath, resources}; + CFArrayRef array = CFArrayCreate(kCFAllocatorMalloc, rawarray, 2, NULL); + CFStringRef separator = CFStringCreateWithCString(kCFAllocatorMalloc, "", kCFStringEncodingASCII); + CFStringRef fullPath = CFStringCreateByCombiningStrings(kCFAllocatorMalloc, array, separator); + const char * path = CFStringGetCStringPtr(fullPath, kCFStringEncodingASCII); + strcpy(buffer, path); + CFRelease(fullPath); + path = NULL; + CFRelease(array); + CFRelease(resources); + CFRelease(macPath); + CFRelease(appUrlRef); + //CFRelease(mainBundle); + CFRelease(separator); + } + +} \ No newline at end of file diff --git a/src/sdl/macosx/mac_resources.h b/src/sdl/macosx/mac_resources.h new file mode 100644 index 000000000..727ac9f6b --- /dev/null +++ b/src/sdl/macosx/mac_resources.h @@ -0,0 +1,5 @@ +#ifndef __MAC_RESOURCES_H__ +#define __MAC_RESOURCES_H__ + +void OSX_GetResourcesPath(char * buffer); +#endif \ No newline at end of file