From 9f15eaa7aeb735f71390e9b86bee4291d72edd44 Mon Sep 17 00:00:00 2001 From: icculus Date: Tue, 15 Sep 2009 06:32:05 +0000 Subject: Let a separate libdir be specified for loading libraries. Partially fixes Bugzilla #4271. git-svn-id: svn://svn.icculus.org/quake3/trunk@1626 edf5b092-35ff-0310-97b2-ce42778d08ea --- code/qcommon/files.c | 3 +++ code/qcommon/qcommon.h | 3 +++ code/sys/sys_main.c | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/code/qcommon/files.c b/code/qcommon/files.c index 7bbfc45..0728267 100644 --- a/code/qcommon/files.c +++ b/code/qcommon/files.c @@ -241,6 +241,7 @@ static cvar_t *fs_apppath; #endif static cvar_t *fs_basepath; +static cvar_t *fs_libpath; static cvar_t *fs_basegame; static cvar_t *fs_gamedirvar; static searchpath_t *fs_searchpaths; @@ -2761,6 +2762,8 @@ static void FS_Startup( const char *gameName ) fs_debug = Cvar_Get( "fs_debug", "0", 0 ); fs_basepath = Cvar_Get ("fs_basepath", Sys_DefaultInstallPath(), CVAR_INIT ); fs_basegame = Cvar_Get ("fs_basegame", "", CVAR_INIT ); + fs_libpath = Cvar_Get ("fs_libpath", Sys_DefaultLibPath(), CVAR_INIT ); + homePath = Sys_DefaultHomePath(); if (!homePath || !homePath[0]) { homePath = fs_basepath->string; diff --git a/code/qcommon/qcommon.h b/code/qcommon/qcommon.h index a2d8106..1c970e6 100644 --- a/code/qcommon/qcommon.h +++ b/code/qcommon/qcommon.h @@ -1079,6 +1079,9 @@ char *Sys_DefaultInstallPath(void); char *Sys_DefaultAppPath(void); #endif +void Sys_SetDefaultLibPath(const char *path); +char *Sys_DefaultLibPath(void); + void Sys_SetDefaultHomePath(const char *path); char *Sys_DefaultHomePath(void); const char *Sys_Dirname( char *path ); diff --git a/code/sys/sys_main.c b/code/sys/sys_main.c index ff58187..56819d1 100644 --- a/code/sys/sys_main.c +++ b/code/sys/sys_main.c @@ -49,6 +49,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA static char binaryPath[ MAX_OSPATH ] = { 0 }; static char installPath[ MAX_OSPATH ] = { 0 }; +static char libPath[ MAX_OSPATH ] = { 0 }; /* ================= @@ -93,6 +94,29 @@ char *Sys_DefaultInstallPath(void) return Sys_Cwd(); } +/* +================= +Sys_SetDefaultLibPath +================= +*/ +void Sys_SetDefaultLibPath(const char *path) +{ + Q_strncpyz(libPath, path, sizeof(libPath)); +} + +/* +================= +Sys_DefaultLibPath +================= +*/ +char *Sys_DefaultLibPath(void) +{ + if (*libPath) + return libPath; + else + return Sys_Cwd(); +} + /* ================= Sys_DefaultAppPath @@ -384,6 +408,7 @@ Used to load a development dll instead of a virtual machine #1 look down current path #2 look in fs_homepath #3 look in fs_basepath +#4 look in fs_libpath ================= */ void *Sys_LoadDll( const char *name, char *fqpath , @@ -394,6 +419,7 @@ void *Sys_LoadDll( const char *name, char *fqpath , void (*dllEntry)( intptr_t (*syscallptr)(intptr_t, ...) ); char fname[MAX_OSPATH]; char *basepath; + char *libpath; char *homepath; char *pwdpath; char *gamedir; @@ -405,6 +431,7 @@ void *Sys_LoadDll( const char *name, char *fqpath , // TODO: use fs_searchpaths from files.c pwdpath = Sys_Cwd(); basepath = Cvar_VariableString( "fs_basepath" ); + libpath = Cvar_VariableString( "fs_libpath" ); homepath = Cvar_VariableString( "fs_homepath" ); gamedir = Cvar_VariableString( "fs_game" ); @@ -416,6 +443,9 @@ void *Sys_LoadDll( const char *name, char *fqpath , if(!libHandle && basepath) libHandle = Sys_TryLibraryLoad(basepath, gamedir, fname, fqpath); + if(!libHandle && libpath) + libHandle = Sys_TryLibraryLoad(libpath, gamedir, fname, fqpath); + if(!libHandle) { Com_Printf ( "Sys_LoadDll(%s) failed to load library\n", name ); return NULL; @@ -469,6 +499,14 @@ void Sys_ParseArgs( int argc, char **argv ) # endif #endif +#ifndef DEFAULT_LIBDIR +# ifdef MACOS_X +# define DEFAULT_LIBDIR Sys_StripAppBundle(Sys_BinaryPath()) +# else +# define DEFAULT_LIBDIR Sys_BinaryPath() +# endif +#endif + /* ================= Sys_SigHandler @@ -538,6 +576,7 @@ int main( int argc, char **argv ) Sys_ParseArgs( argc, argv ); Sys_SetBinaryPath( Sys_Dirname( argv[ 0 ] ) ); Sys_SetDefaultInstallPath( DEFAULT_BASEDIR ); + Sys_SetDefaultLibPath( DEFAULT_LIBDIR ); // Concatenate the command line for passing to Com_Init for( i = 1; i < argc; i++ ) -- cgit v1.2.3