]> arthur.barton.de Git - netatalk.git/blob - macros/db3-check.m4
afpd.conf.tmpl: Merge remote-tracking branch 'remotes/origin/branch-netatalk-2-1'
[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 $atalk_cv_bdb_MAJOR -gt $DB_MAJOR_REQ ; then
14         AC_MSG_RESULT([yes])
15         atalk_cv_bdbheader=yes
16     elif test $DB_MAJOR_REQ -gt $atalk_cv_bdb_MAJOR ; then
17         AC_MSG_RESULT([no])
18         atalk_cv_bdbheader=no
19     elif test $DB_MINOR_REQ -gt $atalk_cv_bdb_MINOR ; then
20         AC_MSG_RESULT([no])
21         atalk_cv_bdbheader=no
22     else
23         AC_MSG_RESULT([yes])
24         atalk_cv_bdbheader=yes
25     fi
26 ])
27
28 dnl -- Try to link and run with lib with version taken from
29 dnl -- $atalk_cv_bdb_MAJOR and $atalk_cv_bdb_MINOR
30 AC_DEFUN([NETATALK_BDB_TRY_LINK],[
31     atalk_cv_bdb_version=no
32     maj=$atalk_cv_bdb_MAJOR
33     min=$atalk_cv_bdb_MINOR
34     atalk_cv_bdb_try_libs="db$maj$min db$maj.$min db-$maj$min db-$maj.$min db$maj-$maj.$min db"
35
36     for lib in $atalk_cv_bdb_try_libs ; do
37         LIBS="-l$lib $savedlibs"
38         AC_MSG_CHECKING([Berkeley DB library (-l$lib)])
39         AC_TRY_RUN([
40             #include <stdio.h>
41             #include <db.h>
42             int main(void) {
43                 int major, minor, patch;
44                 char *version_str;
45                 version_str = db_version(&major, &minor, &patch);
46                 if ((major*100 + minor*10 + patch) < (DB_MAJOR_REQ*100 + DB_MINOR_REQ*10 + DB_PATCH_REQ)) {
47                     printf("linking wrong library version (%d.%d.%d), ",major, minor, patch);
48                     return (2);
49                 }
50                 if ( major != DB_VERSION_MAJOR || minor != DB_VERSION_MINOR || patch != DB_VERSION_PATCH) {
51                     printf("header/library version mismatch (%d.%d.%d/%d.%d.%d), ",
52                         DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH, major, minor, patch);
53                     return (3);
54                 }
55                 printf("%d.%d.%d ... ",major, minor, patch);
56                 return (0);
57             }
58         ],[
59             AC_MSG_RESULT(yes)
60             atalk_cv_bdb_version="yes"
61             atalk_cv_lib_db="-l$lib"
62             break
63         ],[
64             AC_MSG_RESULT(no)
65         ],[
66             bdblibs=`ls $bdblibdir/lib$lib.* 2>/dev/null`
67             for bdblib in $bdblibs ; do
68                 echo "Testing for lib file $bdblib" >&AS_MESSAGE_LOG_FD
69                 if test -f "$bdblib" ; then
70                     AC_MSG_RESULT([yes (cross-compiling)])
71                     atalk_cv_bdb_version="yes"
72                     atalk_cv_lib_db="-l$lib"
73                     break
74                 fi
75             done
76             if test "x$atalk_cv_bdb_version" = "xyes" ; then
77                 break
78             fi
79             AC_MSG_RESULT([no (cross-compiling)])
80         ])
81     done
82     LIBS="$savedlibs"
83 ])
84
85 dnl -- This is called from configure
86 AC_DEFUN([AC_PATH_BDB],[
87     trybdbdir=""
88     dobdbsearch=yes
89     bdb_search_dirs="/usr/local /usr"
90     search_subdirs="/ /db5 /db5.0 /db50 /db4.8 /db48 /db4.7 /db47 /db4.6 /db46 /db4"
91
92     bdbfound=no
93     savedcflags="$CFLAGS"
94     savedldflags="$LDFLAGS"
95     savedcppflags="$CPPFLAGS"
96     savedlibs="$LIBS"
97     saved_shlibpath_var=$shlibpath_var
98
99     dnl required BDB version: 4.6, because of cursor API change
100     DB_MAJOR_REQ=4
101     DB_MINOR_REQ=6
102     DB_PATCH_REQ=0
103
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
107
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])
112
113     AC_ARG_WITH(bdb,
114         [  --with-bdb=PATH         specify path to Berkeley DB installation[[auto]]],
115         if test "x$withval" = "xno"; then
116             dobdbsearch=no
117         elif test "x$withval" = "xyes"; then
118             dobdbsearch=yes
119         else
120             bdb_search_dirs="$withval"
121         fi
122     )
123
124     if test "x$dobdbsearch" = "xyes"; then
125         for bdbdir in $bdb_search_dirs; do
126             if test $bdbfound = "yes"; then
127                 break;
128             fi
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
133                     AC_MSG_RESULT([yes])
134
135                     dnl -- Check if it meets minimun requirement, also return the version
136                     NETATALK_BDB_HEADER([${bdbdir}/include${subdir}])
137
138                     if test ${atalk_cv_bdbheader} != "no"; then
139                         bdblibdir="${bdbdir}/${atalk_libname}"
140                         bdbbindir="${bdbdir}/bin"
141
142                         CPPFLAGS="-I${bdbdir}/include${subdir} $CPPFLAGS"
143                         LDFLAGS="-L$bdblibdir $LDFLAGS"
144
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
154
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}"
158                             BDB_BIN="$bdbbindir"
159                             BDB_PATH="$bdbdir"
160                             bdbfound=yes
161                             break;
162                         fi
163
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"
170
171                            CPPFLAGS="-I${bdbdir}/include${subdir} $CPPFLAGS"
172                            LDFLAGS="-L$bdblibdir $LDFLAGS"
173
174                            eval export $shlibpath_var=$bdblibdir
175                            NETATALK_BDB_TRY_LINK
176                            eval export $shlibpath_var=$saved_shlibpath_var
177
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}"
181                               BDB_BIN="$bdbbindir"
182                               BDB_PATH="$bdbdir"
183                               bdbfound=yes
184                               break;
185                            fi
186                         fi
187                     fi
188                     CFLAGS="$savedcflags"
189                     LDFLAGS="$savedldflags"
190                     CPPFLAGS="$savedcppflags"
191                     LIBS="$savedlibs"
192                 else
193                     AC_MSG_RESULT([no])
194                 fi
195             done
196         done
197     fi
198
199     CFLAGS="$savedcflags"
200     LDFLAGS="$savedldflags"
201     CPPFLAGS="$savedcppflags"
202     LIBS="$savedlibs"
203     atalk_libname=$saved_atalk_libname
204
205     if test "x$bdbfound" = "xyes"; then
206         ifelse([$1], , :, [$1])
207     else
208         ifelse([$2], , :, [$2])     
209     fi
210
211     CFLAGS_REMOVE_USR_INCLUDE(BDB_CFLAGS)
212     LIB_REMOVE_USR_LIB(BDB_LIBS)
213     AC_SUBST(BDB_CFLAGS)
214     AC_SUBST(BDB_LIBS)
215     AC_SUBST(BDB_BIN)
216     AC_SUBST(BDB_PATH)
217 ])
218
219