]> arthur.barton.de Git - netatalk.git/commitdiff
rework BDB detection. Search more subdirs and try to link to a versioned lib, e.g...
authorbfernhomberg <bfernhomberg>
Mon, 17 May 2004 02:24:32 +0000 (02:24 +0000)
committerbfernhomberg <bfernhomberg>
Mon, 17 May 2004 02:24:32 +0000 (02:24 +0000)
macros/db3-check.m4

index 227fe038e263e38d164c2d034e17ade2e8e34582..9bcb60255bcb6dc567c09314083bebcd245097bf 100644 (file)
-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 <db.h>
+],[
+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 <stdlib.h>
+#endif
+#include <stdio.h>
+#include <db.h>
+
+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 <stdlib.h>
+#endif
+#include <stdio.h>
+#include <db.h>
+
+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 <stdlib.h>
-#endif
-#include <stdio.h>
-#include <db.h>
-
-#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)