From d2c359baa16726022850c73a6a04ae1c915cd9d3 Mon Sep 17 00:00:00 2001 From: sletz Date: Thu, 9 Nov 2006 10:16:00 +0000 Subject: [PATCH] Dynamic loading of libjack library git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1287 0c269be4-1314-0410-8aa9-9f06e86f4224 --- common/JackAPIWrapper.cpp | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/common/JackAPIWrapper.cpp b/common/JackAPIWrapper.cpp index b4ddb0fc..a2ecdd99 100644 --- a/common/JackAPIWrapper.cpp +++ b/common/JackAPIWrapper.cpp @@ -22,6 +22,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #include #include #include +#include #ifdef __cplusplus extern "C" @@ -811,6 +812,33 @@ EXPORT int jack_client_close(jack_client_t *client) } // Library loader +static bool get_jack_library_in_directory(char* dir_name, char* library_name) +{ + struct dirent * dir_entry; + DIR * dir_stream = opendir(dir_name); + if (!dir_stream) + return false; + + while ((dir_entry = readdir(dir_stream))) { + if (strncmp("libjack.0.0", dir_entry->d_name, 11) == 0) { + strcpy(library_name, dir_entry->d_name); + closedir(dir_stream); + return true; + } + } + closedir(dir_stream); + return false; +} + +static bool get_jack_library(char* library_name) +{ + if (get_jack_library_in_directory("/usr/lib", library_name)) + return true; + if (get_jack_library_in_directory("/usr/local/lib", library_name)) + return true; + return false; +} + static bool open_library() { if (gClientCount++ == 0) { @@ -847,8 +875,8 @@ static bool check_client(void* library) static bool init_library() { - void* jackLibrary = dlopen("tmp_libjack.so.0.0.23", RTLD_LAZY); - //void* jackLibrary = 0; + char library_name[64]; + void* jackLibrary = (get_jack_library(library_name)) ? dlopen(library_name, RTLD_LAZY) : 0; void* jackmpLibrary = dlopen("libjackmp.so", RTLD_LAZY); if (jackLibrary) {