1 dnl $Id: db3-check.m4,v 1.11.6.9.2.5 2009-03-25 18:09:58 franklahm Exp $
2 dnl Autoconf macros to check for the Berkeley DB library
4 dnl -- check header for minimum version and return version in
5 dnl -- $atalk_cv_bdb_MAJOR and $atalk_cv_bdb_MINOR
6 AC_DEFUN([NETATALK_BDB_HEADER],[
7 dnl check for header version
8 AC_MSG_CHECKING([$1/db.h version >= ${DB_MAJOR_REQ}.${DB_MINOR_REQ}.${DB_PATCH_REQ}])
10 atalk_cv_bdb_MAJOR=`grep DB_VERSION_MAJOR "$1/db.h" | cut -f 3`
11 atalk_cv_bdb_MINOR=`grep DB_VERSION_MINOR "$1/db.h" | cut -f 3`
13 if test $DB_MAJOR_REQ -gt $atalk_cv_bdb_MAJOR ; then
16 elif test $DB_MINOR_REQ -gt $atalk_cv_bdb_MINOR ; then
21 atalk_cv_bdbheader=yes
25 dnl -- Try to link and run with lib with version taken from
26 dnl -- $atalk_cv_bdb_MAJOR and $atalk_cv_bdb_MINOR
27 AC_DEFUN([NETATALK_BDB_TRY_LINK],[
28 atalk_cv_bdb_version=no
29 maj=$atalk_cv_bdb_MAJOR
30 min=$atalk_cv_bdb_MINOR
31 atalk_cv_bdb_try_libs="-ldb$maj$min -ldb$maj.$min -ldb-$maj$min -ldb-$maj.$min"
33 for lib in $atalk_cv_bdb_try_libs ; do
34 LIBS="$lib $savedlibs"
35 AC_MSG_CHECKING([Berkeley DB library ($lib)])
40 int major, minor, patch;
42 version_str = db_version(&major, &minor, &patch);
43 if (major < DB_MAJOR_REQ || minor < DB_MINOR_REQ || patch < DB_PATCH_REQ) {
44 printf("linking wrong library version (%d.%d.%d), ",major, minor, patch);
47 if ( major != DB_VERSION_MAJOR || minor != DB_VERSION_MINOR || patch != DB_VERSION_PATCH) {
48 printf("header/library version mismatch (%d.%d.%d/%d.%d.%d), ",
49 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH, major, minor, patch);
52 printf("%d.%d.%d ... ",major, minor, patch);
58 atalk_cv_bdb_version="yes"
59 atalk_cv_lib_db="$lib"
68 dnl -- This is called from configure
69 AC_DEFUN([AC_PATH_BDB],[
72 bdb_search_dirs="/usr/local /usr"
73 search_subdirs="/ /db4.7 /db47 /db4.6 /db46 /db4.5 /db45 /db4.4 /db44 /db4.3 /db43 /db4.2 /db42 /db4.1 /db41 /db4"
75 dnl required BDB version
80 dnl make sure atalk_libname is defined beforehand
81 [[ -n "$atalk_libname" ]] || AC_MSG_ERROR([internal error, atalk_libname undefined])
83 dnl define the required BDB version
84 AC_DEFINE_UNQUOTED(DB_MAJOR_REQ, ${DB_MAJOR_REQ}, [Required BDB version, major])
85 AC_DEFINE_UNQUOTED(DB_MINOR_REQ, ${DB_MINOR_REQ}, [Required BDB version, minor])
86 AC_DEFINE_UNQUOTED(DB_PATCH_REQ, ${DB_PATCH_REQ}, [Required BDB version, patch])
89 [ --with-bdb=PATH specify path to Berkeley DB installation[[auto]]],
90 if test "x$withval" = "xno"; then
92 elif test "x$withval" = "xyes"; then
95 bdb_search_dirs="$withval"
100 savedcflags="$CFLAGS"
101 savedldflags="$LDFLAGS"
102 savedcppflags="$CPPFLAGS"
104 saved_shlibpath_var=$shlibpath_var
106 if test "x$dobdbsearch" = "xyes"; then
107 for bdbdir in $bdb_search_dirs; do
108 if test $bdbfound = "yes"; then
111 for subdir in ${search_subdirs}; do
112 AC_MSG_CHECKING([for Berkeley DB headers in ${bdbdir}/include${subdir}])
113 dnl -- First check the mere existence of the header
114 if test -f "${bdbdir}/include${subdir}/db.h" ; then
117 dnl -- Check if it meets minimun requirement, also return the version
118 NETATALK_BDB_HEADER([${bdbdir}/include${subdir}])
120 if test ${atalk_cv_bdbheader} != "no"; then
121 bdblibdir="${bdbdir}/${atalk_libname}"
122 bdbbindir="${bdbdir}/bin"
124 CPPFLAGS="-I${bdbdir}/include${subdir} $CPPFLAGS"
125 LDFLAGS="-L$bdblibdir $LDFLAGS"
127 dnl -- Uses version set by NETATALK_BDB_HEADER to try to run
128 dnl -- a conftest that checks that header/lib version match
129 dnl -- $shlibpath_var is set by LIBTOOL, its value is
130 dnl -- LD_LIBRARY_PATH on many platforms. This will be fairly
131 dnl -- portable hopefully. Reference:
132 dnl -- http://lists.gnu.org/archive/html/autoconf/2009-03/msg00040.html
133 eval export $shlibpath_var=$bdblibdir
134 NETATALK_BDB_TRY_LINK
135 eval export $shlibpath_var=$saved_shlibpath_var
137 if test x"${atalk_cv_bdb_version}" = x"yes"; then
138 BDB_CFLAGS="-I${bdbdir}/include${subdir}"
139 BDB_LIBS="-L${bdblibdir} ${atalk_cv_lib_db}"
146 CFLAGS="$savedcflags"
147 LDFLAGS="$savedldflags"
148 CPPFLAGS="$savedcppflags"
157 CFLAGS="$savedcflags"
158 LDFLAGS="$savedldflags"
159 CPPFLAGS="$savedcppflags"
162 if test "x$bdbfound" = "xyes"; then
163 ifelse([$1], , :, [$1])
165 ifelse([$2], , :, [$2])
168 CFLAGS_REMOVE_USR_INCLUDE(BDB_CFLAGS)
169 LIB_REMOVE_USR_LIB(BDB_LIBS)