Pārlūkot izejas kodu

fix packing

now openal and sdl are embedded in the app bundle along with their symlink alternatives
clear out the openal framework and use the embedded dll instead

archiving works and will produce a notarized app if you provide the correct information and enable hardening.
marauder2k7 1 gadu atpakaļ
vecāks
revīzija
9d51fc2830

+ 0 - 2
Engine/lib/CMakeLists.txt

@@ -199,8 +199,6 @@ add_subdirectory(glad ${TORQUE_LIB_TARG_DIRECTORY}/glad EXCLUDE_FROM_ALL)
 if(TORQUE_SFX_OPENAL)
     advanced_option(TORQUE_OGGVORBIS "Enable OGG Vorbis" ON)
     advanced_option(ALSOFT_EAX "Enable legacy EAX extensions" ${WIN32})
-    advanced_option(ALSOFT_INSTALL_EXAMPLES "Install example programs (alplay, alstream, ...)" OFF)
-    advanced_option(ALSOFT_INSTALL_UTILS "Install utility programs (openal-info, alsoft-config, ...)" OFF)
     advanced_option(ALSOFT_UPDATE_BUILD_VERSION "Update git build version info" ON)
     mark_as_advanced(ALSOFT_BACKEND_COREAUDIO)
     mark_as_advanced(ALSOFT_BACKEND_DSOUND)    

+ 3 - 7
Engine/lib/Torque_postBuild.cmake

@@ -23,12 +23,8 @@ if (APPLE)
     if(NOT TORQUE_DEDICATED)
         addFramework("OpenGL")
         addFramework("CoreVideo")
-        if(TORQUE_SFX_OPENAL)
-            addFramework("OpenAL")
-            addFramework("CoreAudio")
-            addFramework("AudioUnit")
-            addFramework("AudioToolbox")
-        endif(TORQUE_SFX_OPENAL)
+        addFramework("AudioToolbox")
+        addFramework("AudioUnit")
     endif()
 endif (APPLE)
 
@@ -40,4 +36,4 @@ if (UNIX AND NOT APPLE)
 	find_package(Freetype REQUIRED)
 	set(TORQUE_INCLUDE_DIRECTORIES ${TORQUE_INCLUDE_DIRECTORIES} ${FREETYPE_INCLUDE_DIRS})
 	set(TORQUE_LINK_LINUX ${TORQUE_LINK_LINUX} ${FREETYPE_LIBRARIES})
-endif (UNIX AND NOT APPLE)
+endif (UNIX AND NOT APPLE)

+ 13 - 5
Engine/source/CMakeLists.txt

@@ -395,17 +395,17 @@ if (APPLE)
   MACOSX_BUNDLE true
   MACOSX_BUNDLE_INFO_PLIST "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist"
   XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.torque3d.${TORQUE_APP_NAME}"
-  XCODE_ATTRIBUTE_INSTALL_PATH "/Applications"
   INSTALL_RPATH "@executable_path/../Frameworks"
-  XCODE_ATTRIBUTE_SKIP_INSTALL "No"
+  XCODE_ATTRIBUTE_SKIP_INSTALL NO
+  BUILD_WITH_INSTALL_RPATH ON
+  XCODE_ATTRIBUTE_INSTALL_PATH "/Applications"
   XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME "AppIcon"
   XCODE_ATTRIBUTE_LINKER_DISPLAYS_MANGLED_NAMES[variant=Debug] YES
   XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[variant=Debug] YES
   XCODE_ATTRIBUTE_ENABLE_TESTABILITY[variant=Debug] YES
   XCODE_ATTRIBUTE_SDL_FILE_DIR[variant=Debug] parent
   XCODE_ATTRIBUTE_SDL_FILE_DIR[variant=RelWithDebInfo] parent
-  XCODE_ATTRIBUTE_SDL_FILE_DIR[variant=Release] resource
-  MACOSX_RPATH TRUE)
+  XCODE_ATTRIBUTE_SDL_FILE_DIR[variant=Release] resource)
 
 elseif (WIN32)
 	add_executable(${TORQUE_APP_NAME} WIN32 ${TORQUE_SOURCE_FILES})
@@ -466,6 +466,8 @@ target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_LIBRARIES})
 
 if(APPLE)
   target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_FRAMEWORKS})
+
+
 endif(APPLE)
 
 if(WIN32)
@@ -520,9 +522,15 @@ if (UNIX)
 		  # Only pay attention to shared libraries and make them output to the app resources
 		  if ("${LINK_LIBRARY_TYPE}" STREQUAL "SHARED_LIBRARY")
         if (APPLE)
+          set_target_properties(${GAME_LINK_LIBRARY} PROPERTIES 
+          XCODE_ATTRIBUTE_SKIP_INSTALL YES
+          )
           add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD 
           COMMAND ${CMAKE_COMMAND} -E make_directory  "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks"
-          COMMAND ${CMAKE_COMMAND} -E copy "$<TARGET_FILE:${GAME_LINK_LIBRARY}>" "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks/$<TARGET_FILE_NAME:${GAME_LINK_LIBRARY}>")
+          COMMAND ${CMAKE_COMMAND} -E copy "$<TARGET_FILE:${GAME_LINK_LIBRARY}>" "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks/$<TARGET_FILE_NAME:${GAME_LINK_LIBRARY}>"
+          COMMAND ${CMAKE_COMMAND} -E create_symlink "$<TARGET_FILE:${GAME_LINK_LIBRARY}>" "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks/$<TARGET_LINKER_FILE_NAME:${GAME_LINK_LIBRARY}>"
+          COMMAND ${CMAKE_COMMAND} -E create_symlink "$<TARGET_FILE:${GAME_LINK_LIBRARY}>" "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks/lib$<TARGET_LINKER_FILE_BASE_NAME:${GAME_LINK_LIBRARY}>.1.dylib"
+          )
         else()
           set_target_properties(${GAME_LINK_LIBRARY} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${TORQUE_APP_GAME_DIRECTORY}")
         endif(APPLE)

+ 502 - 468
Engine/source/sfx/openal/mac/LoadOAL.mac.cpp

@@ -26,559 +26,593 @@
 #define TORQUE_OS_MAC
 #endif
 
+#include "console/console.h"
+
 #include <err.h>
 #include <string.h>
+#include <dlfcn.h>
 #include "sfx/openal/LoadOAL.h"
 
+void* openal_library = NULL;
+
 ALboolean LoadOAL10Library(char *szOALFullPathName, LPOPENALFNTABLE lpOALFnTable)
 {
    // TODO: Implement this.
 	if (!lpOALFnTable)
 		return AL_FALSE;
+   
+   if (szOALFullPathName)
+      openal_library = dlopen(szOALFullPathName, RTLD_NOW);
+   else
+   {
+#ifdef TORQUE_DEBUG
+      openal_library = dlopen("@rpath/libopenald.1.23.1.dylib", RTLD_NOW);
+      
+      if (openal_library == NULL)
+      {
+         openal_library = dlopen("@rpath/libopenald.1.dylib", RTLD_NOW);
+      }
+#else
+      openal_library = dlopen("@rpath/libopenal.1.23.1.dylib", RTLD_NOW);
+      
+      if (openal_library == NULL)
+      {
+         openal_library = dlopen("@rpath/libopenal .1.dylib", RTLD_NOW);
+      }
+#endif
+   }
+   
+   if (openal_library == NULL) 
+   {
+        Con::errorf("Failed to load OpenAL shared library. Sound will not be available");
+        return AL_FALSE;
+    }
+
 
 	memset(lpOALFnTable, 0, sizeof(OPENALFNTABLE));
 
-   lpOALFnTable->alEnable = (LPALENABLE)alEnable;
-	if (lpOALFnTable->alEnable == NULL)
-	{
-		warn("Failed to retrieve 'alEnable' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alDisable = (LPALDISABLE)alDisable;
-	if (lpOALFnTable->alDisable == NULL)
-	{
-		warn("Failed to retrieve 'alDisable' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alIsEnabled = (LPALISENABLED)alIsEnabled;
-	if (lpOALFnTable->alIsEnabled == NULL)
-	{
-		warn("Failed to retrieve 'alIsEnabled' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alGetBoolean = (LPALGETBOOLEAN)alGetBoolean;
-	if (lpOALFnTable->alGetBoolean == NULL)
-	{
-		warn("Failed to retrieve 'alGetBoolean' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alGetInteger = (LPALGETINTEGER)alGetInteger;
-	if (lpOALFnTable->alGetInteger == NULL)
-	{
-		warn("Failed to retrieve 'alGetInteger' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alGetFloat = (LPALGETFLOAT)alGetFloat;
-	if (lpOALFnTable->alGetFloat == NULL)
-	{
-		warn("Failed to retrieve 'alGetFloat' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alGetDouble = (LPALGETDOUBLE)alGetDouble;
-	if (lpOALFnTable->alGetDouble == NULL)
-	{
-		warn("Failed to retrieve 'alGetDouble' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alGetBooleanv = (LPALGETBOOLEANV)alGetBooleanv;
-	if (lpOALFnTable->alGetBooleanv == NULL)
-	{
-		warn("Failed to retrieve 'alGetBooleanv' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alGetIntegerv = (LPALGETINTEGERV)alGetIntegerv;
-	if (lpOALFnTable->alGetIntegerv == NULL)
-	{
-		warn("Failed to retrieve 'alGetIntegerv' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alGetFloatv = (LPALGETFLOATV)alGetFloatv;
-	if (lpOALFnTable->alGetFloatv == NULL)
-	{
-		warn("Failed to retrieve 'alGetFloatv' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alGetDoublev = (LPALGETDOUBLEV)alGetDoublev;
-	if (lpOALFnTable->alGetDoublev == NULL)
-	{
-		warn("Failed to retrieve 'alGetDoublev' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alGetString = (LPALGETSTRING)alGetString;
-	if (lpOALFnTable->alGetString == NULL)
-	{
-		warn("Failed to retrieve 'alGetString' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alGetError = (LPALGETERROR)alGetError;
-	if (lpOALFnTable->alGetError == NULL)
-	{
-		warn("Failed to retrieve 'alGetError' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alIsExtensionPresent = (LPALISEXTENSIONPRESENT)alIsExtensionPresent;
-	if (lpOALFnTable->alIsExtensionPresent == NULL)
-	{
-		warn("Failed to retrieve 'alIsExtensionPresent' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alGetProcAddress = (LPALGETPROCADDRESS)alGetProcAddress;
-	if (lpOALFnTable->alGetProcAddress == NULL)
-	{
-		warn("Failed to retrieve 'alGetProcAddress' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alGetEnumValue = (LPALGETENUMVALUE)alGetEnumValue;
-	if (lpOALFnTable->alGetEnumValue == NULL)
-	{
-		warn("Failed to retrieve 'alGetEnumValue' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alListeneri = (LPALLISTENERI)alListeneri;
-	if (lpOALFnTable->alListeneri == NULL)
-	{
-		warn("Failed to retrieve 'alListeneri' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alListenerf = (LPALLISTENERF)alListenerf;
-	if (lpOALFnTable->alListenerf == NULL)
-	{
-		warn("Failed to retrieve 'alListenerf' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alListener3f = (LPALLISTENER3F)alListener3f;
-	if (lpOALFnTable->alListener3f == NULL)
-	{
-		warn("Failed to retrieve 'alListener3f' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alListenerfv = (LPALLISTENERFV)alListenerfv;
-	if (lpOALFnTable->alListenerfv == NULL)
-	{
-		warn("Failed to retrieve 'alListenerfv' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alGetListeneri = (LPALGETLISTENERI)alGetListeneri;
-	if (lpOALFnTable->alGetListeneri == NULL)
-	{
-		warn("Failed to retrieve 'alGetListeneri' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alGetListenerf =(LPALGETLISTENERF)alGetListenerf;
-	if (lpOALFnTable->alGetListenerf == NULL)
-	{
-		warn("Failed to retrieve 'alGetListenerf' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alGetListener3f = (LPALGETLISTENER3F)alGetListener3f;
-	if (lpOALFnTable->alGetListener3f == NULL)
-	{
-		warn("Failed to retrieve 'alGetListener3f' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alGetListenerfv = (LPALGETLISTENERFV)alGetListenerfv;
-	if (lpOALFnTable->alGetListenerfv == NULL)
-	{
-		warn("Failed to retrieve 'alGetListenerfv' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alGenSources = (LPALGENSOURCES)alGenSources;
-	if (lpOALFnTable->alGenSources == NULL)
-	{
-		warn("Failed to retrieve 'alGenSources' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alDeleteSources = (LPALDELETESOURCES)alDeleteSources;
-	if (lpOALFnTable->alDeleteSources == NULL)
-	{
-		warn("Failed to retrieve 'alDeleteSources' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alIsSource = (LPALISSOURCE)alIsSource;
-	if (lpOALFnTable->alIsSource == NULL)
-	{
-		warn("Failed to retrieve 'alIsSource' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alSourcei = (LPALSOURCEI)alSourcei;
-	if (lpOALFnTable->alSourcei == NULL)
-	{
-		warn("Failed to retrieve 'alSourcei' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alSourcef = (LPALSOURCEF)alSourcef;
-	if (lpOALFnTable->alSourcef == NULL)
-	{
-		warn("Failed to retrieve 'alSourcef' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alSource3f = (LPALSOURCE3F)alSource3f;
-	if (lpOALFnTable->alSource3f == NULL)
-	{
-		warn("Failed to retrieve 'alSource3f' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alSourcefv = (LPALSOURCEFV)alSourcefv;
-	if (lpOALFnTable->alSourcefv == NULL)
-	{
-		warn("Failed to retrieve 'alSourcefv' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alGetSourcei = (LPALGETSOURCEI)alGetSourcei;
-	if (lpOALFnTable->alGetSourcei == NULL)
-	{
-		warn("Failed to retrieve 'alGetSourcei' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alGetSourcef = (LPALGETSOURCEF)alGetSourcef;
-	if (lpOALFnTable->alGetSourcef == NULL)
-	{
-		warn("Failed to retrieve 'alGetSourcef' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alGetSourcefv = (LPALGETSOURCEFV)alGetSourcefv;
-	if (lpOALFnTable->alGetSourcefv == NULL)
-	{
-		warn("Failed to retrieve 'alGetSourcefv' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alSourcePlayv = (LPALSOURCEPLAYV)alSourcePlayv;
-	if (lpOALFnTable->alSourcePlayv == NULL)
-	{
-		warn("Failed to retrieve 'alSourcePlayv' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alSourceStopv = (LPALSOURCESTOPV)alSourceStopv;
-	if (lpOALFnTable->alSourceStopv == NULL)
-	{
-		warn("Failed to retrieve 'alSourceStopv' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alSourcePlay = (LPALSOURCEPLAY)alSourcePlay;
-	if (lpOALFnTable->alSourcePlay == NULL)
-	{
-		warn("Failed to retrieve 'alSourcePlay' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alSourcePause = (LPALSOURCEPAUSE)alSourcePause;
-	if (lpOALFnTable->alSourcePause == NULL)
-	{
-		warn("Failed to retrieve 'alSourcePause' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alSourceStop = (LPALSOURCESTOP)alSourceStop;
-	if (lpOALFnTable->alSourceStop == NULL)
-	{
-		warn("Failed to retrieve 'alSourceStop' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alSourceRewind = (LPALSOURCEREWIND)alSourceRewind;
-	if (lpOALFnTable->alSourceRewind == NULL)
-	{
-		warn("Failed to retrieve 'alSourceRewind' function address\n");
-		return AL_FALSE;
-	}
-   lpOALFnTable->alGenBuffers = (LPALGENBUFFERS)alGenBuffers;
-	if (lpOALFnTable->alGenBuffers == NULL)
-	{
-		warn("Failed to retrieve 'alGenBuffers' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alDeleteBuffers = (LPALDELETEBUFFERS)alDeleteBuffers;
-	if (lpOALFnTable->alDeleteBuffers == NULL)
-	{
-		warn("Failed to retrieve 'alDeleteBuffers' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alIsBuffer = (LPALISBUFFER)alIsBuffer;
-	if (lpOALFnTable->alIsBuffer == NULL)
-	{
-		warn("Failed to retrieve 'alIsBuffer' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alBufferData = (LPALBUFFERDATA)alBufferData;
-	if (lpOALFnTable->alBufferData == NULL)
-	{
-		warn("Failed to retrieve 'alBufferData' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alGetBufferi = (LPALGETBUFFERI)alGetBufferi;
-	if (lpOALFnTable->alGetBufferi == NULL)
-	{
-		warn("Failed to retrieve 'alGetBufferi' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alGetBufferf = (LPALGETBUFFERF)alGetBufferf;
-	if (lpOALFnTable->alGetBufferf == NULL)
-	{
-		warn("Failed to retrieve 'alGetBufferf' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alSourceQueueBuffers = (LPALSOURCEQUEUEBUFFERS)alSourceQueueBuffers;
-	if (lpOALFnTable->alSourceQueueBuffers == NULL)
-	{
-		warn("Failed to retrieve 'alSourceQueueBuffers' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alSourceUnqueueBuffers = (LPALSOURCEUNQUEUEBUFFERS)alSourceUnqueueBuffers;
-	if (lpOALFnTable->alSourceUnqueueBuffers == NULL)
-	{
-		warn("Failed to retrieve 'alSourceUnqueueBuffers' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alDistanceModel = (LPALDISTANCEMODEL)alDistanceModel;
-	if (lpOALFnTable->alDistanceModel == NULL)
-	{
-		warn("Failed to retrieve 'alDistanceModel' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alDopplerFactor = (LPALDOPPLERFACTOR)alDopplerFactor;
-	if (lpOALFnTable->alDopplerFactor == NULL)
-	{
-		warn("Failed to retrieve 'alDopplerFactor' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alDopplerVelocity = (LPALDOPPLERVELOCITY)alDopplerVelocity;
-	if (lpOALFnTable->alDopplerVelocity == NULL)
-	{
-		warn("Failed to retrieve 'alDopplerVelocity' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alcGetString = (LPALCGETSTRING)alcGetString;
-	if (lpOALFnTable->alcGetString == NULL)
-	{
-		warn("Failed to retrieve 'alcGetString' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alcGetIntegerv = (LPALCGETINTEGERV)alcGetIntegerv;
-	if (lpOALFnTable->alcGetIntegerv == NULL)
-	{
-		warn("Failed to retrieve 'alcGetIntegerv' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alcOpenDevice = (LPALCOPENDEVICE)alcOpenDevice;
-	if (lpOALFnTable->alcOpenDevice == NULL)
-	{
-		warn("Failed to retrieve 'alcOpenDevice' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alcCloseDevice = (LPALCCLOSEDEVICE)alcCloseDevice;
-	if (lpOALFnTable->alcCloseDevice == NULL)
-	{
-		warn("Failed to retrieve 'alcCloseDevice' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alcCreateContext = (LPALCCREATECONTEXT)alcCreateContext;
-	if (lpOALFnTable->alcCreateContext == NULL)
-	{
-		warn("Failed to retrieve 'alcCreateContext' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alcMakeContextCurrent = (LPALCMAKECONTEXTCURRENT)alcMakeContextCurrent;
-	if (lpOALFnTable->alcMakeContextCurrent == NULL)
-	{
-		warn("Failed to retrieve 'alcMakeContextCurrent' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alcProcessContext = (LPALCPROCESSCONTEXT)alcProcessContext;
-	if (lpOALFnTable->alcProcessContext == NULL)
-	{
-		warn("Failed to retrieve 'alcProcessContext' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alcGetCurrentContext = (LPALCGETCURRENTCONTEXT)alcGetCurrentContext;
-	if (lpOALFnTable->alcGetCurrentContext == NULL)
-	{
-		warn("Failed to retrieve 'alcGetCurrentContext' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alcGetContextsDevice = (LPALCGETCONTEXTSDEVICE)alcGetContextsDevice;
-	if (lpOALFnTable->alcGetContextsDevice == NULL)
-	{
-		warn("Failed to retrieve 'alcGetContextsDevice' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alcSuspendContext = (LPALCSUSPENDCONTEXT)alcSuspendContext;
-	if (lpOALFnTable->alcSuspendContext == NULL)
-	{
-		warn("Failed to retrieve 'alcSuspendContext' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alcDestroyContext = (LPALCDESTROYCONTEXT)alcDestroyContext;
-	if (lpOALFnTable->alcDestroyContext == NULL)
-	{
-		warn("Failed to retrieve 'alcDestroyContext' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alcGetError = (LPALCGETERROR)alcGetError;
-	if (lpOALFnTable->alcGetError == NULL)
-	{
-		warn("Failed to retrieve 'alcGetError' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alcIsExtensionPresent = (LPALCISEXTENSIONPRESENT)alcIsExtensionPresent;
-	if (lpOALFnTable->alcIsExtensionPresent == NULL)
-	{
-		warn("Failed to retrieve 'alcIsExtensionPresent' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alcGetProcAddress = (LPALCGETPROCADDRESS)alcGetProcAddress;
-	if (lpOALFnTable->alcGetProcAddress == NULL)
-	{
-		warn("Failed to retrieve 'alcGetProcAddress' function address\n");
-		return AL_FALSE;
-	}
-	lpOALFnTable->alcGetEnumValue = (LPALCGETENUMVALUE)alcGetEnumValue;
-	if (lpOALFnTable->alcGetEnumValue == NULL)
-	{
-		warn("Failed to retrieve 'alcGetEnumValue' function address\n");
-		return AL_FALSE;
-	}
+   lpOALFnTable->alEnable = (LPALENABLE)dlsym(openal_library,"alEnable");
+   if (lpOALFnTable->alEnable == NULL)
+   {
+      warn("Failed to retrieve 'alEnable' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alDisable = (LPALDISABLE)dlsym(openal_library,"alDisable");
+   if (lpOALFnTable->alDisable == NULL)
+   {
+      warn("Failed to retrieve 'alDisable' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alIsEnabled = (LPALISENABLED)dlsym(openal_library,"alIsEnabled");
+   if (lpOALFnTable->alIsEnabled == NULL)
+   {
+      warn("Failed to retrieve 'alIsEnabled' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alGetBoolean = (LPALGETBOOLEAN)dlsym(openal_library,"alGetBoolean");
+   if (lpOALFnTable->alGetBoolean == NULL)
+   {
+      warn("Failed to retrieve 'alGetBoolean' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alGetInteger = (LPALGETINTEGER)dlsym(openal_library,"alGetInteger");
+   if (lpOALFnTable->alGetInteger == NULL)
+   {
+      warn("Failed to retrieve 'alGetInteger' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alGetFloat = (LPALGETFLOAT)dlsym(openal_library,"alGetFloat");
+   if (lpOALFnTable->alGetFloat == NULL)
+   {
+      warn("Failed to retrieve 'alGetFloat' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alGetDouble = (LPALGETDOUBLE)dlsym(openal_library,"alGetDouble");
+   if (lpOALFnTable->alGetDouble == NULL)
+   {
+      warn("Failed to retrieve 'alGetDouble' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alGetBooleanv = (LPALGETBOOLEANV)dlsym(openal_library,"alGetBooleanv");
+   if (lpOALFnTable->alGetBooleanv == NULL)
+   {
+      warn("Failed to retrieve 'alGetBooleanv' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alGetIntegerv = (LPALGETINTEGERV)dlsym(openal_library,"alGetIntegerv");
+   if (lpOALFnTable->alGetIntegerv == NULL)
+   {
+      warn("Failed to retrieve 'alGetIntegerv' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alGetFloatv = (LPALGETFLOATV)dlsym(openal_library,"alGetFloatv");
+   if (lpOALFnTable->alGetFloatv == NULL)
+   {
+      warn("Failed to retrieve 'alGetFloatv' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alGetDoublev = (LPALGETDOUBLEV)dlsym(openal_library,"alGetDoublev");
+   if (lpOALFnTable->alGetDoublev == NULL)
+   {
+      warn("Failed to retrieve 'alGetDoublev' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alGetString = (LPALGETSTRING)dlsym(openal_library,"alGetString");
+   if (lpOALFnTable->alGetString == NULL)
+   {
+      warn("Failed to retrieve 'alGetString' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alGetError = (LPALGETERROR)dlsym(openal_library,"alGetError");
+   if (lpOALFnTable->alGetError == NULL)
+   {
+      warn("Failed to retrieve 'alGetError' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alIsExtensionPresent = (LPALISEXTENSIONPRESENT)dlsym(openal_library,"alIsExtensionPresent");
+   if (lpOALFnTable->alIsExtensionPresent == NULL)
+   {
+      warn("Failed to retrieve 'alIsExtensionPresent' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alGetProcAddress = (LPALGETPROCADDRESS)dlsym(openal_library,"alGetProcAddress");
+   if (lpOALFnTable->alGetProcAddress == NULL)
+   {
+      warn("Failed to retrieve 'alGetProcAddress' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alGetEnumValue = (LPALGETENUMVALUE)dlsym(openal_library,"alGetEnumValue");
+   if (lpOALFnTable->alGetEnumValue == NULL)
+   {
+      warn("Failed to retrieve 'alGetEnumValue' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alListeneri = (LPALLISTENERI)dlsym(openal_library,"alListeneri");
+   if (lpOALFnTable->alListeneri == NULL)
+   {
+      warn("Failed to retrieve 'alListeneri' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alListenerf = (LPALLISTENERF)dlsym(openal_library,"alListenerf");
+   if (lpOALFnTable->alListenerf == NULL)
+   {
+      warn("Failed to retrieve 'alListenerf' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alListener3f = (LPALLISTENER3F)dlsym(openal_library,"alListener3f");
+   if (lpOALFnTable->alListener3f == NULL)
+   {
+      warn("Failed to retrieve 'alListener3f' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alListenerfv = (LPALLISTENERFV)dlsym(openal_library,"alListenerfv");
+   if (lpOALFnTable->alListenerfv == NULL)
+   {
+      warn("Failed to retrieve 'alListenerfv' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alGetListeneri = (LPALGETLISTENERI)dlsym(openal_library,"alGetListeneri");
+   if (lpOALFnTable->alGetListeneri == NULL)
+   {
+      warn("Failed to retrieve 'alGetListeneri' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alGetListenerf =(LPALGETLISTENERF)dlsym(openal_library,"alGetListenerf");
+   if (lpOALFnTable->alGetListenerf == NULL)
+   {
+      warn("Failed to retrieve 'alGetListenerf' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alGetListener3f = (LPALGETLISTENER3F)dlsym(openal_library,"alGetListener3f");
+   if (lpOALFnTable->alGetListener3f == NULL)
+   {
+      warn("Failed to retrieve 'alGetListener3f' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alGetListenerfv = (LPALGETLISTENERFV)dlsym(openal_library,"alGetListenerfv");
+   if (lpOALFnTable->alGetListenerfv == NULL)
+   {
+      warn("Failed to retrieve 'alGetListenerfv' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alGenSources = (LPALGENSOURCES)dlsym(openal_library,"alGenSources");
+   if (lpOALFnTable->alGenSources == NULL)
+   {
+      warn("Failed to retrieve 'alGenSources' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alDeleteSources = (LPALDELETESOURCES)dlsym(openal_library,"alDeleteSources");
+   if (lpOALFnTable->alDeleteSources == NULL)
+   {
+      warn("Failed to retrieve 'alDeleteSources' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alIsSource = (LPALISSOURCE)dlsym(openal_library,"alIsSource");
+   if (lpOALFnTable->alIsSource == NULL)
+   {
+      warn("Failed to retrieve 'alIsSource' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alSourcei = (LPALSOURCEI)dlsym(openal_library,"alSourcei");
+   if (lpOALFnTable->alSourcei == NULL)
+   {
+      warn("Failed to retrieve 'alSourcei' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alSourcef = (LPALSOURCEF)dlsym(openal_library,"alSourcef");
+   if (lpOALFnTable->alSourcef == NULL)
+   {
+      warn("Failed to retrieve 'alSourcef' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alSource3f = (LPALSOURCE3F)dlsym(openal_library,"alSource3f");
+   if (lpOALFnTable->alSource3f == NULL)
+   {
+      warn("Failed to retrieve 'alSource3f' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alSourcefv = (LPALSOURCEFV)dlsym(openal_library,"alSourcefv");
+   if (lpOALFnTable->alSourcefv == NULL)
+   {
+      warn("Failed to retrieve 'alSourcefv' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alGetSourcei = (LPALGETSOURCEI)dlsym(openal_library,"alGetSourcei");
+   if (lpOALFnTable->alGetSourcei == NULL)
+   {
+      warn("Failed to retrieve 'alGetSourcei' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alGetSourcef = (LPALGETSOURCEF)dlsym(openal_library,"alGetSourcef");
+   if (lpOALFnTable->alGetSourcef == NULL)
+   {
+      warn("Failed to retrieve 'alGetSourcef' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alGetSourcefv = (LPALGETSOURCEFV)dlsym(openal_library,"alGetSourcefv");
+   if (lpOALFnTable->alGetSourcefv == NULL)
+   {
+      warn("Failed to retrieve 'alGetSourcefv' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alSourcePlayv = (LPALSOURCEPLAYV)dlsym(openal_library,"alSourcePlayv");
+   if (lpOALFnTable->alSourcePlayv == NULL)
+   {
+      warn("Failed to retrieve 'alSourcePlayv' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alSourceStopv = (LPALSOURCESTOPV)dlsym(openal_library,"alSourceStopv");
+   if (lpOALFnTable->alSourceStopv == NULL)
+   {
+      warn("Failed to retrieve 'alSourceStopv' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alSourcePlay = (LPALSOURCEPLAY)dlsym(openal_library,"alSourcePlay");
+   if (lpOALFnTable->alSourcePlay == NULL)
+   {
+      warn("Failed to retrieve 'alSourcePlay' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alSourcePause = (LPALSOURCEPAUSE)dlsym(openal_library,"alSourcePause");
+   if (lpOALFnTable->alSourcePause == NULL)
+   {
+      warn("Failed to retrieve 'alSourcePause' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alSourceStop = (LPALSOURCESTOP)dlsym(openal_library,"alSourceStop");
+   if (lpOALFnTable->alSourceStop == NULL)
+   {
+      warn("Failed to retrieve 'alSourceStop' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alSourceRewind = (LPALSOURCEREWIND)dlsym(openal_library,"alSourceRewind");
+   if (lpOALFnTable->alSourceRewind == NULL)
+   {
+      warn("Failed to retrieve 'alSourceRewind' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alGenBuffers = (LPALGENBUFFERS)dlsym(openal_library,"alGenBuffers");
+   if (lpOALFnTable->alGenBuffers == NULL)
+   {
+      warn("Failed to retrieve 'alGenBuffers' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alDeleteBuffers = (LPALDELETEBUFFERS)dlsym(openal_library,"alDeleteBuffers");
+   if (lpOALFnTable->alDeleteBuffers == NULL)
+   {
+      warn("Failed to retrieve 'alDeleteBuffers' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alIsBuffer = (LPALISBUFFER)dlsym(openal_library,"alIsBuffer");
+   if (lpOALFnTable->alIsBuffer == NULL)
+   {
+      warn("Failed to retrieve 'alIsBuffer' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alBufferData = (LPALBUFFERDATA)dlsym(openal_library,"alBufferData");
+   if (lpOALFnTable->alBufferData == NULL)
+   {
+      warn("Failed to retrieve 'alBufferData' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alGetBufferi = (LPALGETBUFFERI)dlsym(openal_library,"alGetBufferi");
+   if (lpOALFnTable->alGetBufferi == NULL)
+   {
+      warn("Failed to retrieve 'alGetBufferi' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alGetBufferf = (LPALGETBUFFERF)dlsym(openal_library,"alGetBufferf");
+   if (lpOALFnTable->alGetBufferf == NULL)
+   {
+      warn("Failed to retrieve 'alGetBufferf' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alSourceQueueBuffers = (LPALSOURCEQUEUEBUFFERS)dlsym(openal_library,"alSourceQueueBuffers");
+   if (lpOALFnTable->alSourceQueueBuffers == NULL)
+   {
+      warn("Failed to retrieve 'alSourceQueueBuffers' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alSourceUnqueueBuffers = (LPALSOURCEUNQUEUEBUFFERS)dlsym(openal_library,"alSourceUnqueueBuffers");
+   if (lpOALFnTable->alSourceUnqueueBuffers == NULL)
+   {
+      warn("Failed to retrieve 'alSourceUnqueueBuffers' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alDistanceModel = (LPALDISTANCEMODEL)dlsym(openal_library,"alDistanceModel");
+   if (lpOALFnTable->alDistanceModel == NULL)
+   {
+      warn("Failed to retrieve 'alDistanceModel' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alDopplerFactor = (LPALDOPPLERFACTOR)dlsym(openal_library,"alDopplerFactor");
+   if (lpOALFnTable->alDopplerFactor == NULL)
+   {
+      warn("Failed to retrieve 'alDopplerFactor' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alDopplerVelocity = (LPALDOPPLERVELOCITY)dlsym(openal_library,"alDopplerVelocity");
+   if (lpOALFnTable->alDopplerVelocity == NULL)
+   {
+      warn("Failed to retrieve 'alDopplerVelocity' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alcGetString = (LPALCGETSTRING)dlsym(openal_library,"alcGetString");
+   if (lpOALFnTable->alcGetString == NULL)
+   {
+      warn("Failed to retrieve 'alcGetString' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alcGetIntegerv = (LPALCGETINTEGERV)dlsym(openal_library,"alcGetIntegerv");
+   if (lpOALFnTable->alcGetIntegerv == NULL)
+   {
+      warn("Failed to retrieve 'alcGetIntegerv' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alcOpenDevice = (LPALCOPENDEVICE)dlsym(openal_library,"alcOpenDevice");
+   if (lpOALFnTable->alcOpenDevice == NULL)
+   {
+      warn("Failed to retrieve 'alcOpenDevice' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alcCloseDevice = (LPALCCLOSEDEVICE)dlsym(openal_library,"alcCloseDevice");
+   if (lpOALFnTable->alcCloseDevice == NULL)
+   {
+      warn("Failed to retrieve 'alcCloseDevice' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alcCreateContext = (LPALCCREATECONTEXT)dlsym(openal_library,"alcCreateContext");
+   if (lpOALFnTable->alcCreateContext == NULL)
+   {
+      warn("Failed to retrieve 'alcCreateContext' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alcMakeContextCurrent = (LPALCMAKECONTEXTCURRENT)dlsym(openal_library,"alcMakeContextCurrent");
+   if (lpOALFnTable->alcMakeContextCurrent == NULL)
+   {
+      warn("Failed to retrieve 'alcMakeContextCurrent' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alcProcessContext = (LPALCPROCESSCONTEXT)dlsym(openal_library,"alcProcessContext");
+   if (lpOALFnTable->alcProcessContext == NULL)
+   {
+      warn("Failed to retrieve 'alcProcessContext' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alcGetCurrentContext = (LPALCGETCURRENTCONTEXT)dlsym(openal_library,"alcGetCurrentContext");
+   if (lpOALFnTable->alcGetCurrentContext == NULL)
+   {
+      warn("Failed to retrieve 'alcGetCurrentContext' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alcGetContextsDevice = (LPALCGETCONTEXTSDEVICE)dlsym(openal_library,"alcGetContextsDevice");
+   if (lpOALFnTable->alcGetContextsDevice == NULL)
+   {
+      warn("Failed to retrieve 'alcGetContextsDevice' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alcSuspendContext = (LPALCSUSPENDCONTEXT)dlsym(openal_library,"alcSuspendContext");
+   if (lpOALFnTable->alcSuspendContext == NULL)
+   {
+      warn("Failed to retrieve 'alcSuspendContext' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alcDestroyContext = (LPALCDESTROYCONTEXT)dlsym(openal_library,"alcDestroyContext");
+   if (lpOALFnTable->alcDestroyContext == NULL)
+   {
+      warn("Failed to retrieve 'alcDestroyContext' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alcGetError = (LPALCGETERROR)dlsym(openal_library,"alcGetError");
+   if (lpOALFnTable->alcGetError == NULL)
+   {
+      warn("Failed to retrieve 'alcGetError' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alcIsExtensionPresent = (LPALCISEXTENSIONPRESENT)dlsym(openal_library,"alcIsExtensionPresent");
+   if (lpOALFnTable->alcIsExtensionPresent == NULL)
+   {
+      warn("Failed to retrieve 'alcIsExtensionPresent' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alcGetProcAddress = (LPALCGETPROCADDRESS)dlsym(openal_library,"alcGetProcAddress");
+   if (lpOALFnTable->alcGetProcAddress == NULL)
+   {
+      warn("Failed to retrieve 'alcGetProcAddress' function address\n");
+      return AL_FALSE;
+   }
+   lpOALFnTable->alcGetEnumValue = (LPALCGETENUMVALUE)dlsym(openal_library,"alcGetEnumValue");
+   if (lpOALFnTable->alcGetEnumValue == NULL)
+   {
+      warn("Failed to retrieve 'alcGetEnumValue' function address\n");
+      return AL_FALSE;
+   }
 #if defined(AL_ALEXT_PROTOTYPES)
-    //efx
-    lpOALFnTable->alGenEffects = (LPALGENEFFECTS)alGenEffects;
+  //efx
+    lpOALFnTable->alGenEffects = (LPALGENEFFECTS)dlsym(openal_library, "alGenEffects");
     if (lpOALFnTable->alGenEffects == NULL)
     {
-        warn("Failed to retrieve 'alGenEffects' function address\n");
-        return AL_FALSE;
+       warn("Failed to retrieve 'alGenEffects' function address\n");
+       return AL_FALSE;
     }
-    lpOALFnTable->alEffecti = (LPALEFFECTI)alEffecti;
+    lpOALFnTable->alEffecti = (LPALEFFECTI)dlsym(openal_library, "alEffecti");
     if (lpOALFnTable->alEffecti == NULL)
     {
-        warn("Failed to retrieve 'alEffecti' function address\n");
-        return AL_FALSE;
+       warn("Failed to retrieve 'alEffecti' function address\n");
+       return AL_FALSE;
     }
-    lpOALFnTable->alEffectiv = (LPALEFFECTIV)alEffectiv;
+    lpOALFnTable->alEffectiv = (LPALEFFECTIV)dlsym(openal_library, "alEffectiv");
     if (lpOALFnTable->alEffectiv == NULL)
     {
-        warn("Failed to retrieve 'alEffectiv' function address\n");
-        return AL_FALSE;
+       warn("Failed to retrieve 'alEffectiv' function address\n");
+       return AL_FALSE;
     }
-    lpOALFnTable->alEffectf = (LPALEFFECTF)alEffectf;
+    lpOALFnTable->alEffectf = (LPALEFFECTF)dlsym(openal_library, "alEffectf");
     if (lpOALFnTable->alEffectf == NULL)
     {
-        warn("Failed to retrieve 'alEffectf' function address\n");
-        return AL_FALSE;
+       warn("Failed to retrieve 'alEffectf' function address\n");
+       return AL_FALSE;
     }
-    lpOALFnTable->alEffectfv = (LPALEFFECTFV)alEffectfv;
+    lpOALFnTable->alEffectfv = (LPALEFFECTFV)dlsym(openal_library, "alEffectfv");
     if (lpOALFnTable->alEffectfv == NULL)
     {
-        warn("Failed to retrieve 'alEffectfv' function address\n");
-        return AL_FALSE;
+       warn("Failed to retrieve 'alEffectfv' function address\n");
+       return AL_FALSE;
     }
-    lpOALFnTable->alGetEffecti = (LPALGETEFFECTI)alGetEffecti;
+    lpOALFnTable->alGetEffecti = (LPALGETEFFECTI)dlsym(openal_library, "alGetEffecti");
     if (lpOALFnTable->alGetEffecti == NULL)
     {
-        warn("Failed to retrieve 'alGetEffecti' function address\n");
-        return AL_FALSE;
+       warn("Failed to retrieve 'alGetEffecti' function address\n");
+       return AL_FALSE;
     }
-    lpOALFnTable->alGetEffectiv = (LPALGETEFFECTIV)alGetEffectiv;
+    lpOALFnTable->alGetEffectiv = (LPALGETEFFECTIV)dlsym(openal_library, "alGetEffectiv");
     if (lpOALFnTable->alGetEffectiv == NULL)
     {
-        warn("Failed to retrieve 'alGetEffectiv' function address\n");
-        return AL_FALSE;
+       warn("Failed to retrieve 'alGetEffectiv' function address\n");
+       return AL_FALSE;
     }
-    lpOALFnTable->alGetEffectf = (LPALGETEFFECTF)alGetEffectf;
+    lpOALFnTable->alGetEffectf = (LPALGETEFFECTF)dlsym(openal_library, "alGetEffectf");
     if (lpOALFnTable->alGetEffectf == NULL)
     {
-        warn("Failed to retrieve 'alGetEffectf' function address\n");
-        return AL_FALSE;
+       warn("Failed to retrieve 'alGetEffectf' function address\n");
+       return AL_FALSE;
     }
-    lpOALFnTable->alGetEffectfv = (LPALGETEFFECTFV)alGetEffectfv;
+    lpOALFnTable->alGetEffectfv = (LPALGETEFFECTFV)dlsym(openal_library, "alGetEffectfv");
     if (lpOALFnTable->alGetEffectfv == NULL)
     {
-        warn("Failed to retrieve 'alGetEffectfv' function address\n");
-        return AL_FALSE;
+       warn("Failed to retrieve 'alGetEffectfv' function address\n");
+       return AL_FALSE;
     }
-    lpOALFnTable->alDeleteEffects = (LPALDELETEEFFECTS)alDeleteEffects;
+    lpOALFnTable->alDeleteEffects = (LPALDELETEEFFECTS)dlsym(openal_library, "alDeleteEffects");
     if (lpOALFnTable->alDeleteEffects == NULL)
     {
-        warn("Failed to retrieve 'alDeleteEffects' function address\n");
-        return AL_FALSE;
+       warn("Failed to retrieve 'alDeleteEffects' function address\n");
+       return AL_FALSE;
     }
-    lpOALFnTable->alIsEffect = (LPALISEFFECT)alIsEffect;
+    lpOALFnTable->alIsEffect = (LPALISEFFECT)dlsym(openal_library, "alIsEffect");
     if (lpOALFnTable->alIsEffect == NULL)
     {
-        warn("Failed to retrieve 'alIsEffect' function address\n");
-        return AL_FALSE;
+       warn("Failed to retrieve 'alIsEffect' function address\n");
+       return AL_FALSE;
     }
-    lpOALFnTable->alAuxiliaryEffectSlotf = (LPALAUXILIARYEFFECTSLOTF)alAuxiliaryEffectSlotf;
+    lpOALFnTable->alAuxiliaryEffectSlotf = (LPALAUXILIARYEFFECTSLOTF)dlsym(openal_library, "alAuxiliaryEffectSlotf");
     if (lpOALFnTable->alAuxiliaryEffectSlotf == NULL)
     {
-        warn("Failed to retrieve 'alAuxiliaryEffectSlotf' function address\n");
-        return AL_FALSE;
+       warn("Failed to retrieve 'alAuxiliaryEffectSlotf' function address\n");
+       return AL_FALSE;
     }
-    lpOALFnTable->alAuxiliaryEffectSlotfv = (LPALAUXILIARYEFFECTSLOTFV)alAuxiliaryEffectSlotfv;
+    lpOALFnTable->alAuxiliaryEffectSlotfv = (LPALAUXILIARYEFFECTSLOTFV)dlsym(openal_library, "alAuxiliaryEffectSlotfv");
     if (lpOALFnTable->alAuxiliaryEffectSlotfv == NULL)
     {
-        warn("Failed to retrieve 'alAuxiliaryEffectSlotfv' function address\n");
-        return AL_FALSE;
+       warn("Failed to retrieve 'alAuxiliaryEffectSlotfv' function address\n");
+       return AL_FALSE;
     }
-    lpOALFnTable->alAuxiliaryEffectSloti = (LPALAUXILIARYEFFECTSLOTI)alAuxiliaryEffectSloti;
+    lpOALFnTable->alAuxiliaryEffectSloti = (LPALAUXILIARYEFFECTSLOTI)dlsym(openal_library, "alAuxiliaryEffectSloti");
     if (lpOALFnTable->alAuxiliaryEffectSloti == NULL)
     {
-        warn("Failed to retrieve 'alAuxiliaryEffectSloti' function address\n");
-        return AL_FALSE;
+       warn("Failed to retrieve 'alAuxiliaryEffectSloti' function address\n");
+       return AL_FALSE;
     }
-    lpOALFnTable->alAuxiliaryEffectSlotiv = (LPALAUXILIARYEFFECTSLOTIV)alAuxiliaryEffectSlotiv;
+    lpOALFnTable->alAuxiliaryEffectSlotiv = (LPALAUXILIARYEFFECTSLOTIV)dlsym(openal_library, "alAuxiliaryEffectSlotiv");
     if (lpOALFnTable->alAuxiliaryEffectSlotiv == NULL)
     {
-        warn("Failed to retrieve 'alAuxiliaryEffectSlotiv' function address\n");
-        return AL_FALSE;
+       warn("Failed to retrieve 'alAuxiliaryEffectSlotiv' function address\n");
+       return AL_FALSE;
     }
-    lpOALFnTable->alIsAuxiliaryEffectSlot = (LPALISAUXILIARYEFFECTSLOT)alIsAuxiliaryEffectSlot;
+    lpOALFnTable->alIsAuxiliaryEffectSlot = (LPALISAUXILIARYEFFECTSLOT)dlsym(openal_library, "alIsAuxiliaryEffectSlot");
     if (lpOALFnTable->alIsAuxiliaryEffectSlot == NULL)
     {
-        warn("Failed to retrieve 'alIsAuxiliaryEffectSlot' function address\n");
-        return AL_FALSE;
+       warn("Failed to retrieve 'alIsAuxiliaryEffectSlot' function address\n");
+       return AL_FALSE;
     }
-    lpOALFnTable->alGenAuxiliaryEffectSlots = (LPALGENAUXILIARYEFFECTSLOTS)alGenAuxiliaryEffectSlots;
+    lpOALFnTable->alGenAuxiliaryEffectSlots = (LPALGENAUXILIARYEFFECTSLOTS)dlsym(openal_library, "alGenAuxiliaryEffectSlots");
     if (lpOALFnTable->alGenAuxiliaryEffectSlots == NULL)
     {
-        warn("Failed to retrieve 'alGenAuxiliaryEffectSlots' function address\n");
-        return AL_FALSE;
+       warn("Failed to retrieve 'alGenAuxiliaryEffectSlots' function address\n");
+       return AL_FALSE;
     }
-    lpOALFnTable->alDeleteAuxiliaryEffectSlots = (LPALDELETEAUXILIARYEFFECTSLOTS)alDeleteAuxiliaryEffectSlots;
+    lpOALFnTable->alDeleteAuxiliaryEffectSlots = (LPALDELETEAUXILIARYEFFECTSLOTS)dlsym(openal_library, "alDeleteAuxiliaryEffectSlots");
     if (lpOALFnTable->alDeleteAuxiliaryEffectSlots == NULL)
     {
-        warn("Failed to retrieve 'alDeleteAuxiliaryEffectSlots' function address\n");
-        return AL_FALSE;
+       warn("Failed to retrieve 'alDeleteAuxiliaryEffectSlots' function address\n");
+       return AL_FALSE;
     }
-    lpOALFnTable->alGetAuxiliaryEffectSlotf = (LPALGETAUXILIARYEFFECTSLOTF)alGetAuxiliaryEffectSlotf;
+    lpOALFnTable->alGetAuxiliaryEffectSlotf = (LPALGETAUXILIARYEFFECTSLOTF)dlsym(openal_library, "alGetAuxiliaryEffectSlotf");
     if (lpOALFnTable->alGetAuxiliaryEffectSlotf == NULL)
     {
-        warn("Failed to retrieve 'alGetAuxiliaryEffectSlotf' function address\n");
-        return AL_FALSE;
+       warn("Failed to retrieve 'alGetAuxiliaryEffectSlotf' function address\n");
+       return AL_FALSE;
     }
-    lpOALFnTable->alGetAuxiliaryEffectSlotfv = (LPALGETAUXILIARYEFFECTSLOTFV)alGetAuxiliaryEffectSlotfv;
+    lpOALFnTable->alGetAuxiliaryEffectSlotfv = (LPALGETAUXILIARYEFFECTSLOTFV)dlsym(openal_library, "alGetAuxiliaryEffectSlotfv");
     if (lpOALFnTable->alGetAuxiliaryEffectSlotfv == NULL)
     {
-        warn("Failed to retrieve 'alGetAuxiliaryEffectSlotfv' function address\n");
-        return AL_FALSE;
+       warn("Failed to retrieve 'alGetAuxiliaryEffectSlotfv' function address\n");
+       return AL_FALSE;
     }
-    lpOALFnTable->alGetAuxiliaryEffectSloti = (LPALGETAUXILIARYEFFECTSLOTI)alGetAuxiliaryEffectSloti;
+    lpOALFnTable->alGetAuxiliaryEffectSloti = (LPALGETAUXILIARYEFFECTSLOTI)dlsym(openal_library, "alGetAuxiliaryEffectSloti");
     if (lpOALFnTable->alGetAuxiliaryEffectSloti == NULL)
     {
-        warn("Failed to retrieve 'alGetAuxiliaryEffectSloti' function address\n");
-        return AL_FALSE;
+       warn("Failed to retrieve 'alGetAuxiliaryEffectSloti' function address\n");
+       return AL_FALSE;
     }
-    lpOALFnTable->alGetAuxiliaryEffectSlotiv = (LPALGETAUXILIARYEFFECTSLOTIV)alGetAuxiliaryEffectSlotiv;
+    lpOALFnTable->alGetAuxiliaryEffectSlotiv = (LPALGETAUXILIARYEFFECTSLOTIV)dlsym(openal_library, "alGetAuxiliaryEffectSlotiv");
     if (lpOALFnTable->alGetAuxiliaryEffectSlotiv == NULL)
     {
-        warn("Failed to retrieve 'alGetAuxiliaryEffectSlotiv' function address\n");
-        return AL_FALSE;
+       warn("Failed to retrieve 'alGetAuxiliaryEffectSlotiv' function address\n");
+       return AL_FALSE;
     }
-    lpOALFnTable->alSource3i = (LPALSOURCE3I)alSource3i;
+    lpOALFnTable->alSource3i = (LPALSOURCE3I)dlsym(openal_library, "alSource3i");
     if (lpOALFnTable->alSource3i == NULL)
     {
-        warn("Failed to retrieve 'alSource3i' function address\n");
-        return AL_FALSE;
+       warn("Failed to retrieve 'alSource3i' function address\n");
+       return AL_FALSE;
     }
 #endif
-	return AL_TRUE;
+   return AL_TRUE;
 }
 
 ALvoid UnloadOAL10Library()
 {
-// TODO: Implement this.
+   if (openal_library != NULL)
+          dlclose(openal_library);
 }

+ 16 - 2
Tools/CMake/torqueMacOSconfigs.cmake

@@ -4,6 +4,9 @@ enable_language(OBJC)
 enable_language(OBJCXX)
 enable_language(CXX)
 
+set(CMAKE_SYSTEM_NAME Darwin)
+set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,")
+
 # minimum for multi arch build is 11.
 set(CMAKE_OSX_DEPLOYMENT_TARGET "11" CACHE STRING "" FORCE)
 set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE STRING "" FORCE)
@@ -25,7 +28,6 @@ endif()
 
 # Enable codesigning with secure timestamp when not in Debug configuration (required for Notarization)
 set(CMAKE_XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS[variant=Release] "--timestamp")
-set(CMAKE_XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS[variant=RelWithDebInfo] "--timestamp")
 
 # Enable codesigning with hardened runtime option when not in Debug configuration (required for Notarization)
 #set(CMAKE_XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME[variant=Release] YES)
@@ -34,7 +36,12 @@ set(CMAKE_XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS[variant=RelWithDebInfo] "--times
 # Disable injection of Xcode's base entitlements used for debugging when not in Debug configuration (required for
 # Notarization)
 set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_INJECT_BASE_ENTITLEMENTS[variant=Release] NO)
-set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_INJECT_BASE_ENTITLEMENTS[variant=RelWithDebInfo] NO)
+set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO")
+# Only create a single Xcode project file
+set(CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY TRUE)
+# Add all libraries to project link phase (lets Xcode handle linking)
+#set(CMAKE_XCODE_LINK_BUILD_PHASE_MODE KNOWN_LOCATION)
+#set(CMAKE_XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../Frameworks")
 
 set(_release_configs RelWithDebInfo Release)
 if(CMAKE_BUILD_TYPE IN_LIST _release_configs)
@@ -47,7 +54,14 @@ set(CMAKE_USE_WIN32_THREADS_INIT 0)
 set(CMAKE_USE_PTHREADS_INIT 1)
 set(THREADS_PREFER_PTHREAD_FLAG ON)
 
+# Enable @rpath support
 set(CMAKE_MACOSX_RPATH 1)
+
+set(CMAKE_INSTALL_NAME_DIR "@rpath")
+
+# Set RPATH for both build and install
 set(CMAKE_INSTALL_RPATH "@executable_path/../Frameworks")
+set(CMAKE_BUILD_RPATH "@executable_path/../Frameworks")
+set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
 
 endif(APPLE)