]> arthur.barton.de Git - netatalk.git/blobdiff - macros/db3-check.m4
Writing metadata xattr on directories with sticky bit set, FR#94
[netatalk.git] / macros / db3-check.m4
index 73c10b37a4287558b12ffd79b0cbac784459594e..4135e5ce2801915853e598ef0f8596726b4bcc42 100644 (file)
@@ -1,4 +1,3 @@
-dnl $Id: db3-check.m4,v 1.17 2009-03-25 15:53:03 franklahm Exp $
 dnl Autoconf macros to check for the Berkeley DB library
 
 dnl -- check header for minimum version and return version in
@@ -10,7 +9,10 @@ AC_DEFUN([NETATALK_BDB_HEADER],[
     atalk_cv_bdb_MAJOR=`grep DB_VERSION_MAJOR "$1/db.h" | cut -f 3`
     atalk_cv_bdb_MINOR=`grep DB_VERSION_MINOR "$1/db.h" | cut -f 3`
 
-    if test $DB_MAJOR_REQ -gt $atalk_cv_bdb_MAJOR ; then
+    if test $atalk_cv_bdb_MAJOR -gt $DB_MAJOR_REQ ; then
+        AC_MSG_RESULT([yes])
+        atalk_cv_bdbheader=yes
+    elif test $DB_MAJOR_REQ -gt $atalk_cv_bdb_MAJOR ; then
         AC_MSG_RESULT([no])
         atalk_cv_bdbheader=no
     elif test $DB_MINOR_REQ -gt $atalk_cv_bdb_MINOR ; then
@@ -28,11 +30,11 @@ AC_DEFUN([NETATALK_BDB_TRY_LINK],[
     atalk_cv_bdb_version=no
     maj=$atalk_cv_bdb_MAJOR
     min=$atalk_cv_bdb_MINOR
-    atalk_cv_bdb_try_libs="-ldb$maj$min -ldb$maj.$min -ldb-$maj$min -ldb-$maj.$min"
+    atalk_cv_bdb_try_libs="db$maj$min db$maj.$min db-$maj$min db-$maj.$min db$maj-$maj.$min db"
 
     for lib in $atalk_cv_bdb_try_libs ; do
-        LIBS="$lib $savedlibs"
-        AC_MSG_CHECKING([Berkeley DB library ($lib)])
+        LIBS="-l$lib $savedlibs"
+        AC_MSG_CHECKING([Berkeley DB library (-l$lib)])
         AC_TRY_RUN([
             #include <stdio.h>
             #include <db.h>
@@ -40,7 +42,7 @@ AC_DEFUN([NETATALK_BDB_TRY_LINK],[
                 int major, minor, patch;
                 char *version_str;
                 version_str = db_version(&major, &minor, &patch);
-                if (major < DB_MAJOR_REQ || minor < DB_MINOR_REQ || patch < DB_PATCH_REQ) {
+                if ((major*100 + minor*10 + patch) < (DB_MAJOR_REQ*100 + DB_MINOR_REQ*10 + DB_PATCH_REQ)) {
                     printf("linking wrong library version (%d.%d.%d), ",major, minor, patch);
                     return (2);
                 }
@@ -53,32 +55,55 @@ AC_DEFUN([NETATALK_BDB_TRY_LINK],[
                 return (0);
             }
         ],[
-
             AC_MSG_RESULT(yes)
             atalk_cv_bdb_version="yes"
-            atalk_cv_lib_db="$lib"
+            atalk_cv_lib_db="-l$lib"
             break
         ],[
             AC_MSG_RESULT(no)
+        ],[
+            bdblibs=`ls $bdblibdir/lib$lib.* 2>/dev/null`
+            for bdblib in $bdblibs ; do
+                echo "Testing for lib file $bdblib" >&AS_MESSAGE_LOG_FD
+                if test -f "$bdblib" ; then
+                    AC_MSG_RESULT([yes (cross-compiling)])
+                    atalk_cv_bdb_version="yes"
+                    atalk_cv_lib_db="-l$lib"
+                    break
+                fi
+            done
+            if test "x$atalk_cv_bdb_version" = "xyes" ; then
+                break
+            fi
+            AC_MSG_RESULT([no (cross-compiling)])
         ])
     done
     LIBS="$savedlibs"
 ])
 
 dnl -- This is called from configure
-AC_DEFUN([AC_PATH_BDB],[
+AC_DEFUN([AC_NETATALK_PATH_BDB],[
+if test "x$bdb_required" = "xyes"; then
     trybdbdir=""
     dobdbsearch=yes
     bdb_search_dirs="/usr/local /usr"
-    search_subdirs="/ /db4.7 /db47 /db4.6 /db46 /db4.5 /db45 /db4.4 /db44 /db4.3 /db43 /db4.2 /db42 /db4.1 /db41 /db4"
+    search_subdirs="/ /db5 /db5.1 /db51 /db5.0 /db50 /db4.8 /db48 /db4.7 /db47 /db4.6 /db46 /db4"
 
-    dnl required BDB version
+    bdbfound=no
+    savedcflags="$CFLAGS"
+    savedldflags="$LDFLAGS"
+    savedcppflags="$CPPFLAGS"
+    savedlibs="$LIBS"
+    saved_shlibpath_var=$shlibpath_var
+
+    dnl required BDB version: 4.6, because of cursor API change
     DB_MAJOR_REQ=4
-    DB_MINOR_REQ=1
+    DB_MINOR_REQ=6
     DB_PATCH_REQ=0
 
     dnl make sure atalk_libname is defined beforehand
     [[ -n "$atalk_libname" ]] || AC_MSG_ERROR([internal error, atalk_libname undefined])
+    saved_atalk_libname=$atalk_libname
 
     dnl define the required BDB version
     AC_DEFINE_UNQUOTED(DB_MAJOR_REQ, ${DB_MAJOR_REQ}, [Required BDB version, major])
@@ -96,13 +121,6 @@ AC_DEFUN([AC_PATH_BDB],[
         fi
     )
 
-    bdbfound=no
-    savedcflags="$CFLAGS"
-    savedldflags="$LDFLAGS"
-    savedcppflags="$CPPFLAGS"
-    savedlibs="$LIBS"
-    saved_shlibpath_var=$shlibpath_var
-
     if test "x$dobdbsearch" = "xyes"; then
         for bdbdir in $bdb_search_dirs; do
             if test $bdbfound = "yes"; then
@@ -137,11 +155,41 @@ AC_DEFUN([AC_PATH_BDB],[
                         if test x"${atalk_cv_bdb_version}" = x"yes"; then
                             BDB_CFLAGS="-I${bdbdir}/include${subdir}"
                             BDB_LIBS="-L${bdblibdir} ${atalk_cv_lib_db}"
+                            if test x"$need_dash_r" = x"yes"; then
+                                BDB_LIBS="$BDB_LIBS -R${bdblibdir}"
+                            fi
                             BDB_BIN="$bdbbindir"
                             BDB_PATH="$bdbdir"
                             bdbfound=yes
                             break;
                         fi
+
+                        dnl -- Search lib in "lib" too, as $atalk_libname might be set
+                        dnl -- to "lib64" or "lib/64" which would not be found above
+                        dnl -- if 64bit lib were installed in a dir named "lib"
+                        if test x"$atalk_libname" != x"lib" ; then
+                           bdblibdir="${bdbdir}/lib"
+                           bdbbindir="${bdbdir}/bin"
+
+                           CPPFLAGS="-I${bdbdir}/include${subdir} $CPPFLAGS"
+                           LDFLAGS="-L$bdblibdir $LDFLAGS"
+
+                           eval export $shlibpath_var=$bdblibdir
+                           NETATALK_BDB_TRY_LINK
+                           eval export $shlibpath_var=$saved_shlibpath_var
+
+                           if test x"${atalk_cv_bdb_version}" = x"yes"; then
+                              BDB_CFLAGS="-I${bdbdir}/include${subdir}"
+                              BDB_LIBS="-L${bdblibdir} ${atalk_cv_lib_db}"
+                              if test x"$need_dash_r" = x"yes"; then
+                                 BDB_LIBS="$BDB_LIBS -R${bdblibdir}"
+                              fi
+                              BDB_BIN="$bdbbindir"
+                              BDB_PATH="$bdbdir"
+                              bdbfound=yes
+                              break;
+                           fi
+                        fi
                     fi
                     CFLAGS="$savedcflags"
                     LDFLAGS="$savedldflags"
@@ -158,11 +206,13 @@ AC_DEFUN([AC_PATH_BDB],[
     LDFLAGS="$savedldflags"
     CPPFLAGS="$savedcppflags"
     LIBS="$savedlibs"
+    atalk_libname=$saved_atalk_libname
 
     if test "x$bdbfound" = "xyes"; then
         ifelse([$1], , :, [$1])
     else
         ifelse([$2], , :, [$2])     
+               AC_MSG_ERROR([Berkeley DB library required but not found!])
     fi
 
     CFLAGS_REMOVE_USR_INCLUDE(BDB_CFLAGS)
@@ -171,6 +221,7 @@ AC_DEFUN([AC_PATH_BDB],[
     AC_SUBST(BDB_LIBS)
     AC_SUBST(BDB_BIN)
     AC_SUBST(BDB_PATH)
+fi
 ])