X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=macros%2Fdb3-check.m4;h=73c10b37a4287558b12ffd79b0cbac784459594e;hb=806404163be136564f52a2d0d4b77d926769d9fe;hp=2d7bc9245d133f29821a845fda9cc646fcf42420;hpb=d8091c9462b56feba2ebc8f15e9f1f3f1f0f35ab;p=netatalk.git diff --git a/macros/db3-check.m4 b/macros/db3-check.m4 index 2d7bc924..73c10b37 100644 --- a/macros/db3-check.m4 +++ b/macros/db3-check.m4 @@ -1,42 +1,176 @@ -dnl $Id: db3-check.m4,v 1.5 2001-11-16 20:11:00 jnewman Exp $ -dnl Autoconf macro to check for the Berkeley DB3 library - -AC_DEFUN([AC_PATH_DB3], [ - trydb3dir="" - AC_ARG_WITH(db3, - [ --with-db3=PATH specify path to Berkeley DB3 installation], - if test "x$withval" != "xno"; then - trydb3dir="$withval" - fi - ) - - db3found=no - for db3dir in "" "$trydb3dir" "$trydb3dir/include" "$trydb3dir/include/db3" "/usr/local/BerkeleyDB.3.3/include" "/usr/local/include/db3" "/usr/local/include" "/usr/include/db3" "/usr/include" ; do - if test -f "$db3dir/db.h" ; then - db3libdir="`echo $db3dir | sed 's/include\/db3$/lib/'`" - db3libdir="`echo $db3libdir | sed 's/include$/lib/'`" - - savedcflags="$CFLAGS" - savedldflags="$LDFLAGS" - CFLAGS="$CFLAGS -I$db3dir" - LDFLAGS="-L$db3libdir LDFLAGS" - AC_CHECK_LIB(db, main, [ - db3found=yes - DB3_CFLAGS="-I$db3dir" - DB3_LIBS="-L$db3libdir -ldb" - ]) - CFLAGS="$savedcflags" - LDFLAGS="$savedldflags" - break; - fi - done - - if test "x$db3found" = "xyes"; then - ifelse([$1], , :, [$1]) - else - ifelse([$2], , :, [$2]) - fi - - AC_SUBST(DB3_CFLAGS) - AC_SUBST(DB3_LIBS) +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 +dnl -- $atalk_cv_bdb_MAJOR and $atalk_cv_bdb_MINOR +AC_DEFUN([NETATALK_BDB_HEADER],[ + dnl check for header version + AC_MSG_CHECKING([$1/db.h version >= ${DB_MAJOR_REQ}.${DB_MINOR_REQ}.${DB_PATCH_REQ}]) + + 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 + AC_MSG_RESULT([no]) + atalk_cv_bdbheader=no + elif test $DB_MINOR_REQ -gt $atalk_cv_bdb_MINOR ; then + AC_MSG_RESULT([no]) + atalk_cv_bdbheader=no + else + AC_MSG_RESULT([yes]) + atalk_cv_bdbheader=yes + fi +]) + +dnl -- Try to link and run with lib with version taken from +dnl -- $atalk_cv_bdb_MAJOR and $atalk_cv_bdb_MINOR +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" + + for lib in $atalk_cv_bdb_try_libs ; do + LIBS="$lib $savedlibs" + AC_MSG_CHECKING([Berkeley DB library ($lib)]) + AC_TRY_RUN([ + #include + #include + int main(void) { + 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) { + printf("linking wrong library version (%d.%d.%d), ",major, minor, patch); + return (2); + } + 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); + } + ],[ + + AC_MSG_RESULT(yes) + atalk_cv_bdb_version="yes" + atalk_cv_lib_db="$lib" + break + ],[ + AC_MSG_RESULT(no) + ]) + done + LIBS="$savedlibs" ]) + +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) +]) + +