* replaced my cheap hack to search current working dir on OS X with a more
  complex hack that detects the .app bundle directory structure.  This is so
  the game data dirs do not need to be inside of the .app bundle btw.
This commit is contained in:
Tony J. White = 2006-08-16 05:22:09 +00:00
parent e17bea030f
commit 77de9e65a8
2 changed files with 35 additions and 5 deletions

View file

@ -2829,10 +2829,6 @@ static void FS_Startup( const char *gameName ) {
if (fs_basepath->string[0]) {
FS_AddGameDirectory( fs_basepath->string, gameName );
}
#ifdef MACOS_X
// allow .app bundles to be placed along side base dir
FS_AddGameDirectory( ".", gameName );
#endif
// fs_homepath is somewhat particular to *nix systems, only add if relevant
// NOTE: same filtering below for mods and basegame
if (fs_basepath->string[0] && Q_stricmp(fs_homepath->string,fs_basepath->string)) {

View file

@ -1382,8 +1382,42 @@ void Sys_ParseArgs( int argc, char* argv[] ) {
}
}
#ifdef MACOS_X
/*
=================
Sys_EscapeAppBundle
Discovers if passed dir is suffixed with the directory structure of a
Mac OS X .app bundle. If it is, the .app directory structure is stripped off
the end and the result is returned. If not, dir is returned untouched.
=================
*/
char *Sys_StripAppBundle(char *dir)
{
static char cwd[MAX_OSPATH];
Q_strncpyz(cwd, dir, sizeof(cwd));
if(strcmp(basename(cwd), "MacOS"))
return dir;
Q_strncpyz(cwd, dirname(cwd), sizeof(cwd));
if(strcmp(basename(cwd), "Contents"))
return dir;
Q_strncpyz(cwd, dirname(cwd), sizeof(cwd));
if(!strstr(basename(cwd), ".app"))
return dir;
Q_strncpyz(cwd, dirname(cwd), sizeof(cwd));
return cwd;
}
#endif /* MACOS_X */
#ifndef DEFAULT_BASEDIR
# define DEFAULT_BASEDIR Sys_DefaultCDPath()
#ifdef MACOS_X
// if run from an .app bundle, we want to also search its containing dir
#define DEFAULT_BASEDIR Sys_StripAppBundle(Sys_DefaultCDPath())
#else
#define DEFAULT_BASEDIR Sys_DefaultCDPath()
#endif
#endif
#include "../client/client.h"