]> arthur.barton.de Git - netatalk.git/blob - macros/db3-check.m4
b4c5a3b4a03671c7131a38889eba34721a62d3f1
[netatalk.git] / macros / db3-check.m4
1 dnl $Id: db3-check.m4,v 1.13 2005-04-28 20:50:05 bfernhomberg Exp $
2 dnl Autoconf macros to check for the Berkeley DB library
3
4
5 AC_DEFUN([NETATALK_BDB_LINK_TRY],
6 [if test $atalk_cv_lib_db = no ; then
7         AC_MSG_CHECKING([for Berkeley DB link (]ifelse($2,,default,$2)[)])
8         atalk_DB_LIB=ifelse($2,,-ldb,$2)
9         atalk_LIBS=$LIBS
10         LIBS="$atalk_DB_LIB $LIBS"
11
12         AC_TRY_LINK([
13 #include <db.h>
14 ],[
15         char *version;
16         int major, minor, patch;
17
18         version = db_version( &major, &minor, &patch );
19         return (0);
20 ],[$1=yes],[$1=no])
21
22         AC_MSG_RESULT([$$1])
23         LIBS="$atalk_LIBS"
24         if test $$1 = yes ; then
25                 atalk_cv_lib_db=ifelse($2,,-ldb,$2)
26         fi
27 fi
28 ])
29
30
31 AC_DEFUN([NETATALK_BDB_CHECK_VERSION],
32 [
33         atalk_LIBS=$LIBS
34         LIBS="${atalk_cv_lib_db} $LIBS"
35
36         AC_MSG_CHECKING([Berkeley DB library version >= ${DB_MAJOR_REQ}.${DB_MINOR_REQ}.${DB_PATCH_REQ}])
37         AC_TRY_RUN([
38 #if STDC_HEADERS
39 #include <stdlib.h>
40 #endif
41 #include <stdio.h>
42 #include <db.h>
43
44 int main(void) {
45         int major, minor, patch;
46         char *version_str;
47
48         version_str = db_version(&major, &minor, &patch);
49
50         /* check library version */
51         if (major < DB_MAJOR_REQ || minor < DB_MINOR_REQ || patch < DB_PATCH_REQ) {
52                 printf("library version too old (%d.%d.%d), ",major, minor, patch);
53                 return (2);
54         }
55
56         /* check header and library match */
57         if ( major != DB_VERSION_MAJOR || minor != DB_VERSION_MINOR || patch != DB_VERSION_PATCH) {
58                 printf("header/library version mismatch (%d.%d.%d/%d.%d.%d), ",
59                          DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH, major, minor, patch);
60                 return (3);
61         }
62
63         printf("%d.%d.%d, ",major, minor, patch);
64         return (0);
65 }
66 ], atalk_cv_bdb_version="yes", atalk_cv_bdb_version="no", atalk_cv_bdb_version="cross")
67
68
69         if test ${atalk_cv_bdb_version} = "yes"; then
70                 AC_MSG_RESULT(yes)
71         else
72                 AC_MSG_RESULT(no)
73         fi
74         LIBS="$atalk_LIBS"
75 ])
76
77
78 AC_DEFUN([NETATALK_BDB_HEADER],
79 [
80         savedcflags="$CFLAGS"
81         CFLAGS="-I$1 $CFLAGS"
82         dnl check for header version
83         AC_MSG_CHECKING(ifelse($1,,default,$1)[/db.h version >= ${DB_MAJOR_REQ}.${DB_MINOR_REQ}.${DB_PATCH_REQ}])
84         AC_TRY_RUN([
85 #if STDC_HEADERS
86 #include <stdlib.h>
87 #endif
88 #include <stdio.h>
89 #include <db.h>
90
91 int main(void) {
92
93         /* check header version */
94         if (DB_VERSION_MAJOR < DB_MAJOR_REQ || DB_VERSION_MINOR < DB_MINOR_REQ ||
95             DB_VERSION_PATCH < DB_PATCH_REQ ) {
96                 printf("header file version too old (%d.%d.%d), ", DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
97                 return (1);
98         }
99
100         printf("%d.%d.%d, ", DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
101         return (0);
102 }
103 ], atalk_cv_bdbheader="yes", atalk_cv_bdbheader="no", atalk_cv_bdbheader="cross")
104
105         if test ${atalk_cv_bdbheader} = "no"; then
106                 bdbfound=no
107                 AC_MSG_RESULT([no])
108         else
109                 AC_MSG_RESULT([yes])
110         fi
111         CFLAGS="$savedcflags"
112 ])
113
114
115 AC_DEFUN([NETATALK_BERKELEY_LINK],
116 [
117 atalk_cv_lib_db=no
118 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_dot_2,[-ldb-4.2])
119 NETATALK_BDB_LINK_TRY(atalk_cv_db_db42,[-ldb42])
120 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_42,[-ldb-42])
121 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_2,[-ldb-4-2])
122 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_dot_2,[-ldb-4.3])
123 NETATALK_BDB_LINK_TRY(atalk_cv_db_db42,[-ldb43])
124 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_42,[-ldb-43])
125 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_2,[-ldb-4-3])
126 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_dot_1,[-ldb-4.1])
127 NETATALK_BDB_LINK_TRY(atalk_cv_db_db41,[-ldb41])
128 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_41,[-ldb-41])
129 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_1,[-ldb-4-1])
130 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4,[-ldb-4])
131 NETATALK_BDB_LINK_TRY(atalk_cv_db_db4,[-ldb4])
132 NETATALK_BDB_LINK_TRY(atalk_cv_db_db,[-ldb])
133 ])
134
135
136 AC_DEFUN([AC_PATH_BDB], 
137 [
138         trybdbdir=""
139         dobdbsearch=yes
140         bdb_search_dirs="/usr/local/include /usr/include"
141         search_subdirs="/db4.2 /db42 /db4.3 /db43 /db4.1 /db41 /db4 /"
142
143 dnl required BDB version
144         DB_MAJOR_REQ=4
145         DB_MINOR_REQ=1
146         DB_PATCH_REQ=0
147
148 dnl make sure atalk_libname is defined beforehand
149 [[ -n "$atalk_libname" ]] || AC_MSG_ERROR([internal error, atalk_libname undefined])
150
151 dnl define the required BDB version
152         AC_DEFINE_UNQUOTED(DB_MAJOR_REQ, ${DB_MAJOR_REQ}, [Required BDB version, major])
153         AC_DEFINE_UNQUOTED(DB_MINOR_REQ, ${DB_MINOR_REQ}, [Required BDB version, minor])
154         AC_DEFINE_UNQUOTED(DB_PATCH_REQ, ${DB_PATCH_REQ}, [Required BDB version, patch])
155
156
157         AC_ARG_WITH(bdb,
158                 [  --with-bdb=PATH         specify path to Berkeley DB installation[[auto]]],
159                 if test "x$withval" = "xno"; then
160                         dobdbsearch=no
161                 elif test "x$withval" = "xyes"; then
162                         dobdbsearch=yes
163                 else
164                         bdb_search_dirs="$withval/include $withval"
165                 fi
166         )
167
168
169         bdbfound=no
170         savedcflags="$CFLAGS"
171         savedldflags="$LDFLAGS"
172         savedcppflags="$CPPFLAGS"
173         savedlibs="$LIBS"
174
175         if test "x$dobdbsearch" = "xyes"; then
176             for bdbdir in $bdb_search_dirs; do
177                 if test $bdbfound = "yes"; then
178                         break;
179                 fi
180                 for subdir in ${search_subdirs}; do
181                     AC_MSG_CHECKING([for Berkeley DB headers in ${bdbdir}${subdir}])
182                     if test -f "${bdbdir}${subdir}/db.h" ; then
183                         AC_MSG_RESULT([yes])
184                         NETATALK_BDB_HEADER([${bdbdir}${subdir}])
185                         if test ${atalk_cv_bdbheader} != "no"; then
186                         
187 dnl                       bdblibdir="`echo $bdbdir | sed 's/\/include\/db4\.*.*//'`"
188                           bdblibdir="`echo $bdbdir | sed 's/\/include\/db4.*//'`"
189                           bdblibdir="`echo $bdblibdir | sed 's/\/include$//'`"
190                           bdblibdir="${bdblibdir}/${atalk_libname}"
191 dnl                       bdbbindir="`echo $bdbdir | sed 's/include\/db4\.*.*/bin/'`"
192                           bdbbindir="`echo $bdbdir | sed 's/\/include\/db4.*/bin/'`"
193                           bdbbindir="`echo $bdbbindir | sed 's/include$/bin/'`"
194
195                           CPPFLAGS="-I${bdbdir}${subdir} $CFLAGS"
196                           CFLAGS=""
197                           LDFLAGS="-L$bdblibdir $LDFLAGS"
198                           NETATALK_BERKELEY_LINK
199                           if test x"${atalk_cv_lib_db}" != x"no"; then
200                                 NETATALK_BDB_CHECK_VERSION
201                                 if test x"${atalk_cv_bdb_version}" != x"no"; then
202                                     BDB_LIBS="-L${bdblibdir} ${atalk_cv_lib_db}"
203                                     BDB_CFLAGS="-I${bdbdir}${subdir}"
204                                     BDB_BIN=$bdbbindir
205                                     BDB_PATH="`echo $bdbdir | sed 's,include\/db4$,,'`"
206                                     BDB_PATH="`echo $BDB_PATH | sed 's,include$,,'`"
207                                     bdbfound=yes
208                                     break;
209                                 fi
210                           fi    
211                           CFLAGS="$savedcflags"
212                           LDFLAGS="$savedldflags"
213                           CPPFLAGS="$savedcppflags"
214                           LIBS="$savedlibs"
215                         fi
216                     else
217                         AC_MSG_RESULT([no])
218                     fi
219                 done
220             done
221         fi
222
223         CFLAGS="$savedcflags"
224         LDFLAGS="$savedldflags"
225         CPPFLAGS="$savedcppflags"
226         LIBS="$savedlibs"
227
228         if test "x$bdbfound" = "xyes"; then
229                 ifelse([$1], , :, [$1])
230         else
231                 ifelse([$2], , :, [$2])     
232         fi
233
234         CFLAGS_REMOVE_USR_INCLUDE(BDB_CFLAGS)
235         LIB_REMOVE_USR_LIB(BDB_LIBS)
236         AC_SUBST(BDB_CFLAGS)
237         AC_SUBST(BDB_LIBS)
238         AC_SUBST(BDB_BIN)
239         AC_SUBST(BDB_PATH)
240 ])
241
242