X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=netatalk.git;a=blobdiff_plain;f=macros%2Fdb3-check.m4;h=4135e5ce2801915853e598ef0f8596726b4bcc42;hp=b4c5a3b4a03671c7131a38889eba34721a62d3f1;hb=3a84db87064922ad10ac10cc1d6833380e575995;hpb=ecfc96169ab669b578e53fa8e13592934fe37788 diff --git a/macros/db3-check.m4 b/macros/db3-check.m4 index b4c5a3b4..4135e5ce 100644 --- a/macros/db3-check.m4 +++ b/macros/db3-check.m4 @@ -1,242 +1,227 @@ -dnl $Id: db3-check.m4,v 1.13 2005-04-28 20:50:05 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_MSG_CHECKING([for Berkeley DB link (]ifelse($2,,default,$2)[)]) - atalk_DB_LIB=ifelse($2,,-ldb,$2) - atalk_LIBS=$LIBS - LIBS="$atalk_DB_LIB $LIBS" - - AC_TRY_LINK([ -#include -],[ - char *version; - int major, minor, patch; - - version = db_version( &major, &minor, &patch ); - return (0); -],[$1=yes],[$1=no]) - - AC_MSG_RESULT([$$1]) - LIBS="$atalk_LIBS" - if test $$1 = yes ; then - atalk_cv_lib_db=ifelse($2,,-ldb,$2) - fi -fi +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 $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 + AC_MSG_RESULT([no]) + atalk_cv_bdbheader=no + else + AC_MSG_RESULT([yes]) + atalk_cv_bdbheader=yes + 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" +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="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="-l$lib $savedlibs" + AC_MSG_CHECKING([Berkeley DB library (-l$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*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); + } + 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="-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" ]) - -AC_DEFUN([NETATALK_BDB_HEADER], -[ - savedcflags="$CFLAGS" - CFLAGS="-I$1 $CFLAGS" - 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]) +dnl -- This is called from configure +AC_DEFUN([AC_NETATALK_PATH_BDB],[ +if test "x$bdb_required" = "xyes"; then + trybdbdir="" + dobdbsearch=yes + bdb_search_dirs="/usr/local /usr" + search_subdirs="/ /db5 /db5.1 /db51 /db5.0 /db50 /db4.8 /db48 /db4.7 /db47 /db4.6 /db46 /db4" + + 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=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]) + 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 - AC_MSG_RESULT([yes]) + bdb_search_dirs="$withval" fi - CFLAGS="$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_2,[-ldb-4.3]) -NETATALK_BDB_LINK_TRY(atalk_cv_db_db42,[-ldb43]) -NETATALK_BDB_LINK_TRY(atalk_cv_db_db_42,[-ldb-43]) -NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_2,[-ldb-4-3]) -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 /usr/include" - search_subdirs="/db4.2 /db42 /db4.3 /db43 /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/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 - 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]) - NETATALK_BDB_HEADER([${bdbdir}${subdir}]) - if test ${atalk_cv_bdbheader} != "no"; then - -dnl bdblibdir="`echo $bdbdir | sed 's/\/include\/db4\.*.*//'`" - bdblibdir="`echo $bdbdir | sed 's/\/include\/db4.*//'`" - bdblibdir="`echo $bdblibdir | sed 's/\/include$//'`" - bdblibdir="${bdblibdir}/${atalk_libname}" -dnl bdbbindir="`echo $bdbdir | sed 's/include\/db4\.*.*/bin/'`" - bdbbindir="`echo $bdbdir | sed 's/\/include\/db4.*/bin/'`" - bdbbindir="`echo $bdbbindir | sed 's/include$/bin/'`" - - CPPFLAGS="-I${bdbdir}${subdir} $CFLAGS" - 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 - fi - CFLAGS="$savedcflags" - LDFLAGS="$savedldflags" - CPPFLAGS="$savedcppflags" - LIBS="$savedlibs" - fi - 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) + ) + + 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}" + 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" + CPPFLAGS="$savedcppflags" + LIBS="$savedlibs" + else + AC_MSG_RESULT([no]) + fi + done + done + fi + + CFLAGS="$savedcflags" + 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) + LIB_REMOVE_USR_LIB(BDB_LIBS) + AC_SUBST(BDB_CFLAGS) + AC_SUBST(BDB_LIBS) + AC_SUBST(BDB_BIN) + AC_SUBST(BDB_PATH) +fi ])