-
-#define DYNAMIC_LOAD_OPENAL 0
-
-#if DYNAMIC_LOAD_OPENAL
-
-#include <dlfcn.h>
-
-#define AL_FUNC(t,ret,fn,params,call,rt) \
- extern "C" { \
- static ret ALAPIENTRY (*p##fn) params = NULL; \
- ret ALAPIENTRY fn params { rt p##fn call; } \
- }
-#include "alstubs.h"
-#undef AL_FUNC
-
-static void *aldlhandle = NULL;
-
-static bool lookup_alsym(const char *funcname, void **func, const char *libname)
-{
- if (!aldlhandle)
- return false;
-
- *func = dlsym(aldlhandle, funcname);
- if (*func == NULL)
- {
- fprintf(stderr, "Failed to find OpenAL symbol \"%s\" in \"%s\"\n",
- funcname, libname);
- return false;
- }
- return true;
-}
-
-static void unload_alsyms(void)
-{
- #define AL_FUNC(t,ret,fn,params,call,rt) p##fn = NULL;
- #include "alstubs.h"
- #undef AL_FUNC
- if (aldlhandle)
- {
- dlclose(aldlhandle);
- aldlhandle = NULL;
- }
-}
-
-static bool lookup_all_alsyms(const char *libname)
-{
- if (!aldlhandle)
- {
- if ( (aldlhandle = dlopen(libname, RTLD_GLOBAL | RTLD_NOW)) == NULL )
- return false;
- }
-
- bool retval = true;
- #define AL_FUNC(t,ret,fn,params,call,rt) \
- if (!lookup_alsym(#fn, (void **) &p##fn, libname)) retval = false;
- #include "alstubs.h"
- #undef AL_FUNC
-
- if (!retval)
- unload_alsyms();
-
- return retval;
-}
-#else
-#define lookup_all_alsyms(x) (true)
-#define unload_alsyms()
-#endif
-
-
-typedef struct
-{