]> arthur.barton.de Git - netatalk.git/blob - macros/db3-check.m4
Adjust bdb library search paths: add 4.8 remove all before 4.6.
[netatalk.git] / macros / db3-check.m4
1 dnl $Id: db3-check.m4,v 1.23 2010-04-12 14:28:48 franklahm Exp $
2 dnl Autoconf macros to check for the Berkeley DB library
3
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}])
9
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`
12
13     if test $DB_MAJOR_REQ -gt $atalk_cv_bdb_MAJOR ; then
14         AC_MSG_RESULT([no])
15         atalk_cv_bdbheader=no
16     elif test $DB_MINOR_REQ -gt $atalk_cv_bdb_MINOR ; then
17         AC_MSG_RESULT([no])
18         atalk_cv_bdbheader=no
19     else
20         AC_MSG_RESULT([yes])
21         atalk_cv_bdbheader=yes
22     fi
23 ])
24
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="db$maj$min db$maj.$min db-$maj$min db-$maj.$min db$maj-$maj.$min db"
32
33     for lib in $atalk_cv_bdb_try_libs ; do
34         LIBS="-l$lib $savedlibs"
35         AC_MSG_CHECKING([Berkeley DB library (-l$lib)])
36         AC_TRY_RUN([
37             #include <stdio.h>
38             #include <db.h>
39             int main(void) {
40                 int major, minor, patch;
41                 char *version_str;
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);
45                     return (2);
46                 }
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);
50                     return (3);
51                 }
52                 printf("%d.%d.%d ... ",major, minor, patch);
53                 return (0);
54             }
55         ],[
56             AC_MSG_RESULT(yes)
57             atalk_cv_bdb_version="yes"
58             atalk_cv_lib_db="-l$lib"
59             break
60         ],[
61             AC_MSG_RESULT(no)
62         ],[
63             bdblibs=`ls $bdblibdir/lib$lib.* 2>/dev/null`
64             for bdblib in $bdblibs ; do
65                 echo "Testing for lib file $bdblib" >&AS_MESSAGE_LOG_FD
66                 if test -f "$bdblib" ; then
67                     AC_MSG_RESULT([yes (cross-compiling)])
68                     atalk_cv_bdb_version="yes"
69                     atalk_cv_lib_db="-l$lib"
70                     break
71                 fi
72             done
73             if test "x$atalk_cv_bdb_version" = "xyes" ; then
74                 break
75             fi
76             AC_MSG_RESULT([no (cross-compiling)])
77         ])
78     done
79     LIBS="$savedlibs"
80 ])
81
82 dnl -- This is called from configure
83 AC_DEFUN([AC_PATH_BDB],[
84     trybdbdir=""
85     dobdbsearch=yes
86     bdb_search_dirs="/usr/local /usr"
87     search_subdirs="/ /db4.8 /db48 /db4.7 /db47 /db4.6 /db46 /db4"
88
89     bdbfound=no
90     savedcflags="$CFLAGS"
91     savedldflags="$LDFLAGS"
92     savedcppflags="$CPPFLAGS"
93     savedlibs="$LIBS"
94     saved_shlibpath_var=$shlibpath_var
95
96     dnl required BDB version: 4.6, because of cursor API change
97     DB_MAJOR_REQ=4
98     DB_MINOR_REQ=6
99     DB_PATCH_REQ=0
100
101     dnl make sure atalk_libname is defined beforehand
102     [[ -n "$atalk_libname" ]] || AC_MSG_ERROR([internal error, atalk_libname undefined])
103     saved_atalk_libname=$atalk_libname
104
105     dnl define the required BDB version
106     AC_DEFINE_UNQUOTED(DB_MAJOR_REQ, ${DB_MAJOR_REQ}, [Required BDB version, major])
107     AC_DEFINE_UNQUOTED(DB_MINOR_REQ, ${DB_MINOR_REQ}, [Required BDB version, minor])
108     AC_DEFINE_UNQUOTED(DB_PATCH_REQ, ${DB_PATCH_REQ}, [Required BDB version, patch])
109
110     AC_ARG_WITH(bdb,
111         [  --with-bdb=PATH         specify path to Berkeley DB installation[[auto]]],
112         if test "x$withval" = "xno"; then
113             dobdbsearch=no
114         elif test "x$withval" = "xyes"; then
115             dobdbsearch=yes
116         else
117             bdb_search_dirs="$withval"
118         fi
119     )
120
121     if test "x$dobdbsearch" = "xyes"; then
122         for bdbdir in $bdb_search_dirs; do
123             if test $bdbfound = "yes"; then
124                 break;
125             fi
126             for subdir in ${search_subdirs}; do
127                 AC_MSG_CHECKING([for Berkeley DB headers in ${bdbdir}/include${subdir}])
128                 dnl -- First check the mere existence of the header
129                 if test -f "${bdbdir}/include${subdir}/db.h" ; then
130                     AC_MSG_RESULT([yes])
131
132                     dnl -- Check if it meets minimun requirement, also return the version
133                     NETATALK_BDB_HEADER([${bdbdir}/include${subdir}])
134
135                     if test ${atalk_cv_bdbheader} != "no"; then
136                         bdblibdir="${bdbdir}/${atalk_libname}"
137                         bdbbindir="${bdbdir}/bin"
138
139                         CPPFLAGS="-I${bdbdir}/include${subdir} $CPPFLAGS"
140                         LDFLAGS="-L$bdblibdir $LDFLAGS"
141
142                         dnl -- Uses version set by NETATALK_BDB_HEADER to try to run
143                         dnl -- a conftest that checks that header/lib version match
144                         dnl -- $shlibpath_var is set by LIBTOOL, its value is
145                         dnl -- LD_LIBRARY_PATH on many platforms. This will be fairly
146                         dnl -- portable hopefully. Reference:
147                         dnl -- http://lists.gnu.org/archive/html/autoconf/2009-03/msg00040.html
148                         eval export $shlibpath_var=$bdblibdir
149                         NETATALK_BDB_TRY_LINK
150                         eval export $shlibpath_var=$saved_shlibpath_var
151
152                         if test x"${atalk_cv_bdb_version}" = x"yes"; then
153                             BDB_CFLAGS="-I${bdbdir}/include${subdir}"
154                             BDB_LIBS="-L${bdblibdir} ${atalk_cv_lib_db}"
155                             BDB_BIN="$bdbbindir"
156                             BDB_PATH="$bdbdir"
157                             bdbfound=yes
158                             break;
159                         fi
160
161                         dnl -- Search for 64bit lib in "lib" too
162                         if test x"$atalk_libname" = x"lib64" ; then
163                            bdblibdir="${bdbdir}/lib"
164                            bdbbindir="${bdbdir}/bin"
165
166                            CPPFLAGS="-I${bdbdir}/include${subdir} $CPPFLAGS"
167                            LDFLAGS="-L$bdblibdir $LDFLAGS"
168
169                            eval export $shlibpath_var=$bdblibdir
170                            NETATALK_BDB_TRY_LINK
171                            eval export $shlibpath_var=$saved_shlibpath_var
172
173                            if test x"${atalk_cv_bdb_version}" = x"yes"; then
174                               BDB_CFLAGS="-I${bdbdir}/include${subdir}"
175                               BDB_LIBS="-L${bdblibdir} ${atalk_cv_lib_db}"
176                               BDB_BIN="$bdbbindir"
177                               BDB_PATH="$bdbdir"
178                               bdbfound=yes
179                               break;
180                            fi
181                         fi
182                     fi
183                     CFLAGS="$savedcflags"
184                     LDFLAGS="$savedldflags"
185                     CPPFLAGS="$savedcppflags"
186                     LIBS="$savedlibs"
187                 else
188                     AC_MSG_RESULT([no])
189                 fi
190             done
191         done
192     fi
193
194     CFLAGS="$savedcflags"
195     LDFLAGS="$savedldflags"
196     CPPFLAGS="$savedcppflags"
197     LIBS="$savedlibs"
198     atalk_libname=$saved_atalk_libname
199
200     if test "x$bdbfound" = "xyes"; then
201         ifelse([$1], , :, [$1])
202     else
203         ifelse([$2], , :, [$2])     
204     fi
205
206     CFLAGS_REMOVE_USR_INCLUDE(BDB_CFLAGS)
207     LIB_REMOVE_USR_LIB(BDB_LIBS)
208     AC_SUBST(BDB_CFLAGS)
209     AC_SUBST(BDB_LIBS)
210     AC_SUBST(BDB_BIN)
211     AC_SUBST(BDB_PATH)
212 ])
213
214