--- apr-util-1.2.8/build-outputs.mk.dbddso +++ apr-util-1.2.8/build-outputs.mk @@ -1,52 +1,49 @@ # DO NOT EDIT. AUTOMATICALLY GENERATED. -buckets/apr_buckets_pipe.lo: buckets/apr_buckets_pipe.c .make.dirs include/apr_buckets.h -buckets/apr_buckets_flush.lo: buckets/apr_buckets_flush.c .make.dirs include/apr_buckets.h -buckets/apr_buckets_alloc.lo: buckets/apr_buckets_alloc.c .make.dirs include/apr_buckets.h -buckets/apr_buckets_pool.lo: buckets/apr_buckets_pool.c .make.dirs include/apr_buckets.h -buckets/apr_buckets_socket.lo: buckets/apr_buckets_socket.c .make.dirs include/apr_buckets.h -buckets/apr_buckets_heap.lo: buckets/apr_buckets_heap.c .make.dirs include/apr_buckets.h -buckets/apr_buckets_simple.lo: buckets/apr_buckets_simple.c .make.dirs include/apr_buckets.h -buckets/apr_buckets_file.lo: buckets/apr_buckets_file.c .make.dirs include/apr_buckets.h -buckets/apr_buckets.lo: buckets/apr_buckets.c .make.dirs include/apr_buckets.h -buckets/apr_buckets_mmap.lo: buckets/apr_buckets_mmap.c .make.dirs include/apr_buckets.h -buckets/apr_buckets_eos.lo: buckets/apr_buckets_eos.c .make.dirs include/apr_buckets.h -buckets/apr_brigade.lo: buckets/apr_brigade.c .make.dirs include/apr_buckets.h -buckets/apr_buckets_refcount.lo: buckets/apr_buckets_refcount.c .make.dirs include/apr_buckets.h -crypto/apr_sha1.lo: crypto/apr_sha1.c .make.dirs include/apr_xlate.h include/apr_sha1.h include/apr_base64.h -crypto/uuid.lo: crypto/uuid.c .make.dirs include/apr_uuid.h -crypto/getuuid.lo: crypto/getuuid.c .make.dirs include/apr_uuid.h include/apr_md5.h include/apr_xlate.h -crypto/apr_md5.lo: crypto/apr_md5.c .make.dirs include/apr_xlate.h include/apr_md5.h include/apr_sha1.h -crypto/apr_md4.lo: crypto/apr_md4.c .make.dirs include/apr_md4.h include/apr_xlate.h -dbm/apr_dbm.lo: dbm/apr_dbm.c .make.dirs include/apr_dbm.h -dbm/apr_dbm_berkeleydb.lo: dbm/apr_dbm_berkeleydb.c .make.dirs -dbm/apr_dbm_gdbm.lo: dbm/apr_dbm_gdbm.c .make.dirs -dbm/apr_dbm_ndbm.lo: dbm/apr_dbm_ndbm.c .make.dirs -dbm/apr_dbm_sdbm.lo: dbm/apr_dbm_sdbm.c .make.dirs include/apr_sdbm.h -dbm/sdbm/sdbm_pair.lo: dbm/sdbm/sdbm_pair.c .make.dirs include/apr_sdbm.h -dbm/sdbm/sdbm.lo: dbm/sdbm/sdbm.c .make.dirs include/apr_sdbm.h -dbm/sdbm/sdbm_hash.lo: dbm/sdbm/sdbm_hash.c .make.dirs include/apr_sdbm.h -dbm/sdbm/sdbm_lock.lo: dbm/sdbm/sdbm_lock.c .make.dirs include/apr_sdbm.h -encoding/apr_base64.lo: encoding/apr_base64.c .make.dirs include/apr_base64.h include/apr_xlate.h -hooks/apr_hooks.lo: hooks/apr_hooks.c .make.dirs include/apr_optional_hooks.h include/apr_optional.h include/apr_hooks.h -ldap/apr_ldap_url.lo: ldap/apr_ldap_url.c .make.dirs -ldap/apr_ldap_option.lo: ldap/apr_ldap_option.c .make.dirs -ldap/apr_ldap_init.lo: ldap/apr_ldap_init.c .make.dirs -misc/apr_reslist.lo: misc/apr_reslist.c .make.dirs include/apr_reslist.h -misc/apu_version.lo: misc/apu_version.c .make.dirs include/apu_version.h -misc/apr_date.lo: misc/apr_date.c .make.dirs include/apr_date.h -misc/apr_rmm.lo: misc/apr_rmm.c .make.dirs include/apr_rmm.h include/apr_anylock.h -misc/apr_queue.lo: misc/apr_queue.c .make.dirs include/apr_queue.h -uri/apr_uri.lo: uri/apr_uri.c .make.dirs include/apr_uri.h -xml/apr_xml.lo: xml/apr_xml.c .make.dirs include/apr_xml.h include/apr_xlate.h -strmatch/apr_strmatch.lo: strmatch/apr_strmatch.c .make.dirs include/apr_strmatch.h -xlate/xlate.lo: xlate/xlate.c .make.dirs include/apr_xlate.h -dbd/apr_dbd.lo: dbd/apr_dbd.c .make.dirs include/apr_dbd.h -dbd/apr_dbd_sqlite2.lo: dbd/apr_dbd_sqlite2.c .make.dirs -dbd/apr_dbd_sqlite3.lo: dbd/apr_dbd_sqlite3.c .make.dirs -dbd/apr_dbd_pgsql.lo: dbd/apr_dbd_pgsql.c .make.dirs +buckets/apr_buckets_socket.lo: buckets/apr_buckets_socket.c .make.dirs include/apu.h include/apr_buckets.h +buckets/apr_buckets_mmap.lo: buckets/apr_buckets_mmap.c .make.dirs include/apu.h include/apr_buckets.h +buckets/apr_buckets_eos.lo: buckets/apr_buckets_eos.c .make.dirs include/apu.h include/apr_buckets.h +buckets/apr_buckets_file.lo: buckets/apr_buckets_file.c .make.dirs include/apu.h include/apr_buckets.h +buckets/apr_buckets_pipe.lo: buckets/apr_buckets_pipe.c .make.dirs include/apu.h include/apr_buckets.h +buckets/apr_buckets_refcount.lo: buckets/apr_buckets_refcount.c .make.dirs include/apu.h include/apr_buckets.h +buckets/apr_brigade.lo: buckets/apr_brigade.c .make.dirs include/apu.h include/apr_buckets.h +buckets/apr_buckets.lo: buckets/apr_buckets.c .make.dirs include/apu.h include/apr_buckets.h +buckets/apr_buckets_flush.lo: buckets/apr_buckets_flush.c .make.dirs include/apu.h include/apr_buckets.h +buckets/apr_buckets_simple.lo: buckets/apr_buckets_simple.c .make.dirs include/apu.h include/apr_buckets.h +buckets/apr_buckets_heap.lo: buckets/apr_buckets_heap.c .make.dirs include/apu.h include/apr_buckets.h +buckets/apr_buckets_pool.lo: buckets/apr_buckets_pool.c .make.dirs include/apu.h include/apr_buckets.h +buckets/apr_buckets_alloc.lo: buckets/apr_buckets_alloc.c .make.dirs include/apu.h include/apr_buckets.h +crypto/apr_md4.lo: crypto/apr_md4.c .make.dirs include/apr_md4.h include/apu.h include/apr_xlate.h +crypto/getuuid.lo: crypto/getuuid.c .make.dirs include/apr_uuid.h include/apr_md5.h include/apr_xlate.h include/apu.h +crypto/apr_md5.lo: crypto/apr_md5.c .make.dirs include/private/apu_config.h include/apr_md5.h include/apu.h include/apr_sha1.h include/apr_xlate.h +crypto/uuid.lo: crypto/uuid.c .make.dirs include/apr_uuid.h include/apu.h +crypto/apr_sha1.lo: crypto/apr_sha1.c .make.dirs include/apr_xlate.h include/apr_sha1.h include/apu.h include/apr_base64.h +dbm/apr_dbm_sdbm.lo: dbm/apr_dbm_sdbm.c .make.dirs include/apr_dbm.h include/apu.h include/private/apr_dbm_private.h include/apr_sdbm.h include/private/apu_select_dbm.h +dbm/apr_dbm.lo: dbm/apr_dbm.c .make.dirs include/apr_dbm.h include/private/apu_select_dbm.h include/private/apr_dbm_private.h include/apu.h +dbm/apr_dbm_ndbm.lo: dbm/apr_dbm_ndbm.c .make.dirs include/private/apu_select_dbm.h include/apr_dbm.h include/apu.h include/private/apr_dbm_private.h +dbm/apr_dbm_gdbm.lo: dbm/apr_dbm_gdbm.c .make.dirs include/private/apu_select_dbm.h include/apr_dbm.h include/apu.h include/private/apr_dbm_private.h +dbm/apr_dbm_berkeleydb.lo: dbm/apr_dbm_berkeleydb.c .make.dirs include/apr_dbm.h include/apu.h include/apu_want.h include/private/apr_dbm_private.h include/private/apu_select_dbm.h +dbm/sdbm/sdbm_hash.lo: dbm/sdbm/sdbm_hash.c .make.dirs include/apr_sdbm.h include/apu.h +dbm/sdbm/sdbm_lock.lo: dbm/sdbm/sdbm_lock.c .make.dirs include/apr_sdbm.h include/apu.h +dbm/sdbm/sdbm_pair.lo: dbm/sdbm/sdbm_pair.c .make.dirs include/apr_sdbm.h include/apu.h +dbm/sdbm/sdbm.lo: dbm/sdbm/sdbm.c .make.dirs include/apr_sdbm.h include/apu.h +encoding/apr_base64.lo: encoding/apr_base64.c .make.dirs include/apu.h include/apr_base64.h include/apr_xlate.h +hooks/apr_hooks.lo: hooks/apr_hooks.c .make.dirs include/apr_optional_hooks.h include/apr_optional.h include/apu.h include/apr_hooks.h +ldap/apr_ldap_url.lo: ldap/apr_ldap_url.c .make.dirs include/apu.h include/apr_ldap_url.h include/apr_ldap_option.h include/apr_ldap_init.h include/apr_ldap.h +ldap/apr_ldap_init.lo: ldap/apr_ldap_init.c .make.dirs include/apu.h include/apr_ldap_url.h include/apr_ldap_option.h include/apr_ldap_init.h include/apr_ldap.h +ldap/apr_ldap_option.lo: ldap/apr_ldap_option.c .make.dirs include/apu.h include/apr_ldap_url.h include/apr_ldap_option.h include/apr_ldap_init.h include/apr_ldap.h +misc/apr_date.lo: misc/apr_date.c .make.dirs include/apr_date.h include/apu.h +misc/apr_rmm.lo: misc/apr_rmm.c .make.dirs include/apr_rmm.h include/apr_anylock.h include/apu.h +misc/apr_reslist.lo: misc/apr_reslist.c .make.dirs include/apr_reslist.h include/apu.h +misc/apu_version.lo: misc/apu_version.c .make.dirs include/apu_version.h include/apu.h +misc/apr_queue.lo: misc/apr_queue.c .make.dirs include/apr_queue.h include/apu.h +uri/apr_uri.lo: uri/apr_uri.c .make.dirs include/apu.h include/apr_uri.h +xml/apr_xml.lo: xml/apr_xml.c .make.dirs include/apr_xml.h include/private/apu_config.h include/apr_xlate.h include/apu.h +strmatch/apr_strmatch.lo: strmatch/apr_strmatch.c .make.dirs include/apu.h include/apr_strmatch.h +xlate/xlate.lo: xlate/xlate.c .make.dirs include/apu.h include/private/apu_config.h include/apr_xlate.h +dbd/apr_dbd.lo: dbd/apr_dbd.c .make.dirs include/private/apu_config.h include/private/apr_dbd_internal.h include/apu.h include/apu_version.h include/apr_dbd.h -OBJECTS_all = buckets/apr_buckets_pipe.lo buckets/apr_buckets_flush.lo buckets/apr_buckets_alloc.lo buckets/apr_buckets_pool.lo buckets/apr_buckets_socket.lo buckets/apr_buckets_heap.lo buckets/apr_buckets_simple.lo buckets/apr_buckets_file.lo buckets/apr_buckets.lo buckets/apr_buckets_mmap.lo buckets/apr_buckets_eos.lo buckets/apr_brigade.lo buckets/apr_buckets_refcount.lo crypto/apr_sha1.lo crypto/uuid.lo crypto/getuuid.lo crypto/apr_md5.lo crypto/apr_md4.lo dbm/apr_dbm.lo dbm/apr_dbm_berkeleydb.lo dbm/apr_dbm_gdbm.lo dbm/apr_dbm_ndbm.lo dbm/apr_dbm_sdbm.lo dbm/sdbm/sdbm_pair.lo dbm/sdbm/sdbm.lo dbm/sdbm/sdbm_hash.lo dbm/sdbm/sdbm_lock.lo encoding/apr_base64.lo hooks/apr_hooks.lo ldap/apr_ldap_url.lo ldap/apr_ldap_option.lo ldap/apr_ldap_init.lo misc/apr_reslist.lo misc/apu_version.lo misc/apr_date.lo misc/apr_rmm.lo misc/apr_queue.lo uri/apr_uri.lo xml/apr_xml.lo strmatch/apr_strmatch.lo xlate/xlate.lo dbd/apr_dbd.lo dbd/apr_dbd_sqlite2.lo dbd/apr_dbd_sqlite3.lo dbd/apr_dbd_pgsql.lo +OBJECTS_all = buckets/apr_buckets_socket.lo buckets/apr_buckets_mmap.lo buckets/apr_buckets_eos.lo buckets/apr_buckets_file.lo buckets/apr_buckets_pipe.lo buckets/apr_buckets_refcount.lo buckets/apr_brigade.lo buckets/apr_buckets.lo buckets/apr_buckets_flush.lo buckets/apr_buckets_simple.lo buckets/apr_buckets_heap.lo buckets/apr_buckets_pool.lo buckets/apr_buckets_alloc.lo crypto/apr_md4.lo crypto/getuuid.lo crypto/apr_md5.lo crypto/uuid.lo crypto/apr_sha1.lo dbm/apr_dbm_sdbm.lo dbm/apr_dbm.lo dbm/apr_dbm_ndbm.lo dbm/apr_dbm_gdbm.lo dbm/apr_dbm_berkeleydb.lo dbm/sdbm/sdbm_hash.lo dbm/sdbm/sdbm_lock.lo dbm/sdbm/sdbm_pair.lo dbm/sdbm/sdbm.lo encoding/apr_base64.lo hooks/apr_hooks.lo ldap/apr_ldap_url.lo ldap/apr_ldap_init.lo ldap/apr_ldap_option.lo misc/apr_date.lo misc/apr_rmm.lo misc/apr_reslist.lo misc/apu_version.lo misc/apr_queue.lo uri/apr_uri.lo xml/apr_xml.lo strmatch/apr_strmatch.lo xlate/xlate.lo dbd/apr_dbd.lo OBJECTS_unix = $(OBJECTS_all) @@ -58,10 +55,34 @@ OBJECTS_os390 = $(OBJECTS_all) -HEADERS = $(top_srcdir)/include/apr_ldap_url.h $(top_srcdir)/include/apr_uuid.h $(top_srcdir)/include/apr_xml.h $(top_srcdir)/include/apr_queue.h $(top_srcdir)/include/apr_anylock.h $(top_srcdir)/include/apr_rmm.h $(top_srcdir)/include/apr_strmatch.h $(top_srcdir)/include/apr_date.h $(top_srcdir)/include/apr_xlate.h $(top_srcdir)/include/apr_hooks.h $(top_srcdir)/include/apr_ldap_init.h $(top_srcdir)/include/apr_sha1.h $(top_srcdir)/include/apr_optional.h $(top_srcdir)/include/apr_base64.h $(top_srcdir)/include/apr_ldap_option.h $(top_srcdir)/include/apr_reslist.h $(top_srcdir)/include/apr_sdbm.h $(top_srcdir)/include/apr_uri.h $(top_srcdir)/include/apr_optional_hooks.h $(top_srcdir)/include/apu_version.h $(top_srcdir)/include/apr_md4.h $(top_srcdir)/include/apr_buckets.h $(top_srcdir)/include/apr_dbd.h $(top_srcdir)/include/apr_md5.h $(top_srcdir)/include/apr_dbm.h +HEADERS = $(top_srcdir)/include/apr_dbm.h $(top_srcdir)/include/apr_uuid.h $(top_srcdir)/include/apr_ldap_init.h $(top_srcdir)/include/apr_ldap_url.h $(top_srcdir)/include/apr_queue.h $(top_srcdir)/include/apr_buckets.h $(top_srcdir)/include/apr_sdbm.h $(top_srcdir)/include/apr_xml.h $(top_srcdir)/include/apr_dbd.h $(top_srcdir)/include/apu_want.h $(top_srcdir)/include/apr_base64.h $(top_srcdir)/include/apr_uri.h $(top_srcdir)/include/apr_optional.h $(top_srcdir)/include/apr_md4.h $(top_srcdir)/include/apu_version.h $(top_srcdir)/include/apr_anylock.h $(top_srcdir)/include/apr_date.h $(top_srcdir)/include/apr_reslist.h $(top_srcdir)/include/apr_optional_hooks.h $(top_srcdir)/include/apr_ldap_option.h $(top_srcdir)/include/apu.h $(top_srcdir)/include/apr_xlate.h $(top_srcdir)/include/apr_ldap.h $(top_srcdir)/include/apr_rmm.h $(top_srcdir)/include/apr_strmatch.h $(top_srcdir)/include/apr_md5.h $(top_srcdir)/include/apr_hooks.h $(top_srcdir)/include/apr_sha1.h $(top_srcdir)/include/private/apu_config.h $(top_srcdir)/include/private/apu_select_dbm.h $(top_srcdir)/include/private/apr_dbd_internal.h $(top_srcdir)/include/private/apr_dbm_private.h SOURCE_DIRS = xml dbd dbm encoding hooks buckets misc crypto uri strmatch dbm/sdbm ldap xlate $(EXTRA_SOURCE_DIRS) +dbd/apr_dbd_pgsql.lo: dbd/apr_dbd_pgsql.c .make.dirs include/private/apr_dbd_internal.h include/apu.h include/private/apu_config.h include/apr_dbd.h +OBJECTS_dbd_pgsql = dbd/apr_dbd_pgsql.lo +MODULE_dbd_pgsql = dbd/apr_dbd_pgsql.la +dbd/apr_dbd_pgsql.la: dbd/apr_dbd_pgsql.lo + $(LINK_MODULE) -o $@ $(OBJECTS_dbd_pgsql) $(LDADD_dbd_pgsql) + +dbd/apr_dbd_sqlite2.lo: dbd/apr_dbd_sqlite2.c .make.dirs include/apu.h include/private/apr_dbd_internal.h include/apr_dbd.h +OBJECTS_dbd_sqlite2 = dbd/apr_dbd_sqlite2.lo +MODULE_dbd_sqlite2 = dbd/apr_dbd_sqlite2.la +dbd/apr_dbd_sqlite2.la: dbd/apr_dbd_sqlite2.lo + $(LINK_MODULE) -o $@ $(OBJECTS_dbd_sqlite2) $(LDADD_dbd_sqlite2) + +dbd/apr_dbd_sqlite3.lo: dbd/apr_dbd_sqlite3.c .make.dirs include/apu.h include/private/apr_dbd_internal.h include/apr_dbd.h +OBJECTS_dbd_sqlite3 = dbd/apr_dbd_sqlite3.lo +MODULE_dbd_sqlite3 = dbd/apr_dbd_sqlite3.la +dbd/apr_dbd_sqlite3.la: dbd/apr_dbd_sqlite3.lo + $(LINK_MODULE) -o $@ $(OBJECTS_dbd_sqlite3) $(LDADD_dbd_sqlite3) + +dbd/apr_dbd_mysql.lo: dbd/apr_dbd_mysql.c .make.dirs include/apu.h include/private/apr_dbd_internal.h include/private/apu_config.h include/apu_version.h include/apr_buckets.h include/apr_dbd.h +OBJECTS_dbd_mysql = dbd/apr_dbd_mysql.lo +MODULE_dbd_mysql = dbd/apr_dbd_mysql.la +dbd/apr_dbd_mysql.la: dbd/apr_dbd_mysql.lo + $(LINK_MODULE) -o $@ $(OBJECTS_dbd_mysql) $(LDADD_dbd_mysql) + BUILD_DIRS = buckets crypto dbd dbm dbm/sdbm encoding hooks ldap misc strmatch uri xlate xml .make.dirs: $(srcdir)/build-outputs.mk --- apr-util-1.2.8/build.conf.dbddso +++ apr-util-1.2.8/build.conf @@ -18,15 +18,33 @@ xml/*.c strmatch/*.c xlate/*.c - dbd/*.c + dbd/apr_dbd.c # we have no platform-specific subdirs platform_dirs = # the public headers -headers = include/*.h +headers = include/*.h include/private/*.h + +modules = dbd_pgsql dbd_sqlite2 dbd_sqlite3 dbd_mysql # gen_uri_delim.c # we have a recursive makefile for the test files (for now) # test/*.c + +[dbd_pgsql] +paths = dbd/apr_dbd_pgsql.c +target = dbd/apr_dbd_pgsql.la + +[dbd_sqlite2] +paths = dbd/apr_dbd_sqlite2.c +target = dbd/apr_dbd_sqlite2.la + +[dbd_sqlite3] +paths = dbd/apr_dbd_sqlite3.c +target = dbd/apr_dbd_sqlite3.la + +[dbd_mysql] +paths = dbd/apr_dbd_mysql.c +target = dbd/apr_dbd_mysql.la --- apr-util-1.2.8/dbd/apr_dbd.c.dbddso +++ apr-util-1.2.8/dbd/apr_dbd.c @@ -16,28 +16,28 @@ #include +#include "apu_config.h" #include "apu.h" + #include "apr_pools.h" -#include "apr_dbd_internal.h" -#include "apr_dbd.h" -#include "apr_hash.h" -#include "apr_thread_mutex.h" #include "apr_dso.h" #include "apr_strings.h" +#include "apr_hash.h" +#include "apr_thread_mutex.h" + +#include "apr_dbd_internal.h" +#include "apr_dbd.h" +#include "apu_version.h" static apr_hash_t *drivers = NULL; #define CLEANUP_CAST (apr_status_t (*)(void*)) -/* Once the autofoo supports building it for dynamic load, we can use - * #define APR_DSO_BUILD APR_HAS_DSO - */ - -#if APR_DSO_BUILD #if APR_HAS_THREADS static apr_thread_mutex_t* mutex = NULL; #endif -#else + +#ifndef APU_DSO_BUILD #define DRIVER_LOAD(name,driver,pool) \ { \ extern const apr_dbd_driver_t driver; \ @@ -70,15 +70,13 @@ apr_pool_cleanup_register(pool, NULL, apr_dbd_term, apr_pool_cleanup_null); -#if APR_DSO_BUILD - #if APR_HAS_THREADS ret = apr_thread_mutex_create(&mutex, APR_THREAD_MUTEX_DEFAULT, pool); /* This already registers a pool cleanup */ #endif -#else - +#ifndef APU_DSO_BUILD + /* Load statically-linked drivers: */ #if APU_HAVE_MYSQL DRIVER_LOAD("mysql", apr_dbd_mysql_driver, pool); #endif @@ -94,62 +92,68 @@ #if APU_HAVE_SOME_OTHER_BACKEND DRIVER_LOAD("firebird", apr_dbd_other_driver, pool); #endif -#endif +#endif /* APU_DSO_BUILD */ + return ret; } + +#if defined(APU_DSO_BUILD) && APR_HAS_THREADS +#define dbd_drivers_lock(m) apr_thread_mutex_lock(m) +#define dbd_drivers_unlock(m) apr_thread_mutex_unlock(m) +#else +#define dbd_drivers_lock(m) APR_SUCCESS +#define dbd_drivers_unlock(m) +#endif + APU_DECLARE(apr_status_t) apr_dbd_get_driver(apr_pool_t *pool, const char *name, const apr_dbd_driver_t **driver) { -#if APR_DSO_BUILD +#ifdef APU_DSO_BUILD char path[80]; apr_dso_handle_t *dlhandle = NULL; + apr_dso_handle_sym_t symbol; #endif apr_status_t rv; - *driver = apr_hash_get(drivers, name, APR_HASH_KEY_STRING); - if (*driver) { + rv = dbd_drivers_lock(mutex); + if (rv) { return APR_SUCCESS; } -#if APR_DSO_BUILD - -#if APR_HAS_THREADS - rv = apr_thread_mutex_lock(mutex); - if (rv != APR_SUCCESS) { - goto unlock; - } - *driver = apr_hash_get(drivers, name, APR_HASH_KEY_STRING); + *driver = apr_hash_get(drivers, name, APR_HASH_KEY_STRING); if (*driver) { - goto unlock; + dbd_drivers_unlock(mutex); + return APR_SUCCESS; } -#endif + +#ifdef APU_DSO_BUILD + pool = apr_hash_pool_get(drivers); #ifdef WIN32 sprintf(path, "apr_dbd_%s.dll", name); #else - sprintf(path, "apr_dbd_%s.so", name); + apr_snprintf(path, sizeof path, APU_DSO_LIBDIR "/apr_dbd_%s.so", name); #endif rv = apr_dso_load(&dlhandle, path, pool); if (rv != APR_SUCCESS) { /* APR_EDSOOPEN */ goto unlock; } sprintf(path, "apr_dbd_%s_driver", name); - rv = apr_dso_sym((void*)driver, dlhandle, path); + rv = apr_dso_sym(&symbol, dlhandle, path); if (rv != APR_SUCCESS) { /* APR_ESYMNOTFOUND */ apr_dso_unload(dlhandle); goto unlock; } + *driver = symbol; if ((*driver)->init) { (*driver)->init(pool); } apr_hash_set(drivers, name, APR_HASH_KEY_STRING, *driver); unlock: -#if APR_HAS_THREADS - apr_thread_mutex_unlock(mutex); -#endif + dbd_drivers_unlock(mutex); -#else /* APR_DSO_BUILD - so if it wasn't already loaded, it's NOTIMPL */ +#else /* not builtin and !APR_HAS_DSO => not implemented */ rv = APR_ENOTIMPL; #endif --- apr-util-1.2.8/configure.in.dbddso +++ apr-util-1.2.8/configure.in @@ -122,6 +122,8 @@ APU_CHECK_DBD_MYSQL APU_CHECK_DBD_SQLITE3 APU_CHECK_DBD_SQLITE2 +dnl Enable DSO build; must be last: +APU_CHECK_DBD_DSO APU_FIND_EXPAT APU_FIND_ICONV @@ -148,6 +150,23 @@ APRUTIL_LIBNAME="aprutil${libsuffix}" AC_SUBST(APRUTIL_LIBNAME) +# Set up destination directory for DSOs. +APU_DSO_LIBDIR="\${libdir}/apr-util-${APRUTIL_MAJOR_VERSION}" +# Set APU_HAVE_MODULES appropriately for the Makefile +if test -n "$APU_MODULES"; then + APU_HAVE_MODULES=yes +else + APU_HAVE_MODULES=no +fi +# Define expanded libdir for apu_config.h +APR_EXPAND_VAR(abs_dso_libdir, $APU_DSO_LIBDIR) +AC_DEFINE_UNQUOTED([APU_DSO_LIBDIR], ["$abs_dso_libdir"], + [Define to be absolute path to DSO directory]) +AC_SUBST(APU_HAVE_MODULES) +AC_SUBST(APU_DSO_LIBDIR) +AC_SUBST(APU_MODULES) +AC_SUBST(EXTRA_OBJECTS) + dnl dnl Prep all the flags and stuff for compilation and export to other builds dnl --- apr-util-1.2.8/Makefile.in.dbddso +++ apr-util-1.2.8/Makefile.in @@ -22,7 +22,18 @@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -TARGETS = $(TARGET_LIB) aprutil.exp +APU_MODULES = @APU_MODULES@ +LINK_MODULE = $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LT_LDFLAGS) $(ALL_CFLAGS) $(ALL_LDFLAGS) $(APRUTIL_LDFLAGS) -release $(APRUTIL_MAJOR_VERSION) -module -rpath $(APU_DSO_LIBDIR) +APU_DSO_LIBDIR = @APU_DSO_LIBDIR@ + +EXTRA_OBJECTS = @EXTRA_OBJECTS@ + +LDADD_dbd_pgsql = @LDADD_dbd_pgsql@ +LDADD_dbd_sqlite2 = @LDADD_dbd_sqlite2@ +LDADD_dbd_sqlite3 = @LDADD_dbd_sqlite3@ +LDADD_dbd_mysql = @LDADD_dbd_mysql@ + +TARGETS = $(TARGET_LIB) aprutil.exp apu-config.out $(APU_MODULES) # bring in rules.mk for standard functionality @INCLUDE_RULES@ @@ -53,7 +64,7 @@ apu-config.out: $(APU_CONFIG) sed 's,^\(location=\).*$$,\1installed,;s,^\(APR_.*_DIR\)=.*,\1="$${libdir}/build",' < $(APU_CONFIG) > $@ -install: $(TARGET_LIB) apu-config.out +install: $(TARGETS) install-modules $(APR_MKDIR) $(DESTDIR)$(includedir) $(DESTDIR)$(libdir)/pkgconfig \ $(DESTDIR)$(libdir) $(DESTDIR)$(bindir) for f in $(top_srcdir)/include/*.h $(top_blddir)/include/*.h; do \ @@ -67,8 +78,16 @@ $(INSTALL_DATA) aprutil.exp $(DESTDIR)$(libdir) $(INSTALL) -m 755 apu-config.out $(DESTDIR)$(bindir)/$(APU_CONFIG) -$(TARGET_LIB): $(OBJECTS) - $(LINK) @lib_target@ $(ALL_LIBS) $(APRUTIL_LDFLAGS) $(APRUTIL_LIBS) +$(TARGET_LIB): $(OBJECTS) $(EXTRA_OBJECTS) + $(LINK) @lib_target@ $(EXTRA_OBJECTS) $(ALL_LIBS) $(APRUTIL_LDFLAGS) $(APRUTIL_LIBS) + +install-modules: install-modules-@APU_HAVE_MODULES@ + +install-modules-no: + +install-modules-yes: $(APU_MODULES) + $(APR_MKDIR) $(DESTDIR)$(APU_DSO_LIBDIR) + @for m in $(APU_MODULES); do $(LIBTOOL) $(LT_LTFLAGS) $(LTFLAGS) --mode=install $(INSTALL) -m 755 $$m $(DESTDIR)$(APU_DSO_LIBDIR); done exports.c: $(HEADERS) $(APR_MKEXPORT) $(HEADERS) > $@ @@ -89,3 +108,5 @@ test: check check: $(TARGET_LIB) cd test && $(MAKE) check + +.PHONY: install-modules install-modules-yes install-modules-no dox test check --- apr-util-1.2.8/build/dbd.m4.dbddso +++ apr-util-1.2.8/build/dbd.m4 @@ -70,8 +70,9 @@ dnl Since we have already done the AC_CHECK_LIB tests, if we have it, dnl we know the library is there. if test "$apu_have_pgsql" = "1"; then - APR_ADDTO(APRUTIL_LIBS,[-lpq]) + LDADD_dbd_pgsql=-lpq fi + AC_SUBST(LDADD_dbd_pgsql) ]) dnl AC_DEFUN([APU_CHECK_DBD_MYSQL], [ @@ -101,7 +102,6 @@ else if test "x$MYSQL_CONFIG" != 'x'; then APR_ADDTO(APRUTIL_INCLUDES, [$mysql_CPPFLAGS]) - APR_ADDTO(APRUTIL_LDFLAGS, [$mysql_LDFLAGS]) fi fi @@ -129,14 +129,12 @@ AC_CHECK_HEADERS(mysql.h, AC_CHECK_LIB(mysqlclient_r, mysql_init, [apu_have_mysql=1])) if test "$apu_have_mysql" != "0"; then APR_ADDTO(APRUTIL_INCLUDES, [$mysql_CPPFLAGS]) - APR_ADDTO(APRUTIL_LDFLAGS, [$mysql_LDFLAGS]) fi if test "$apu_have_mysql" != "1"; then AC_CHECK_HEADERS(mysql/mysql.h, AC_CHECK_LIB(mysqlclient_r, mysql_init, [apu_have_mysql=1])) if test "$apu_have_mysql" != "0"; then APR_ADDTO(APRUTIL_INCLUDES, [-I$withval/include/mysql]) - APR_ADDTO(APRUTIL_LDFLAGS, [-L$withval/lib]) fi fi @@ -163,7 +161,6 @@ if test "$apu_have_mysql" != "0"; then if test "x$MYSQL_CONFIG" != 'x'; then APR_ADDTO(APRUTIL_INCLUDES, [$mysql_CPPFLAGS]) - APR_ADDTO(APRUTIL_LDFLAGS, [$mysql_LDFLAGS]) fi fi @@ -177,8 +174,9 @@ dnl Since we have already done the AC_CHECK_LIB tests, if we have it, dnl we know the library is there. if test "$apu_have_mysql" = "1"; then - APR_ADDTO(APRUTIL_LIBS,[-lmysqlclient_r]) + LDADD_dbd_mysql=$mysql_LDFLAGS fi + AC_SUBST(LDADD_dbd_mysql) ]) dnl AC_DEFUN([APU_CHECK_DBD_SQLITE3], [ @@ -222,8 +220,9 @@ dnl Since we have already done the AC_CHECK_LIB tests, if we have it, dnl we know the library is there. if test "$apu_have_sqlite3" = "1"; then - APR_ADDTO(APRUTIL_LIBS,[-lsqlite3]) + LDADD_dbd_sqlite3="-lsqlite3" fi + AC_SUBST(LDADD_dbd_sqlite3) ]) dnl AC_DEFUN([APU_CHECK_DBD_SQLITE2], [ @@ -267,8 +266,38 @@ dnl Since we have already done the AC_CHECK_LIB tests, if we have it, dnl we know the library is there. if test "$apu_have_sqlite2" = "1"; then - APR_ADDTO(APRUTIL_LIBS,[-lsqlite]) + LDADD_dbd_sqlite2="-lsqlite" fi + AC_SUBST(LDADD_dbd_sqlite2) ]) dnl +AC_DEFUN([APU_CHECK_DBD_DSO], [ + + AC_ARG_ENABLE([dbd-dso], + APR_HELP_STRING([--enable-dbd-dso], [build DBD drivers as DSOs])) + + if test "$enable_dbd_dso" = "yes"; then + AC_DEFINE([APU_DSO_BUILD], 1, [Define if DBD drivers are built as DSOs]) + + dsos= + test $apu_have_pgsql = 1 && dsos="$dsos dbd/apr_dbd_pgsql.la" + test $apu_have_mysql = 1 && dsos="$dsos dbd/apr_dbd_mysql.la" + test $apu_have_sqlite2 = 1 && dsos="$dsos dbd/apr_dbd_sqlite2.la" + test $apu_have_sqlite3 = 1 && dsos="$dsos dbd/apr_dbd_sqlite3.la" + + APU_MODULES="$APU_MODULES $dsos" + else + # Statically link the DBD drivers: + + objs= + test $apu_have_pgsql = 1 && objs="$objs dbd/apr_dbd_pgsql.lo" + test $apu_have_mysql = 1 && objs="$objs dbd/apr_dbd_mysql.lo" + test $apu_have_sqlite2 = 1 && objs="$objs dbd/apr_dbd_sqlite2.lo" + test $apu_have_sqlite3 = 1 && objs="$objs dbd/apr_dbd_sqlite3.lo" + EXTRA_OBJECTS="$EXTRA_OBJECTS $objs" + + APRUTIL_LIBS="$APRUTIL_LIBS $LDADD_dbd_pgsql $LDADD_dbd_sqlite2 $LDADD_dbd_sqlite3 $LDADD_dbd_mysql" + APRUTIL_EXPORT_LIBS="$APRUTIL_EXPORT_LIBS $LDADD_dbd_pgsql $LDADD_dbd_sqlite2 $LDADD_dbd_sqlite3 $LDADD_dbd_mysql" + fi +])