1 dnl Autoconf macros to check for the Berkeley DB library
3 dnl -- check header for minimum version and return version in
4 dnl -- $atalk_cv_bdb_MAJOR and $atalk_cv_bdb_MINOR
5 AC_DEFUN([NETATALK_BDB_HEADER],[
6 dnl check for header version
7 AC_MSG_CHECKING([$1/db.h version >= ${DB_MAJOR_REQ}.${DB_MINOR_REQ}.${DB_PATCH_REQ}])
9 atalk_cv_bdb_MAJOR=`grep DB_VERSION_MAJOR "$1/db.h" | cut -f 3`
10 atalk_cv_bdb_MINOR=`grep DB_VERSION_MINOR "$1/db.h" | cut -f 3`
12 if test $atalk_cv_bdb_MAJOR -gt $DB_MAJOR_REQ ; then
14 atalk_cv_bdbheader=yes
15 elif test $DB_MAJOR_REQ -gt $atalk_cv_bdb_MAJOR ; then
18 elif test $DB_MINOR_REQ -gt $atalk_cv_bdb_MINOR ; then
23 atalk_cv_bdbheader=yes
27 dnl -- Try to link and run with lib with version taken from
28 dnl -- $atalk_cv_bdb_MAJOR and $atalk_cv_bdb_MINOR
29 AC_DEFUN([NETATALK_BDB_TRY_LINK],[
30 atalk_cv_bdb_version=no
31 maj=$atalk_cv_bdb_MAJOR
32 min=$atalk_cv_bdb_MINOR
33 atalk_cv_bdb_try_libs="db$maj$min db$maj.$min db-$maj$min db-$maj.$min db$maj-$maj.$min db"
35 for lib in $atalk_cv_bdb_try_libs ; do
36 LIBS="-l$lib $savedlibs"
37 AC_MSG_CHECKING([Berkeley DB library (-l$lib)])
42 int major, minor, patch;
44 version_str = db_version(&major, &minor, &patch);
45 if ((major*100 + minor*10 + patch) < (DB_MAJOR_REQ*100 + DB_MINOR_REQ*10 + DB_PATCH_REQ)) {
46 printf("linking wrong library version (%d.%d.%d), ",major, minor, patch);
49 if ( major != DB_VERSION_MAJOR || minor != DB_VERSION_MINOR || patch != DB_VERSION_PATCH) {
50 printf("header/library version mismatch (%d.%d.%d/%d.%d.%d), ",
51 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH, major, minor, patch);
54 printf("%d.%d.%d ... ",major, minor, patch);
59 atalk_cv_bdb_version="yes"
60 atalk_cv_lib_db="-l$lib"
65 bdblibs=`ls $bdblibdir/lib$lib.* 2>/dev/null`
66 for bdblib in $bdblibs ; do
67 echo "Testing for lib file $bdblib" >&AS_MESSAGE_LOG_FD
68 if test -f "$bdblib" ; then
69 AC_MSG_RESULT([yes (cross-compiling)])
70 atalk_cv_bdb_version="yes"
71 atalk_cv_lib_db="-l$lib"
75 if test "x$atalk_cv_bdb_version" = "xyes" ; then
78 AC_MSG_RESULT([no (cross-compiling)])
84 dnl -- This is called from configure
85 AC_DEFUN([AC_NETATALK_PATH_BDB],[
86 if test "x$bdb_required" = "xyes"; then
89 bdb_search_dirs="/usr/local /usr"
90 search_subdirs="/ /db5 /db5.1 /db51 /db5.0 /db50 /db4.8 /db48 /db4.7 /db47 /db4.6 /db46 /db4"
94 savedldflags="$LDFLAGS"
95 savedcppflags="$CPPFLAGS"
97 saved_shlibpath_var=$shlibpath_var
99 dnl required BDB version: 4.6, because of cursor API change
104 dnl make sure atalk_libname is defined beforehand
105 [[ -n "$atalk_libname" ]] || AC_MSG_ERROR([internal error, atalk_libname undefined])
106 saved_atalk_libname=$atalk_libname
108 dnl define the required BDB version
109 AC_DEFINE_UNQUOTED(DB_MAJOR_REQ, ${DB_MAJOR_REQ}, [Required BDB version, major])
110 AC_DEFINE_UNQUOTED(DB_MINOR_REQ, ${DB_MINOR_REQ}, [Required BDB version, minor])
111 AC_DEFINE_UNQUOTED(DB_PATCH_REQ, ${DB_PATCH_REQ}, [Required BDB version, patch])
114 [ --with-bdb=PATH specify path to Berkeley DB installation[[auto]]],
115 if test "x$withval" = "xno"; then
117 elif test "x$withval" = "xyes"; then
120 bdb_search_dirs="$withval"
124 if test "x$dobdbsearch" = "xyes"; then
125 for bdbdir in $bdb_search_dirs; do
126 if test $bdbfound = "yes"; then
129 for subdir in ${search_subdirs}; do
130 AC_MSG_CHECKING([for Berkeley DB headers in ${bdbdir}/include${subdir}])
131 dnl -- First check the mere existence of the header
132 if test -f "${bdbdir}/include${subdir}/db.h" ; then
135 dnl -- Check if it meets minimun requirement, also return the version
136 NETATALK_BDB_HEADER([${bdbdir}/include${subdir}])
138 if test ${atalk_cv_bdbheader} != "no"; then
139 bdblibdir="${bdbdir}/${atalk_libname}"
140 bdbbindir="${bdbdir}/bin"
142 CPPFLAGS="-I${bdbdir}/include${subdir} $CPPFLAGS"
143 LDFLAGS="-L$bdblibdir $LDFLAGS"
145 dnl -- Uses version set by NETATALK_BDB_HEADER to try to run
146 dnl -- a conftest that checks that header/lib version match
147 dnl -- $shlibpath_var is set by LIBTOOL, its value is
148 dnl -- LD_LIBRARY_PATH on many platforms. This will be fairly
149 dnl -- portable hopefully. Reference:
150 dnl -- http://lists.gnu.org/archive/html/autoconf/2009-03/msg00040.html
151 eval export $shlibpath_var=$bdblibdir
152 NETATALK_BDB_TRY_LINK
153 eval export $shlibpath_var=$saved_shlibpath_var
155 if test x"${atalk_cv_bdb_version}" = x"yes"; then
156 BDB_CFLAGS="-I${bdbdir}/include${subdir}"
157 BDB_LIBS="-L${bdblibdir} ${atalk_cv_lib_db}"
164 dnl -- Search lib in "lib" too, as $atalk_libname might be set
165 dnl -- to "lib64" or "lib/64" which would not be found above
166 dnl -- if 64bit lib were installed in a dir named "lib"
167 if test x"$atalk_libname" != x"lib" ; then
168 bdblibdir="${bdbdir}/lib"
169 bdbbindir="${bdbdir}/bin"
171 CPPFLAGS="-I${bdbdir}/include${subdir} $CPPFLAGS"
172 LDFLAGS="-L$bdblibdir $LDFLAGS"
174 eval export $shlibpath_var=$bdblibdir
175 NETATALK_BDB_TRY_LINK
176 eval export $shlibpath_var=$saved_shlibpath_var
178 if test x"${atalk_cv_bdb_version}" = x"yes"; then
179 BDB_CFLAGS="-I${bdbdir}/include${subdir}"
180 BDB_LIBS="-L${bdblibdir} ${atalk_cv_lib_db}"
188 CFLAGS="$savedcflags"
189 LDFLAGS="$savedldflags"
190 CPPFLAGS="$savedcppflags"
199 CFLAGS="$savedcflags"
200 LDFLAGS="$savedldflags"
201 CPPFLAGS="$savedcppflags"
203 atalk_libname=$saved_atalk_libname
205 if test "x$bdbfound" = "xyes"; then
206 ifelse([$1], , :, [$1])
208 ifelse([$2], , :, [$2])
209 AC_MSG_ERROR([Berkeley DB library required but not found!])
212 CFLAGS_REMOVE_USR_INCLUDE(BDB_CFLAGS)
213 LIB_REMOVE_USR_LIB(BDB_LIBS)