From d62b40a9bf3cf11b5017e05d3ea9f1ee02f3cf16 Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Sat, 3 Aug 2024 14:43:57 +0100 Subject: [PATCH 1/6] initial commit this commit fixes the copying of dependencies into the app sandbox --- Engine/source/CMakeLists.txt | 11 +++++++---- Tools/CMake/torqueMacOSconfigs.cmake | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Engine/source/CMakeLists.txt b/Engine/source/CMakeLists.txt index ef6a3ab40..de4bdb92d 100644 --- a/Engine/source/CMakeLists.txt +++ b/Engine/source/CMakeLists.txt @@ -396,6 +396,7 @@ if (APPLE) 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_ASSETCATALOG_COMPILER_APPICON_NAME "AppIcon" XCODE_ATTRIBUTE_LINKER_DISPLAYS_MANGLED_NAMES[variant=Debug] YES @@ -497,7 +498,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}") @@ -517,9 +520,9 @@ 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_INSTALL_PATH "@rpath" - XCODE_ATTRIBUTE_SKIP_INSTALL[variant=Release] 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 "$" "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks/$") else() set_target_properties(${GAME_LINK_LIBRARY} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${TORQUE_APP_GAME_DIRECTORY}") endif(APPLE) diff --git a/Tools/CMake/torqueMacOSconfigs.cmake b/Tools/CMake/torqueMacOSconfigs.cmake index 6fbb080e1..fbb7ff9ff 100644 --- a/Tools/CMake/torqueMacOSconfigs.cmake +++ b/Tools/CMake/torqueMacOSconfigs.cmake @@ -155,7 +155,7 @@ set(CMAKE_USE_PTHREADS_INIT 1) set(THREADS_PREFER_PTHREAD_FLAG ON) set(CMAKE_MACOSX_RPATH 1) -set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") +set(CMAKE_INSTALL_RPATH "@executable_path/../Frameworks") # Debug configuration for quicker debug builds set(CMAKE_XCODE_ATTRIBUTE_LINKER_DISPLAYS_MANGLED_NAMES[variant=Debug] YES) From 7177e491dd4c02a23da7bc54e528f88369c1b0f8 Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Sat, 3 Aug 2024 15:37:30 +0100 Subject: [PATCH 2/6] Update torqueMacOSconfigs.cmake simplify macos configuration now sdl and openal no longer complain about multiple rpaths --- Tools/CMake/torqueMacOSconfigs.cmake | 112 --------------------------- 1 file changed, 112 deletions(-) diff --git a/Tools/CMake/torqueMacOSconfigs.cmake b/Tools/CMake/torqueMacOSconfigs.cmake index fbb7ff9ff..c53617688 100644 --- a/Tools/CMake/torqueMacOSconfigs.cmake +++ b/Tools/CMake/torqueMacOSconfigs.cmake @@ -4,98 +4,10 @@ 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 " CACHE INTERNAL "") -endforeach() - -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,25 +23,6 @@ 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") @@ -157,9 +50,4 @@ set(THREADS_PREFER_PTHREAD_FLAG ON) set(CMAKE_MACOSX_RPATH 1) set(CMAKE_INSTALL_RPATH "@executable_path/../Frameworks") -# 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) - endif(APPLE) \ No newline at end of file From 9d51fc2830443438dadd58bada74247b76bf1923 Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Sun, 4 Aug 2024 14:54:25 +0100 Subject: [PATCH 3/6] 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. --- Engine/lib/CMakeLists.txt | 2 - Engine/lib/Torque_postBuild.cmake | 10 +- Engine/source/CMakeLists.txt | 18 +- Engine/source/sfx/openal/mac/LoadOAL.mac.cpp | 970 ++++++++++--------- Tools/CMake/torqueMacOSconfigs.cmake | 18 +- 5 files changed, 534 insertions(+), 484 deletions(-) diff --git a/Engine/lib/CMakeLists.txt b/Engine/lib/CMakeLists.txt index 2fda3e0f6..b8c5345dc 100644 --- a/Engine/lib/CMakeLists.txt +++ b/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) diff --git a/Engine/lib/Torque_postBuild.cmake b/Engine/lib/Torque_postBuild.cmake index 7c4f3fb26..1ff0e5f10 100644 --- a/Engine/lib/Torque_postBuild.cmake +++ b/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) \ No newline at end of file +endif (UNIX AND NOT APPLE) diff --git a/Engine/source/CMakeLists.txt b/Engine/source/CMakeLists.txt index de4bdb92d..6fd8ab60b 100644 --- a/Engine/source/CMakeLists.txt +++ b/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 "$" "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks/$") + COMMAND ${CMAKE_COMMAND} -E copy "$" "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks/$" + COMMAND ${CMAKE_COMMAND} -E create_symlink "$" "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks/$" + COMMAND ${CMAKE_COMMAND} -E create_symlink "$" "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks/lib$.1.dylib" + ) else() set_target_properties(${GAME_LINK_LIBRARY} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${TORQUE_APP_GAME_DIRECTORY}") endif(APPLE) diff --git a/Engine/source/sfx/openal/mac/LoadOAL.mac.cpp b/Engine/source/sfx/openal/mac/LoadOAL.mac.cpp index 7ed7cda26..baf40d33b 100644 --- a/Engine/source/sfx/openal/mac/LoadOAL.mac.cpp +++ b/Engine/source/sfx/openal/mac/LoadOAL.mac.cpp @@ -26,559 +26,593 @@ #define TORQUE_OS_MAC #endif +#include "console/console.h" + #include #include +#include #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); } diff --git a/Tools/CMake/torqueMacOSconfigs.cmake b/Tools/CMake/torqueMacOSconfigs.cmake index c53617688..793771c13 100644 --- a/Tools/CMake/torqueMacOSconfigs.cmake +++ b/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) \ No newline at end of file From 02de5160cf56adca419956a58593a19431d2d401 Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Mon, 5 Aug 2024 00:38:46 +0100 Subject: [PATCH 4/6] Update torque_macros.cmake --- Tools/CMake/torque_macros.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Tools/CMake/torque_macros.cmake b/Tools/CMake/torque_macros.cmake index e98cb1f6c..37bb18327 100644 --- a/Tools/CMake/torque_macros.cmake +++ b/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_PATH ${framework} PATHS /System/Library/Frameworks /Library/Frameworks) + set(TORQUE_LINK_FRAMEWORKS ${TORQUE_LINK_FRAMEWORKS} "${FRAMEWORK_PATH}/${framework}.framework") endif() endmacro() \ No newline at end of file From 0374da0077fd8cdf061996eb8d475f59ca0454b5 Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Mon, 5 Aug 2024 00:44:36 +0100 Subject: [PATCH 5/6] Update torque_macros.cmake since this is showing in the cmake gui may as well make it unique for each framework.. --- Tools/CMake/torque_macros.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tools/CMake/torque_macros.cmake b/Tools/CMake/torque_macros.cmake index 37bb18327..a9975f6ab 100644 --- a/Tools/CMake/torque_macros.cmake +++ b/Tools/CMake/torque_macros.cmake @@ -128,7 +128,7 @@ endmacro (filterOut) ################# apple frameworks ################### macro(addFramework framework) if (APPLE) - find_library(FRAMEWORK_PATH ${framework} PATHS /System/Library/Frameworks /Library/Frameworks) - set(TORQUE_LINK_FRAMEWORKS ${TORQUE_LINK_FRAMEWORKS} "${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/${framework}.framework") endif() endmacro() \ No newline at end of file From 250b66b4dbfb958e8d2dd989929d77657fb711a2 Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Mon, 5 Aug 2024 01:06:29 +0100 Subject: [PATCH 6/6] Update torque_macros.cmake applying fixes in a hurry cause problems --- Tools/CMake/torque_macros.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/CMake/torque_macros.cmake b/Tools/CMake/torque_macros.cmake index a9975f6ab..871e455d4 100644 --- a/Tools/CMake/torque_macros.cmake +++ b/Tools/CMake/torque_macros.cmake @@ -129,6 +129,6 @@ endmacro (filterOut) macro(addFramework framework) if (APPLE) find_library(_${framework}_FRAMEWORK_PATH ${framework} PATHS /System/Library/Frameworks /Library/Frameworks) - set(TORQUE_LINK_FRAMEWORKS ${TORQUE_LINK_FRAMEWORKS} "_${framework}_FRAMEWORK_PATH/${framework}.framework") + set(TORQUE_LINK_FRAMEWORKS ${TORQUE_LINK_FRAMEWORKS} "${_${framework}_FRAMEWORK_PATH}") endif() endmacro() \ No newline at end of file