# include <dlfcn.h>
#endif
-qboolean sys_nostdout = false;
-
static char sys_timestring[128];
char *Sys_TimeString(const char *timeformat)
{
exit(0);
}
-char engineversion[128];
-
-void Sys_Shared_EarlyInit(void)
-{
- const char* os;
-
- Memory_Init ();
- Log_Init ();
-
- COM_InitArgv();
- COM_InitGameType();
-
-#if defined(__linux__)
- os = "Linux";
-#elif defined(WIN32)
- os = "Windows";
-#elif defined(__FreeBSD__)
- os = "FreeBSD";
-#elif defined(__NetBSD__)
- os = "NetBSD";
-#elif defined(__OpenBSD__)
- os = "OpenBSD";
-#elif defined(MACOSX)
- os = "Mac OS X";
-#else
- os = "Unknown";
-#endif
- snprintf (engineversion, sizeof (engineversion), "%s %s %s", gamename, os, buildstring);
-
-// COMMANDLINEOPTION: Console: -nostdout disables text output to the terminal the game was launched from
- if (COM_CheckParm("-nostdout"))
- sys_nostdout = 1;
- else
- Con_Printf("%s\n", engineversion);
-}
-
-void Sys_Shared_LateInit(void)
-{
-}
-
/*
===============================================================================
===============================================================================
*/
-qboolean Sys_LoadLibrary (const char* dllname, dllhandle_t* handle, const dllfunction_t *fcts)
+qboolean Sys_LoadLibrary (const char** dllnames, dllhandle_t* handle, const dllfunction_t *fcts)
{
const dllfunction_t *func;
- dllhandle_t dllhandle;
+ dllhandle_t dllhandle = 0;
+ unsigned int i;
if (handle == NULL)
return false;
for (func = fcts; func && func->name != NULL; func++)
*func->funcvariable = NULL;
- // Load the DLL
+ // Try every possible name
+ Con_Printf ("Trying to load library...");
+ for (i = 0; dllnames[i] != NULL; i++)
+ {
+ Con_Printf (" \"%s\"", dllnames[i]);
#ifdef WIN32
- dllhandle = LoadLibrary (dllname);
+ dllhandle = LoadLibrary (dllnames[i]);
#else
- dllhandle = dlopen (dllname, RTLD_LAZY);
+ dllhandle = dlopen (dllnames[i], RTLD_LAZY | RTLD_GLOBAL);
#endif
+ if (dllhandle)
+ break;
+ }
+
+ // see if the names can be loaded relative to the executable path
+ // (this is for Mac OSX which does not check next to the executable)
+ if (!dllhandle && strrchr(com_argv[0], '/'))
+ {
+ char path[MAX_OSPATH];
+ strlcpy(path, com_argv[0], sizeof(path));
+ strrchr(path, '/')[1] = 0;
+ for (i = 0; dllnames[i] != NULL; i++)
+ {
+ char temp[MAX_OSPATH];
+ strlcpy(temp, path, sizeof(temp));
+ strlcat(temp, dllnames[i], sizeof(temp));
+ Con_Printf (" \"%s\"", temp);
+#ifdef WIN32
+ dllhandle = LoadLibrary (temp);
+#else
+ dllhandle = dlopen (temp, RTLD_LAZY | RTLD_GLOBAL);
+#endif
+ if (dllhandle)
+ break;
+ }
+ }
+
+ // No DLL found
if (! dllhandle)
{
- Con_Printf ("Can't load \"%s\".\n", dllname);
+ Con_Printf(" - failed.\n");
return false;
}
+ Con_Printf(" - loaded.\n");
+
// Get the function adresses
for (func = fcts; func && func->name != NULL; func++)
if (!(*func->funcvariable = (void *) Sys_GetProcAddress (dllhandle, func->name)))
}
*handle = dllhandle;
- Con_Printf("\"%s\" loaded.\n", dllname);
return true;
}