cmake: on mac, check Resources in bundle first.

on non debug, check assets folder in src as well
This commit is contained in:
Ronald Kinard 2015-01-28 23:02:18 -06:00
parent e54338ef01
commit 70f046a320
6 changed files with 80 additions and 12 deletions

View File

@ -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")

View File

@ -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"

View File

@ -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()

View File

@ -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

View File

@ -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);
}
}

View File

@ -0,0 +1,5 @@
#ifndef __MAC_RESOURCES_H__
#define __MAC_RESOURCES_H__
void OSX_GetResourcesPath(char * buffer);
#endif