ifeq (${host_cpu},x86_64)
archlib:=lib64
endif
-ifeq ($(shell test -f ${mysql_prefix}/${archlib}/libmysqlclient.so && echo ok),ok)
- MYSQL_LIBPATH := "$(wildcard ${mysql_prefix}/${archlib}/libmysqlclient.so*) $(notdir $(wildcard ${mysql_prefix}/${archlib}/libmysqlclient.so*))"
-endif
-ifeq ($(shell test -f ${mysql_prefix}/${archlib}/mysql/libmysqlclient.so && echo ok),ok)
- MYSQL_LIBPATH := "$(wildcard ${mysql_prefix}/${archlib}/mysql/libmysqlclient.so*) $(notdir $(wildcard ${mysql_prefix}/${archlib}/mysql/libmysqlclient.so*))"
-endif
-MYSQL_CPPFLAGS:=-I${mysql_prefix}/include -I${mysql_prefix}/include/mysql -DMYSQL_LIBPATH=\"${MYSQL_LIBPATH}\"
+
+MYSQL_SONAME:=$(shell lib=/dev/null; for dir in '' mysql; do lib=${mysql_prefix}/${archlib}/$$dir/libmysqlclient.so; [ -f $$lib ] && break; done; readelf -d $$lib | grep SONAME | sed 's/.*\(libmysqlclient.so.[0-9]\{1,\}\).*/\1/' || echo notfound )
+
+MYSQL_CPPFLAGS:=-I${mysql_prefix}/include -I${mysql_prefix}/include/mysql -DMYSQL_SONAME=\"${MYSQL_SONAME}\"
MYSQL_LIBS=-lz
CFLAGS:= \
default all: compile doc
-libglite_lbu_db.la: ${LOBJS}
- if [ -z "${MYSQL_LIBPATH}" ]; then \
- echo "Warning: MySQL shared library not found!"; \
- sleep 15; \
+check_soname:
+ if [ "${MYSQL_SONAME}" = notfound ]; then \
+ echo "MySQL shared library not found!"; \
+ false; \
fi
+
+db.lo: check_soname
+
+libglite_lbu_db.la: ${LOBJS}
${LINK} -o $@ $< ${EXT_LIBS}
libglite_lbu_dbtest.la: ${LTESTOBJS}
#include <stdarg.h>
#include <dlfcn.h>
#include <pthread.h>
+#include <syslog.h>
#include <mysql.h>
#include <mysqld_error.h>
int glite_lbu_InitDBContext(glite_lbu_DBContext *ctx) {
int err = 0;
unsigned int ver_u;
- char *p, *libnames, *libname;
*ctx = calloc(1, sizeof **ctx);
if (!*ctx) return ENOMEM;
/* dynamic load the mysql library */
pthread_mutex_lock(&db_handle.lock);
if (!db_handle.lib) {
- libnames = strdup(MYSQL_LIBPATH " libmysqlclient.so");
- libname = strtok_r(libnames, " ", &p);
- while (libname) {
- libname = strtok_r(NULL, " ", &p);
- if ((db_handle.lib = dlopen(libname, RTLD_LAZY | RTLD_LOCAL)) != NULL) break;
- }
- free(libnames);
- if (!db_handle.lib) return ERR(*ctx, ENOENT, "can't load libmysqlclient library (%s), tried: ", dlerror(), MYSQL_LIBPATH " libmysqlclient.so");
+ db_handle.lib = dlopen(MYSQL_SONAME, RTLD_LAZY | RTLD_LOCAL);
+ if (!db_handle.lib) return ERR(*ctx, ENOENT, "dlopen(): " MYSQL_SONAME ": %s", dlerror());
do {
LOAD(mysql_init, "mysql_init");
LOAD(mysql_get_client_version, "mysql_get_client_version");
// check the runtime version
ver_u = db_handle.mysql_get_client_version();
if (ver_u != MYSQL_VERSION_ID) {
- err = ERR(*ctx, EINVAL, "version mismatch (compiled '%lu', runtime '%lu')", MYSQL_VERSION_ID, ver_u);
- break;
+ fprintf(stderr,"Warning: MySQL library version mismatch (compiled '%lu', runtime '%lu')", MYSQL_VERSION_ID, ver_u);
+ syslog(LOG_WARNING,"MySQL library version mismatch (compiled '%lu', runtime '%lu')", MYSQL_VERSION_ID, ver_u);
}
pthread_mutex_unlock(&db_handle.lock);
va_end(ap);
} else
ctx->err.desc = NULL;
- dprintf(ctx, "[db %d] %s:%d %s\n", getpid(), func, line, desc);
+ dprintf(ctx, "[db %d] %s:%d %s\n", getpid(), func, line, desc ? ctx->err.desc : "");
return code;
} else
return ctx->err.code;