From 70f046a32088f9e8930de1b8e117df4e203f8e86 Mon Sep 17 00:00:00 2001
From: Ronald Kinard <furyhunter600@gmail.com>
Date: Wed, 28 Jan 2015 23:02:18 -0600
Subject: [PATCH] cmake: on mac, check Resources in bundle first.

on non debug, check assets folder in src as well
---
 CMakeLists.txt                 | 12 ------------
 src/config.h.in                |  2 ++
 src/sdl/CMakeLists.txt         | 14 ++++++++++++++
 src/sdl/i_system.c             | 28 ++++++++++++++++++++++++++++
 src/sdl/macosx/mac_resources.c | 31 +++++++++++++++++++++++++++++++
 src/sdl/macosx/mac_resources.h |  5 +++++
 6 files changed, 80 insertions(+), 12 deletions(-)
 create mode 100644 src/sdl/macosx/mac_resources.c
 create mode 100644 src/sdl/macosx/mac_resources.h

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 <signal.h>
 #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 <string.h>
+
+#include <CoreFoundation/CoreFoundation.h>
+
+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
-- 
GitLab