+
+dnl -- This is called from configure
+AC_DEFUN([AC_PATH_BDB],[
+ 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"
+
+ 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
+ dobdbsearch=no
+ elif test "x$withval" = "xyes"; then
+ dobdbsearch=yes
+ else
+ bdb_search_dirs="$withval"
+ 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
+ break;
+ fi
+ for subdir in ${search_subdirs}; do
+ AC_MSG_CHECKING([for Berkeley DB headers in ${bdbdir}/include${subdir}])
+ dnl -- First check the mere existence of the header
+ if test -f "${bdbdir}/include${subdir}/db.h" ; then
+ AC_MSG_RESULT([yes])
+
+ dnl -- Check if it meets minimun requirement, also return the version
+ NETATALK_BDB_HEADER([${bdbdir}/include${subdir}])
+
+ if test ${atalk_cv_bdbheader} != "no"; then
+ bdblibdir="${bdbdir}/${atalk_libname}"
+ bdbbindir="${bdbdir}/bin"
+
+ CPPFLAGS="-I${bdbdir}/include${subdir} $CPPFLAGS"
+ LDFLAGS="-L$bdblibdir $LDFLAGS"
+
+ dnl -- Uses version set by NETATALK_BDB_HEADER to try to run
+ dnl -- a conftest that checks that header/lib version match
+ dnl -- $shlibpath_var is set by LIBTOOL, its value is
+ dnl -- LD_LIBRARY_PATH on many platforms. This will be fairly
+ dnl -- portable hopefully. Reference:
+ dnl -- http://lists.gnu.org/archive/html/autoconf/2009-03/msg00040.html
+ 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}"
+ BDB_BIN="$bdbbindir"
+ BDB_PATH="$bdbdir"
+ bdbfound=yes
+ break;
+ fi
+ fi
+ CFLAGS="$savedcflags"
+ LDFLAGS="$savedldflags"
+ CPPFLAGS="$savedcppflags"
+ LIBS="$savedlibs"
+ else
+ AC_MSG_RESULT([no])
+ 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)
+ AC_SUBST(BDB_PATH)
+])
+
+