Przeglądaj źródła

Merge pull request #1300 from marauder2k9-torque/macosx-build-copy-dependencies-fix

Macosx cmake cleanup and copy fix
Brian Roberts 1 rok temu
rodzic
commit
cfe76944e7

+ 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)

+ 17 - 6
Engine/source/CMakeLists.txt

@@ -395,16 +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}"
+  INSTALL_RPATH "@executable_path/../Frameworks"
+  XCODE_ATTRIBUTE_SKIP_INSTALL NO
+  BUILD_WITH_INSTALL_RPATH ON
   XCODE_ATTRIBUTE_INSTALL_PATH "/Applications"
-  XCODE_ATTRIBUTE_SKIP_INSTALL "No"
   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})
@@ -465,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)
@@ -497,7 +500,9 @@ append_defs()
 foreach (LIBRARY_BINARY ${TORQUE_ADDITIONAL_LIBRARY_BINARIES})
   if (APPLE)
     # For OSX, we want these binaries to be copied to the Frameworks directory
-    add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_BINARY} "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks/$(CONFIGURATION)")
+    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 ${LIBRARY_BINARY} "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks/$(CONFIGURATION)")
   else()
     # All other platforms expect the file next to the executable
     add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_BINARY} "${TORQUE_APP_GAME_DIRECTORY}")
@@ -518,8 +523,14 @@ if (UNIX)
 		  if ("${LINK_LIBRARY_TYPE}" STREQUAL "SHARED_LIBRARY")
         if (APPLE)
           set_target_properties(${GAME_LINK_LIBRARY} PROPERTIES 
-                  XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
-                  XCODE_ATTRIBUTE_SKIP_INSTALL[variant=Release] YES)
+          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 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);
 }

+ 15 - 113
Tools/CMake/torqueMacOSconfigs.cmake

@@ -4,98 +4,13 @@ enable_language(OBJC)
 enable_language(OBJCXX)
 enable_language(CXX)
 
-find_program(XCODEBUILD_EXECUTABLE xcodebuild)
-execute_process(COMMAND ${XCODEBUILD_EXECUTABLE} -version -sdk macosx Path
-          OUTPUT_VARIABLE XCODE_SDK_ROOT_DIR
-          ERROR_QUIET
-          OUTPUT_STRIP_TRAILING_WHITESPACE)
-
-set(XCODE_SDK_ROOT_DIR "${XCODE_SDK_ROOT_DIR}" CACHE INTERNAL "")
-# Specify the location or name of the platform SDK to be used in CMAKE_OSX_SYSROOT.
-set(CMAKE_OSX_SYSROOT "${XCODE_SDK_ROOT_DIR}" CACHE INTERNAL "")
-
-if (NOT DEFINED CMAKE_DEVELOPER_ROOT AND NOT CMAKE_GENERATOR MATCHES "Xcode")
-  get_filename_component(PLATFORM_SDK_DIR ${XCODE_SDK_ROOT_DIR} PATH)
-  get_filename_component(CMAKE_DEVELOPER_ROOT ${PLATFORM_SDK_DIR} PATH)
-  if (NOT EXISTS "${CMAKE_DEVELOPER_ROOT}")
-    message(FATAL_ERROR "Invalid CMAKE_DEVELOPER_ROOT: ${CMAKE_DEVELOPER_ROOT} does not exist.")
-  endif()
-endif()
-
-# Find (Apple's) libtool.
-if(DEFINED BUILD_LIBTOOL)
-  # Environment variables are always preserved.
-  set(ENV{_BUILD_LIBTOOL} "${BUILD_LIBTOOL}")
-elseif(DEFINED ENV{_BUILD_LIBTOOL})
-  set(BUILD_LIBTOOL "$ENV{_BUILD_LIBTOOL}")
-elseif(NOT DEFINED BUILD_LIBTOOL)
-  execute_process(COMMAND xcrun -sdk ${XCODE_SDK_ROOT_DIR} -find libtool
-          OUTPUT_VARIABLE BUILD_LIBTOOL
-          ERROR_QUIET
-          OUTPUT_STRIP_TRAILING_WHITESPACE)
-endif()
-
-get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES)
-foreach(lang ${languages})
-  set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "${BUILD_LIBTOOL} -static -o <TARGET> <LINK_FLAGS> <OBJECTS> " CACHE INTERNAL "")
-endforeach()
+set(CMAKE_SYSTEM_NAME Darwin)
+set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,")
 
-set(CMAKE_FRAMEWORK_PATH "/Applications/XCode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks")
-set(CMAKE_MODULE_LINKER_FLAGS "-rpath @executable_path/../Frameworks -rpath @loader_path/../Frameworks")
-set(CMAKE_SHARED_LINKER_FLAGS "-rpath @executable_path/../Frameworks -rpath @loader_path/../Frameworks")
-set(CMAKE_INSTALL_NAME_DIR "@rpath")
-set(CMAKE_FIND_FRAMEWORK FIRST)
 # 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)
 set(CMAKE_XCODE_ATTRIBUTE_MACOSX_DEPLOYMENT_TARGET[arch=arm64] "11.0" CACHE STRING "arm 64 minimum deployment target" FORCE)
-set(CMAKE_XCODE_ATTRIBUTE_SDKROOT macosx)
-set(CMAKE_SYSTEM_NAME Darwin)
-
-set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
-
-set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO")
-set(CMAKE_SHARED_LIBRARY_PREFIX "lib")
-set(CMAKE_SHARED_LIBRARY_SUFFIX ".dylib")
-set(CMAKE_SHARED_MODULE_PREFIX "lib")
-set(CMAKE_SHARED_MODULE_SUFFIX ".so")
-
-set(CMAKE_C_COMPILER_TARGET x86_64-arm64-apple-macosx11)
-set(CMAKE_CXX_COMPILER_TARGET x86_64-arm64-apple-macosx11)
-set(CMAKE_ASM_COMPILER_TARGET x86_64-arm64-apple-macosx11)
-
-set(CMAKE_C_COMPILER_ABI ELF)
-set(CMAKE_CXX_COMPILER_ABI ELF)
-set(CMAKE_C_HAS_ISYSROOT 1)
-set(CMAKE_CXX_HAS_ISYSROOT 1)
-set(CMAKE_MODULE_EXISTS 1)
-set(CMAKE_DL_LIBS "")
-set(CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ")
-set(CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ")
-set(CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}")
-set(CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}")
-set(CMAKE_MACOSX_BUNDLE YES)
-set(OBJC_VARS "-fobjc-abi-version=2 -DOBJC_OLD_DISPATCH_PROTOTYPES=0")
-
-set(CMAKE_OBJC_FLAGS "${C_TARGET_FLAGS} ${APPLE_TARGET_TRIPLE_FLAG} ${SDK_NAME_VERSION_FLAGS} ${BITCODE} ${VISIBILITY} ${FOBJC_ARC} ${OBJC_VARS} ${CMAKE_OBJC_FLAGS}")
-set(CMAKE_OBJC_FLAGS_DEBUG "-O0 -g ${CMAKE_OBJC_FLAGS_DEBUG}")
-set(CMAKE_OBJC_FLAGS_MINSIZEREL "-DNDEBUG -Os ${CMAKE_OBJC_FLAGS_MINSIZEREL}")
-set(CMAKE_OBJC_FLAGS_RELWITHDEBINFO "-DNDEBUG -O2 -g ${CMAKE_OBJC_FLAGS_RELWITHDEBINFO}")
-set(CMAKE_OBJC_FLAGS_RELEASE "-DNDEBUG -O3 ${CMAKE_OBJC_FLAGS_RELEASE}")
-set(CMAKE_OBJCXX_FLAGS "${C_TARGET_FLAGS} ${APPLE_TARGET_TRIPLE_FLAG} ${SDK_NAME_VERSION_FLAGS} ${BITCODE} ${VISIBILITY} ${FOBJC_ARC} ${OBJC_VARS} ${CMAKE_OBJCXX_FLAGS}")
-set(CMAKE_OBJCXX_FLAGS_DEBUG "-O0 -g ${CMAKE_OBJCXX_FLAGS_DEBUG}")
-set(CMAKE_OBJCXX_FLAGS_MINSIZEREL "-DNDEBUG -Os ${CMAKE_OBJCXX_FLAGS_MINSIZEREL}")
-set(CMAKE_OBJCXX_FLAGS_RELWITHDEBINFO "-DNDEBUG -O2 -g ${CMAKE_OBJCXX_FLAGS_RELWITHDEBINFO}")
-set(CMAKE_OBJCXX_FLAGS_RELEASE "-DNDEBUG -O3 ${CMAKE_OBJCXX_FLAGS_RELEASE}")
-set(CMAKE_OBJC_LINK_FLAGS "${C_TARGET_FLAGS} ${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_OBJC_LINK_FLAGS}")
-set(CMAKE_OBJCXX_LINK_FLAGS "${C_TARGET_FLAGS} ${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_OBJCXX_LINK_FLAGS}")
-
-set(CMAKE_PLATFORM_HAS_INSTALLNAME 1)
-set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -Wl,-headerpad_max_install_names")
-set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -Wl,-headerpad_max_install_names")
-set(CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,")
-set(CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,")
-set(CMAKE_FIND_LIBRARY_SUFFIXES ".tbd" ".dylib" ".so" ".a")
 
 if(CMAKE_OSX_ARCHITECTURES MATCHES "((^|;|, )(arm64|arm64e|x86_64))+")
   set(CMAKE_C_SIZEOF_DATA_PTR 8)
@@ -111,28 +26,8 @@ else()
   set(CMAKE_SYSTEM_PROCESSOR "arm")
 endif()
 
-if(DEFINED CMAKE_INSTALL_NAME_TOOL)
-  # Environment variables are always preserved.
-  set(ENV{_CMAKE_INSTALL_NAME_TOOL} "${CMAKE_INSTALL_NAME_TOOL}")
-elseif(DEFINED ENV{_CMAKE_INSTALL_NAME_TOOL})
-  set(CMAKE_INSTALL_NAME_TOOL "$ENV{_CMAKE_INSTALL_NAME_TOOL}")
-elseif(NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
-  execute_process(COMMAND xcrun -sdk ${XCODE_SDK_ROOT_DIR} -find install_name_tool
-          OUTPUT_VARIABLE CMAKE_INSTALL_NAME_TOOL_INT
-          ERROR_QUIET
-          OUTPUT_STRIP_TRAILING_WHITESPACE)
-  set(CMAKE_INSTALL_NAME_TOOL ${CMAKE_INSTALL_NAME_TOOL_INT} CACHE INTERNAL "")
-endif()
-
-# 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")
-
 # 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)
@@ -141,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)
@@ -154,12 +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_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
 
-# Debug configuration for quicker debug builds
-set(CMAKE_XCODE_ATTRIBUTE_LINKER_DISPLAYS_MANGLED_NAMES[variant=Debug] YES)
-set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[variant=Debug] YES)
-set(CMAKE_XCODE_ATTRIBUTE_ENABLE_TESTABILITY[variant=Debug] YES)
+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)

+ 2 - 1
Tools/CMake/torque_macros.cmake

@@ -128,6 +128,7 @@ endmacro (filterOut)
 ################# apple frameworks ###################
 macro(addFramework framework)
 	if (APPLE)
-      set(TORQUE_LINK_FRAMEWORKS ${TORQUE_LINK_FRAMEWORKS} "${CMAKE_FRAMEWORK_PATH}/${framework}.framework")
+      find_library(_${framework}_FRAMEWORK_PATH ${framework} PATHS /System/Library/Frameworks /Library/Frameworks)
+      set(TORQUE_LINK_FRAMEWORKS ${TORQUE_LINK_FRAMEWORKS} "${_${framework}_FRAMEWORK_PATH}")
 	endif()
 endmacro()