From cdd4c182c04f5f2e448b4c59883f8321fb9fcadc Mon Sep 17 00:00:00 2001 From: bfernhomberg Date: Mon, 17 May 2004 02:24:32 +0000 Subject: [PATCH] rework BDB detection. Search more subdirs and try to link to a versioned lib, e.g. lidb-4.2.so. --- macros/db3-check.m4 | 312 ++++++++++++++++++++++++++++---------------- 1 file changed, 197 insertions(+), 115 deletions(-) diff --git a/macros/db3-check.m4 b/macros/db3-check.m4 index 227fe038..9bcb6025 100644 --- a/macros/db3-check.m4 +++ b/macros/db3-check.m4 @@ -1,15 +1,159 @@ -dnl $Id: db3-check.m4,v 1.11.6.6 2004-04-21 00:56:58 bfernhomberg Exp $ -dnl Autoconf macro to check for the Berkeley DB library +dnl $Id: db3-check.m4,v 1.11.6.7 2004-05-17 02:24:32 bfernhomberg Exp $ +dnl Autoconf macros to check for the Berkeley DB library + + +AC_DEFUN([NETATALK_BDB_LINK_TRY], +[if test $atalk_cv_lib_db = no ; then + AC_CACHE_CHECK([for Berkeley DB link (]ifelse($2,,default,$2)[)],[$1], +[ + atalk_DB_LIB=ifelse($2,,-ldb,$2) + atalk_LIBS=$LIBS + LIBS="$atalk_DB_LIB $LIBS" + + AC_TRY_LINK([ +#include +],[ +int main(void) { + char *version; + int major, minor, patch; + + version = db_version( &major, &minor, &patch ); + return (0); +} +],[$1=yes],[$1=no]) + + LIBS="$atalk_LIBS" +]) + + if test $$1 = yes ; then + atalk_cv_lib_db=ifelse($2,,-ldb,$2) + fi +fi +]) + + +AC_DEFUN([NETATALK_BDB_CHECK_VERSION], +[ + atalk_LIBS=$LIBS + LIBS="${atalk_cv_lib_db} $LIBS" + + AC_MSG_CHECKING([Berkeley DB library version >= ${DB_MAJOR_REQ}.${DB_MINOR_REQ}.${DB_PATCH_REQ}]) + AC_TRY_RUN([ +#if STDC_HEADERS +#include +#endif +#include +#include + +int main(void) { + int major, minor, patch; + char *version_str; + + version_str = db_version(&major, &minor, &patch); + + /* check library version */ + if (major < DB_MAJOR_REQ || minor < DB_MINOR_REQ || patch < DB_PATCH_REQ) { + printf("library version too old (%d.%d.%d), ",major, minor, patch); + return (2); + } + + /* check header and library match */ + if ( major != DB_VERSION_MAJOR || minor != DB_VERSION_MINOR || patch != DB_VERSION_PATCH) { + printf("header/library version mismatch (%d.%d.%d/%d.%d.%d), ", + DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH, major, minor, patch); + return (3); + } + + printf("%d.%d.%d, ",major, minor, patch); + return (0); +} +], atalk_cv_bdb_version="yes", atalk_cv_bdb_version="no", atalk_cv_bdb_version="cross") + + + if test ${atalk_cv_bdb_version} = "yes"; then + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) + fi + LIBS="$atalk_LIBS" +]) + + +AC_DEFUN([NETATALK_BDB_HEADER], +[ + savedcflags="$CFLAGS" + CPPFLAGS="$CFLAGS -I$1" + dnl check for header version + AC_MSG_CHECKING(ifelse($1,,default,$1)[/db.h version >= ${DB_MAJOR_REQ}.${DB_MINOR_REQ}.${DB_PATCH_REQ}]) + AC_TRY_RUN([ +#if STDC_HEADERS +#include +#endif +#include +#include + +int main(void) { + + /* check header version */ + if (DB_VERSION_MAJOR < DB_MAJOR_REQ || DB_VERSION_MINOR < DB_MINOR_REQ || + DB_VERSION_PATCH < DB_PATCH_REQ ) { + printf("header file version too old (%d.%d.%d), ", DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH); + return (1); + } + + printf("%d.%d.%d, ", DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH); + return (0); +} +], atalk_cv_bdbheader="yes", atalk_cv_bdbheader="no", atalk_cv_bdbheader="cross") + + if test ${atalk_cv_bdbheader} = "no"; then + bdbfound=no + AC_MSG_RESULT([no]) + else + AC_MSG_RESULT([yes]) + fi + CPPFLAGS="$savedcflags" +]) + + +AC_DEFUN([NETATALK_BERKELEY_LINK], +[ +atalk_cv_lib_db=no +NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_dot_2,[-ldb-4.2]) +NETATALK_BDB_LINK_TRY(atalk_cv_db_db42,[-ldb42]) +NETATALK_BDB_LINK_TRY(atalk_cv_db_db_42,[-ldb-42]) +NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_2,[-ldb-4-2]) +NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_dot_1,[-ldb-4.1]) +NETATALK_BDB_LINK_TRY(atalk_cv_db_db41,[-ldb41]) +NETATALK_BDB_LINK_TRY(atalk_cv_db_db_41,[-ldb-41]) +NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_1,[-ldb-4-1]) +NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4,[-ldb-4]) +NETATALK_BDB_LINK_TRY(atalk_cv_db_db4,[-ldb4]) +NETATALK_BDB_LINK_TRY(atalk_cv_db_db,[-ldb]) +]) + AC_DEFUN([AC_PATH_BDB], [ trybdbdir="" dobdbsearch=yes - bdb_search_dirs="/usr/local/include/db4 /usr/local/include /usr/include/db4 /usr/include" + bdb_search_dirs="/usr/local/include /usr/include" + search_subdirs="/db4.2 /db4.1 /db4 /" + +dnl required BDB version + DB_MAJOR_REQ=4 + DB_MINOR_REQ=1 + DB_PATCH_REQ=0 dnl make sure atalk_libname is defined beforehand [[ -n "$atalk_libname" ]] || AC_MSG_ERROR([internal error, atalk_libname undefined]) +dnl define the required BDB version + AC_DEFINE_UNQUOTED(DB_MAJOR_REQ, ${DB_MAJOR_REQ}, [Required BDB version, major]) + AC_DEFINE_UNQUOTED(DB_MINOR_REQ, ${DB_MINOR_REQ}, [Required BDB version, minor]) + AC_DEFINE_UNQUOTED(DB_PATCH_REQ, ${DB_PATCH_REQ}, [Required BDB version, patch]) + + AC_ARG_WITH(bdb, [ --with-bdb=PATH specify path to Berkeley DB installation[[auto]]], if test "x$withval" = "xno"; then @@ -17,138 +161,76 @@ dnl make sure atalk_libname is defined beforehand elif test "x$withval" = "xyes"; then dobdbsearch=yes else - bdb_search_dirs="$withval/include/db4 $withval/include $withval" + bdb_search_dirs="$withval/include $withval" fi ) + bdbfound=no + savedcflags="$CFLAGS" + savedldflags="$LDFLAGS" + savedcppflags="$CPPFLAGS" + savedlibs="$LIBS" + if test "x$dobdbsearch" = "xyes"; then for bdbdir in $bdb_search_dirs; do - AC_MSG_CHECKING([for Berkeley DB headers in $bdbdir]) - if test -f "$bdbdir/db.h" ; then + if test $bdbfound = "yes"; then + break; + fi + for subdir in ${search_subdirs}; do + AC_MSG_CHECKING([for Berkeley DB headers in ${bdbdir}${subdir}]) + if test -f "${bdbdir}${subdir}/db.h" ; then AC_MSG_RESULT([yes]) - bdblibdir="`echo $bdbdir | sed 's/\/include\/db4$//'`" - bdblibdir="`echo $bdblibdir | sed 's/\/include$//'`" - bdblibdir="${bdblibdir}/${atalk_libname}" - bdbbindir="`echo $bdbdir | sed 's/include\/db4$/bin/'`" - bdbbindir="`echo $bdbbindir | sed 's/include$/bin/'`" - - savedcflags="$CFLAGS" - savedldflags="$LDFLAGS" - savedcppflags="$CPPFLAGS" - savedlibs="$LIBS" - CPPFLAGS="$CFLAGS -I$bdbdir" - CFLAGS="" - LDFLAGS="-L$bdblibdir $LDFLAGS" - -dnl This check breaks if bdb was configured with --with-uniquename, removed for now -dnl dnl db_create is BDB >3 specific -dnl AC_CHECK_LIB(db, db_create, [ -dnl bdbfound=yes -dnl LIBS="$LIBS -ldb" -dnl BDB_LIBS="-ldb"], [ -dnl AC_CHECK_LIB(db4, db_create, [ -dnl bdbfound=yes -dnl LIBS="$LIBS -ldb4" -dnl BDB_LIBS="-ldb4"]) -dnl ]) + NETATALK_BDB_HEADER([${bdbdir}${subdir}]) + if test ${atalk_cv_bdbheader} != "no"; then - bdbfound=yes - LIBS="$LIBS -ldb" - BDB_LIBS="-ldb" - - dnl check for header ... should only fail if the header cannot be compiled - dnl it does exist, otherwise we wouldn't be here - - if test "x$bdbfound" = "xyes"; then - AC_CHECK_HEADERS(db.h, bdbfound=yes, bdbfound=no) - fi - - if test "x$bdbfound" = "xno"; then - AC_MSG_WARN([Berkeley DB libraries found, but required header files cannot be used!!!]) - fi - - dnl check we have the correct bdb version - AC_MSG_CHECKING([Berkeley DB version >= 4.1]) - AC_TRY_RUN([ -#if STDC_HEADERS -#include -#endif -#include -#include - -#define DB_MAJOR_REQ 4 -#define DB_MINOR_REQ 1 -#define DB_PATCH_REQ 0 - - -int main(void) { - int major, minor, patch; - char *version_str; - - version_str = db_version(&major, &minor, &patch); - - /* check header version */ - if (DB_VERSION_MAJOR < DB_MAJOR_REQ || DB_VERSION_MINOR < DB_MINOR_REQ || - DB_VERSION_PATCH < DB_PATCH_REQ ) { - printf("header file version too old (%d.%d.%d), ", DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH); - exit (1); - } - - /* check library version */ - if (major < DB_MAJOR_REQ || minor < DB_MINOR_REQ || patch < DB_PATCH_REQ) { - printf("library version too old (%d.%d.%d), ",major, minor, patch); - exit (2); - } - - /* check header and library match */ - if ( major != DB_VERSION_MAJOR || minor != DB_VERSION_MINOR || patch != DB_VERSION_PATCH) { - printf("header/library version mismatch (%d.%d.%d/%d.%d.%d), ", - DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH, major, minor, patch); - exit(3); - } - - printf("%d.%d.%d, ",major, minor, patch); - exit (0); -} -], atalk_cv_bdbversion="yes", atalk_cv_bdbversion="no", atalk_cv_bdbversion="cross") - - - if test ${atalk_cv_bdbversion} = "yes"; then - AC_MSG_RESULT(yes) - else - AC_MSG_RESULT(no) - bdbfound=no - fi - - if test "x$bdbfound" = "xyes"; then - if test "$bdbdir" != "/usr/include"; then - BDB_CFLAGS="-I$bdbdir" + bdblibdir="`echo $bdbdir | sed 's/\/include\/db4\.*.*//'`" + bdblibdir="`echo $bdblibdir | sed 's/\/include$//'`" + bdblibdir="${bdblibdir}/${atalk_libname}" + bdbbindir="`echo $bdbdir | sed 's/include\/db4\.*.*/bin/'`" + bdbbindir="`echo $bdbbindir | sed 's/include$/bin/'`" + + CPPFLAGS="$CFLAGS -I${bdbdir}${subdir}" + CFLAGS="" + LDFLAGS="-L$bdblibdir $LDFLAGS" + NETATALK_BERKELEY_LINK + if test x"${atalk_cv_lib_db}" != x"no"; then + NETATALK_BDB_CHECK_VERSION + if test x"${atalk_cv_bdb_version}" != x"no"; then + BDB_LIBS="-L${bdblibdir} ${atalk_cv_lib_db}" + BDB_CFLAGS="-I${bdbdir}${subdir}" + BDB_BIN=$bdbbindir + BDB_PATH="`echo $bdbdir | sed 's,include\/db4$,,'`" + BDB_PATH="`echo $BDB_PATH | sed 's,include$,,'`" + bdbfound=yes + break; fi - if test "$bdblibdir" != "/usr/lib"; then - BDB_LIBS="-L$bdblibdir $BDB_LIBS" - fi - BDB_BIN=$bdbbindir - BDB_PATH="`echo $bdbdir | sed 's,include\/db4$,,'`" - BDB_PATH="`echo $BDB_PATH | sed 's,include$,,'`" + fi + CFLAGS="$savedcflags" + LDFLAGS="$savedldflags" + CPPFLAGS="$savedcppflags" + LIBS="$savedlibs" fi - CFLAGS="$savedcflags" - LDFLAGS="$savedldflags" - CPPFLAGS="$savedcppflags" - LIBS="$savedlibs" - break; - else + else AC_MSG_RESULT([no]) - fi + fi + done done fi + CFLAGS="$savedcflags" + LDFLAGS="$savedldflags" + CPPFLAGS="$savedcppflags" + LIBS="$savedlibs" + if test "x$bdbfound" = "xyes"; then ifelse([$1], , :, [$1]) else ifelse([$2], , :, [$2]) fi + CFLAGS_REMOVE_USR_INCLUDE(BDB_CFLAGS) + LIB_REMOVE_USR_LIB(BDB_LIBS) AC_SUBST(BDB_CFLAGS) AC_SUBST(BDB_LIBS) AC_SUBST(BDB_BIN) -- 2.39.2