Return-Path: Delivered-To: apmail-apr-dev-archive@www.apache.org Received: (qmail 89430 invoked from network); 30 Jan 2007 01:34:33 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 30 Jan 2007 01:34:33 -0000 Received: (qmail 70153 invoked by uid 500); 30 Jan 2007 01:34:38 -0000 Delivered-To: apmail-apr-dev-archive@apr.apache.org Received: (qmail 70095 invoked by uid 500); 30 Jan 2007 01:34:37 -0000 Mailing-List: contact dev-help@apr.apache.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Id: Delivered-To: mailing list dev@apr.apache.org Received: (qmail 70084 invoked by uid 99); 30 Jan 2007 01:34:37 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 29 Jan 2007 17:34:37 -0800 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=SPF_HELO_PASS,SPF_PASS,UPPERCASE_25_50 X-Spam-Check-By: apache.org Received-SPF: pass (herse.apache.org: domain of bojan@rexursive.com designates 203.171.74.242 as permitted sender) Received: from [203.171.74.242] (HELO beauty.rexursive.com) (203.171.74.242) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 29 Jan 2007 17:34:26 -0800 Received: from [172.27.0.24] (shrek.rexursive.com [172.27.0.24]) by beauty.rexursive.com (Postfix) with ESMTP id 2DD0B256BCD; Tue, 30 Jan 2007 12:34:03 +1100 (EST) Subject: Re: [PATCH] DBD drivers as DSOs From: Bojan Smojver To: Joe Orton Cc: dev@apr.apache.org In-Reply-To: <20070129164304.GB3461@redhat.com> References: <20070129164304.GB3461@redhat.com> Content-Type: multipart/mixed; boundary="=-qr5OVnHfyNdeM5ovep3O" Date: Tue, 30 Jan 2007 12:34:02 +1100 Message-Id: <1170120843.3072.27.camel@shrek.rexursive.com> Mime-Version: 1.0 X-Mailer: Evolution 2.8.2.1 (2.8.2.1-3.fc6) X-Virus-Checked: Checked by ClamAV on apache.org --=-qr5OVnHfyNdeM5ovep3O Content-Type: text/plain Content-Transfer-Encoding: 7bit On Mon, 2007-01-29 at 16:43 +0000, Joe Orton wrote: > +LINK_MODULE = $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LT_LDFLAGS) $(ALL_CFLAGS) $(ALL_LDFLAGS) -release $(APRUTIL_MAJOR_VERSION) -module -rpath $(APU_DSO_LIBDIR) I needed to whack $(APRUTIL_LDFLAGS) into the above line to make things link properly. > +LDADD_dbd_pgsql = @LDADD_dbd_pgsql@ > +LDADD_dbd_oracle = @LDADD_dbd_oracle@ > +LDADD_dbd_sqlite2 = @LDADD_dbd_sqlite2@ > +LDADD_dbd_sqlite3 = @LDADD_dbd_sqlite3@ I added MySQL stuff here, since I build with that enabled too. > +modules = dbd_pgsql dbd_sqlite2 dbd_sqlite3 dbd_oracle Added MySQL above too. > +[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_oracle] > +paths = dbd/apr_dbd_oracle.c > +target = dbd/apr_dbd_oracle.la And here, of course. > Index: build/dbd.m4 > =================================================================== > --- build/dbd.m4 (revision 501084) > +++ build/dbd.m4 (working copy) [..snip..] > @@ -367,8 +364,40 @@ > 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_oracle" = "1"; then > - APR_ADDTO(APRUTIL_EXPORT_LIBS,[-lclntsh]) > - APR_ADDTO(APRUTIL_LIBS,[-lclntsh]) > + LDADD_dbd_oracle="$LDADD_dbd_oracle -lclntsh" > fi > + AC_SUBST(LDADD_dbd_oracle) > ]) > -dnl Fixed up the same for MySQL above. Otherwise, looks good (FC6)! I tested with all 5 databases we support and drivers got picked up just fine. Also, ldd for libaprutil-1.so showed exactly what we want (no database dependencies): ---------------------------------------- linux-gate.so.1 => (0x00d29000) libdb-4.3.so => /lib/libdb-4.3.so (0x002c1000) libexpat.so.0 => /lib/libexpat.so.0 (0x00563000) libapr-1.so.0 => /home/groups/devel/run/apache/lib/libapr-1.so.0 (0x00a83000) libuuid.so.1 => /lib/libuuid.so.1 (0x001bb000) librt.so.1 => /lib/librt.so.1 (0x004ea000) libcrypt.so.1 => /lib/libcrypt.so.1 (0x00db7000) libpthread.so.0 => /lib/libpthread.so.0 (0x00110000) libdl.so.2 => /lib/libdl.so.2 (0x00127000) libc.so.6 => /lib/libc.so.6 (0x0093c000) /lib/ld-linux.so.2 (0x80000000) ---------------------------------------- And correct dependencies for drivers: ---------------------------------------- /home/groups/devel/run/apache/lib/apr-util-1/apr_dbd_mysql-1.so: linux-gate.so.1 => (0x007f9000) libmysqlclient_r.so.15 => /usr/lib/mysql/libmysqlclient_r.so.15 (0x00349000) libz.so.1 => /usr/lib/libz.so.1 (0x00546000) libcrypt.so.1 => /lib/libcrypt.so.1 (0x008de000) libnsl.so.1 => /lib/libnsl.so.1 (0x007fe000) libm.so.6 => /lib/libm.so.6 (0x00110000) libpthread.so.0 => /lib/libpthread.so.0 (0x00137000) libssl.so.6 => /lib/libssl.so.6 (0x009ec000) libcrypto.so.6 => /lib/libcrypto.so.6 (0x0014e000) libc.so.6 => /lib/libc.so.6 (0x00559000) /lib/ld-linux.so.2 (0x80000000) libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x006d1000) libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x00b5e000) libcom_err.so.2 => /lib/libcom_err.so.2 (0x00280000) libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x00aec000) libresolv.so.2 => /lib/libresolv.so.2 (0x00283000) libdl.so.2 => /lib/libdl.so.2 (0x00296000) libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0x00330000) /home/groups/devel/run/apache/lib/apr-util-1/apr_dbd_oracle-1.so: linux-gate.so.1 => (0x0048f000) libnnz10.so => /usr/lib/oracle/xe/app/oracle/product/10.2.0/client/lib/libnnz10.so (0x00d3e000) libclntsh.so.10.1 => /usr/lib/oracle/xe/app/oracle/product/10.2.0/client/lib/libclntsh.so.10.1 (0x00f4d000) libpthread.so.0 => /lib/libpthread.so.0 (0x005b2000) libc.so.6 => /lib/libc.so.6 (0x00144000) libdl.so.2 => /lib/libdl.so.2 (0x006bd000) libm.so.6 => /lib/libm.so.6 (0x00299000) libnsl.so.1 => /lib/libnsl.so.1 (0x00110000) /lib/ld-linux.so.2 (0x80000000) /home/groups/devel/run/apache/lib/apr-util-1/apr_dbd_pgsql-1.so: linux-gate.so.1 => (0x00573000) libpq.so.4 => /usr/lib/libpq.so.4 (0x00ea7000) libpthread.so.0 => /lib/libpthread.so.0 (0x00bfb000) libc.so.6 => /lib/libc.so.6 (0x0035e000) libssl.so.6 => /lib/libssl.so.6 (0x00af8000) libcrypto.so.6 => /lib/libcrypto.so.6 (0x00110000) libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x00242000) libcrypt.so.1 => /lib/libcrypt.so.1 (0x002c8000) libresolv.so.2 => /lib/libresolv.so.2 (0x00acb000) libnsl.so.1 => /lib/libnsl.so.1 (0x002f6000) /lib/ld-linux.so.2 (0x80000000) libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x00326000) libcom_err.so.2 => /lib/libcom_err.so.2 (0x0060b000) libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x0049b000) libdl.so.2 => /lib/libdl.so.2 (0x00657000) libz.so.1 => /usr/lib/libz.so.1 (0x0030d000) libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0x00787000) /home/groups/devel/run/apache/lib/apr-util-1/apr_dbd_sqlite2-1.so: linux-gate.so.1 => (0x009eb000) libsqlite.so.0 => /usr/lib/libsqlite.so.0 (0x00d75000) libpthread.so.0 => /lib/libpthread.so.0 (0x008fe000) libc.so.6 => /lib/libc.so.6 (0x00466000) /lib/ld-linux.so.2 (0x80000000) /home/groups/devel/run/apache/lib/apr-util-1/apr_dbd_sqlite3-1.so: linux-gate.so.1 => (0x0074c000) libsqlite3.so.0 => /usr/lib/libsqlite3.so.0 (0x00d5a000) libpthread.so.0 => /lib/libpthread.so.0 (0x0071b000) libc.so.6 => /lib/libc.so.6 (0x009e5000) /lib/ld-linux.so.2 (0x80000000) ---------------------------------------- The patch that I used is attached. -- Bojan --=-qr5OVnHfyNdeM5ovep3O Content-Disposition: attachment; filename=apr-util-dbd-dso-2.patch Content-Type: text/x-patch; name=apr-util-dbd-dso-2.patch; charset=utf-8 Content-Transfer-Encoding: 7bit Index: Makefile.in =================================================================== --- Makefile.in (revision 501173) +++ Makefile.in (working copy) @@ -22,8 +22,20 @@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -TARGETS = $(TARGET_LIB) aprutil.exp apu-config.out +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_oracle = @LDADD_dbd_oracle@ +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@ @INCLUDE_OUTPUTS@ @@ -53,7 +65,7 @@ apu-config.out: $(APU_CONFIG) sed 's,^\(location=\).*$$,\1installed,' < $(APU_CONFIG) > $@ -install: $(TARGETS) +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,9 +79,17 @@ $(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) $(LTFLAGS) --mode=install $(INSTALL) -m 755 $$m $(DESTDIR)$(APU_DSO_LIBDIR); done + exports.c: $(HEADERS) $(APR_MKEXPORT) $(HEADERS) > $@ Index: build.conf =================================================================== --- build.conf (revision 501173) +++ build.conf (working copy) @@ -19,7 +19,7 @@ xml/*.c strmatch/*.c xlate/*.c - dbd/*.c + dbd/apr_dbd.c ssl/*.c # we have no platform-specific subdirs @@ -28,7 +28,29 @@ # the public headers headers = include/*.h include/private/*.h +modules = dbd_pgsql dbd_sqlite2 dbd_sqlite3 dbd_oracle 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_oracle] +paths = dbd/apr_dbd_oracle.c +target = dbd/apr_dbd_oracle.la + +[dbd_mysql] +paths = dbd/apr_dbd_mysql.c +target = dbd/apr_dbd_mysql.la Index: configure.in =================================================================== --- configure.in (revision 501173) +++ configure.in (working copy) @@ -141,6 +141,8 @@ APU_CHECK_DBD_SQLITE3 APU_CHECK_DBD_SQLITE2 APU_CHECK_DBD_ORACLE +dnl Enable DSO build; must be last: +APU_CHECK_DBD_DSO APU_FIND_EXPAT APU_FIND_ICONV @@ -169,6 +171,24 @@ 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 appropriate 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 Index: dbd/apr_dbd.c =================================================================== --- dbd/apr_dbd.c (revision 501173) +++ dbd/apr_dbd.c (working copy) @@ -16,23 +16,23 @@ #include +#include "apu_config.h" #include "apu.h" + #include "apr_pools.h" -#include "apr_dbd_internal.h" -#include "apr_dbd.h" +#include "apr_dso.h" +#include "apr_strings.h" #include "apr_hash.h" #include "apr_thread_mutex.h" -#include "apr_dso.h" -#include "apr_strings.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_HAS_THREADS static apr_thread_mutex_t* mutex = NULL; apr_status_t apr_dbd_mutex_lock() @@ -52,7 +52,7 @@ } #endif -#ifndef APR_DSO_BUILD +#ifndef APU_DSO_BUILD #define DRIVER_LOAD(name,driver,pool) \ { \ extern const apr_dbd_driver_t driver; \ @@ -91,8 +91,8 @@ /* This already registers a pool cleanup */ #endif -#ifndef APR_DSO_BUILD - +#ifndef APU_DSO_BUILD + /* Load statically-linked drivers: */ #if APU_HAVE_MYSQL DRIVER_LOAD("mysql", apr_dbd_mysql_driver, pool); #endif @@ -111,15 +111,17 @@ #if APU_HAVE_SOME_OTHER_BACKEND DRIVER_LOAD("firebird", apr_dbd_other_driver, pool); #endif -#endif /* APR_DSO_BUILD */ +#endif /* APU_DSO_BUILD */ + return ret; } 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 +#if APR_HAS_DSO char path[80]; apr_dso_handle_t *dlhandle = NULL; + apr_dso_handle_sym_t symbol; #endif apr_status_t rv; @@ -128,12 +130,12 @@ return APR_SUCCESS; } -#if APR_DSO_BUILD +#if APR_HAS_DSO #if APR_HAS_THREADS rv = apr_thread_mutex_lock(mutex); if (rv != APR_SUCCESS) { - goto unlock; + return rv; } *driver = apr_hash_get(drivers, name, APR_HASH_KEY_STRING); if (*driver) { @@ -144,18 +146,19 @@ #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); } @@ -166,7 +169,7 @@ apr_thread_mutex_unlock(mutex); #endif -#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 Index: build/dbd.m4 =================================================================== --- build/dbd.m4 (revision 501173) +++ build/dbd.m4 (working copy) @@ -69,9 +69,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_EXPORT_LIBS,[-lpq]) - APR_ADDTO(APRUTIL_LIBS,[-lpq]) + LDADD_dbd_pgsql=-lpq fi + AC_SUBST(LDADD_dbd_pgsql) ]) dnl AC_DEFUN([APU_CHECK_DBD_MYSQL], [ @@ -100,7 +100,6 @@ else if test "x$MYSQL_CONFIG" != 'x'; then APR_ADDTO(APRUTIL_INCLUDES, [$mysql_CPPFLAGS]) - APR_ADDTO(APRUTIL_LDFLAGS, [$mysql_LDFLAGS]) fi fi @@ -128,14 +127,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 @@ -162,7 +159,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 @@ -176,9 +172,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_EXPORT_LIBS,[-lmysqlclient_r]) - APR_ADDTO(APRUTIL_LIBS,[-lmysqlclient_r]) + LDADD_dbd_mysql=$mysql_LDFLAGS fi + AC_SUBST(LDADD_dbd_mysql) ]) dnl AC_DEFUN([APU_CHECK_DBD_SQLITE3], [ @@ -221,9 +217,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_EXPORT_LIBS,[-lsqlite3]) - APR_ADDTO(APRUTIL_LIBS,[-lsqlite3]) + LDADD_dbd_sqlite3="-lsqlite3" fi + AC_SUBST(LDADD_dbd_sqlite3) ]) dnl AC_DEFUN([APU_CHECK_DBD_SQLITE2], [ @@ -266,9 +262,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_sqlite2" = "1"; then - APR_ADDTO(APRUTIL_EXPORT_LIBS,[-lsqlite]) - APR_ADDTO(APRUTIL_LIBS,[-lsqlite]) + LDADD_dbd_sqlite2="-lsqlite" fi + AC_SUBST(LDADD_dbd_sqlite2) ]) dnl AC_DEFUN([APU_CHECK_DBD_ORACLE], [ @@ -294,8 +290,7 @@ unset ac_cv_lib_clntsh_OCIEnvCreate AC_CHECK_LIB(clntsh, OCIEnvCreate, [ apu_have_oracle=1 - APR_ADDTO(APRUTIL_EXPORT_LIBS,[-lnnz10]) - APR_ADDTO(APRUTIL_LIBS,[-lnnz10]) + LDADD_dbd_oracle="-lnnz10" ],,[-lnnz10]) ])) @@ -322,8 +317,7 @@ unset ac_cv_lib_clntsh_OCIEnvCreate AC_CHECK_LIB(clntsh, OCIEnvCreate, [ apu_have_oracle=1 - APR_ADDTO(APRUTIL_EXPORT_LIBS,[-lnnz10]) - APR_ADDTO(APRUTIL_LIBS,[-lnnz10]) + LDADD_dbd_oracle="-lnnz10" ],,[-lnnz10]) ])) if test "$apu_have_oracle" != "0"; then @@ -354,8 +348,7 @@ unset ac_cv_lib_clntsh_OCIEnvCreate AC_CHECK_LIB(clntsh, OCIEnvCreate, [ apu_have_oracle=1 - APR_ADDTO(APRUTIL_EXPORT_LIBS,[-lnnz10]) - APR_ADDTO(APRUTIL_LIBS,[-lnnz10]) + LDADD_dbd_oracle=-lnnz10 ],,[-lnnz10]) ])) @@ -367,8 +360,40 @@ 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_oracle" = "1"; then - APR_ADDTO(APRUTIL_EXPORT_LIBS,[-lclntsh]) - APR_ADDTO(APRUTIL_LIBS,[-lclntsh]) + LDADD_dbd_oracle="$LDADD_dbd_oracle -lclntsh" fi + AC_SUBST(LDADD_dbd_oracle) ]) -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]) + apu_dbd_dso=1 + + dsos= + test $apu_have_oracle = 1 && dsos="$dsos dbd/apr_dbd_oracle.la" + 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_oracle = 1 && objs="$objs dbd/apr_dbd_oracle.lo" + 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_oracle) $(LDADD_dbd_mysql)'" + APRUTIL_EXPORT_LIBS="$APRUTIL_EXPORT_LIBS '$(LDADD_dbd_pgsql) $(LDADD_dbd_sqlite2) $(LDADD_dbd_sqlite3) $(LDADD_dbd_oracle) $(LDADD_dbd_mysql)'" + fi +]) --=-qr5OVnHfyNdeM5ovep3O--