]> arthur.barton.de Git - netatalk.git/blob - macros/db3-check.m4
configure macros for Berkeley DB4.4
[netatalk.git] / macros / db3-check.m4
1 dnl $Id: db3-check.m4,v 1.14 2006-09-09 03:52:41 didg 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 dnl I don't understand this stuff below
115 dnl AFAIK it works for 4.1 and 4.2 and (4.3 xor 4.4) 
116 dnl you can have 4.2 and 4.3 installed
117 dnl but If you have 4.3 and 4.4 it won't work with 4.3
118 dnl only 4.4
119 dnl didier 
120 AC_DEFUN([NETATALK_BERKELEY_LINK],
121 [
122 atalk_cv_lib_db=no
123 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_dot_2,[-ldb-4.2])
124 NETATALK_BDB_LINK_TRY(atalk_cv_db_db42,[-ldb42])
125 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_42,[-ldb-42])
126 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_2,[-ldb-4-2])
127
128 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_dot_2,[-ldb-4.4])
129 NETATALK_BDB_LINK_TRY(atalk_cv_db_db42,[-ldb44])
130 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_42,[-ldb-44])
131 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_2,[-ldb-4-4])
132
133 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_dot_2,[-ldb-4.3])
134 NETATALK_BDB_LINK_TRY(atalk_cv_db_db42,[-ldb43])
135 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_42,[-ldb-43])
136 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_2,[-ldb-4-3])
137
138 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_dot_1,[-ldb-4.1])
139 NETATALK_BDB_LINK_TRY(atalk_cv_db_db41,[-ldb41])
140 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_41,[-ldb-41])
141 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_1,[-ldb-4-1])
142 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4,[-ldb-4])
143 NETATALK_BDB_LINK_TRY(atalk_cv_db_db4,[-ldb4])
144 NETATALK_BDB_LINK_TRY(atalk_cv_db_db,[-ldb])
145 ])
146
147
148 AC_DEFUN([AC_PATH_BDB], 
149 [
150         trybdbdir=""
151         dobdbsearch=yes
152         bdb_search_dirs="/usr/local/include /usr/include"
153         search_subdirs="/db4.2 /db42 /db4.3 /db43 /db4.4 /db44 /db4.1 /db41 /db4 /"
154
155 dnl required BDB version
156         DB_MAJOR_REQ=4
157         DB_MINOR_REQ=1
158         DB_PATCH_REQ=0
159
160 dnl make sure atalk_libname is defined beforehand
161 [[ -n "$atalk_libname" ]] || AC_MSG_ERROR([internal error, atalk_libname undefined])
162
163 dnl define the required BDB version
164         AC_DEFINE_UNQUOTED(DB_MAJOR_REQ, ${DB_MAJOR_REQ}, [Required BDB version, major])
165         AC_DEFINE_UNQUOTED(DB_MINOR_REQ, ${DB_MINOR_REQ}, [Required BDB version, minor])
166         AC_DEFINE_UNQUOTED(DB_PATCH_REQ, ${DB_PATCH_REQ}, [Required BDB version, patch])
167
168
169         AC_ARG_WITH(bdb,
170                 [  --with-bdb=PATH         specify path to Berkeley DB installation[[auto]]],
171                 if test "x$withval" = "xno"; then
172                         dobdbsearch=no
173                 elif test "x$withval" = "xyes"; then
174                         dobdbsearch=yes
175                 else
176                         bdb_search_dirs="$withval/include $withval"
177                 fi
178         )
179
180
181         bdbfound=no
182         savedcflags="$CFLAGS"
183         savedldflags="$LDFLAGS"
184         savedcppflags="$CPPFLAGS"
185         savedlibs="$LIBS"
186
187         if test "x$dobdbsearch" = "xyes"; then
188             for bdbdir in $bdb_search_dirs; do
189                 if test $bdbfound = "yes"; then
190                         break;
191                 fi
192                 for subdir in ${search_subdirs}; do
193                     AC_MSG_CHECKING([for Berkeley DB headers in ${bdbdir}${subdir}])
194                     if test -f "${bdbdir}${subdir}/db.h" ; then
195                         AC_MSG_RESULT([yes])
196                         NETATALK_BDB_HEADER([${bdbdir}${subdir}])
197                         if test ${atalk_cv_bdbheader} != "no"; then
198                         
199 dnl                       bdblibdir="`echo $bdbdir | sed 's/\/include\/db4\.*.*//'`"
200                           bdblibdir="`echo $bdbdir | sed 's/\/include\/db4.*//'`"
201                           bdblibdir="`echo $bdblibdir | sed 's/\/include$//'`"
202                           bdblibdir="${bdblibdir}/${atalk_libname}"
203 dnl                       bdbbindir="`echo $bdbdir | sed 's/include\/db4\.*.*/bin/'`"
204                           bdbbindir="`echo $bdbdir | sed 's/\/include\/db4.*/bin/'`"
205                           bdbbindir="`echo $bdbbindir | sed 's/include$/bin/'`"
206
207                           CPPFLAGS="-I${bdbdir}${subdir} $CFLAGS"
208                           CFLAGS=""
209                           LDFLAGS="-L$bdblibdir $LDFLAGS"
210                           NETATALK_BERKELEY_LINK
211                           if test x"${atalk_cv_lib_db}" != x"no"; then
212                                 NETATALK_BDB_CHECK_VERSION
213                                 if test x"${atalk_cv_bdb_version}" != x"no"; then
214                                     BDB_LIBS="-L${bdblibdir} ${atalk_cv_lib_db}"
215                                     BDB_CFLAGS="-I${bdbdir}${subdir}"
216                                     BDB_BIN=$bdbbindir
217                                     BDB_PATH="`echo $bdbdir | sed 's,include\/db4$,,'`"
218                                     BDB_PATH="`echo $BDB_PATH | sed 's,include$,,'`"
219                                     bdbfound=yes
220                                     break;
221                                 fi
222                           fi    
223                           CFLAGS="$savedcflags"
224                           LDFLAGS="$savedldflags"
225                           CPPFLAGS="$savedcppflags"
226                           LIBS="$savedlibs"
227                         fi
228                     else
229                         AC_MSG_RESULT([no])
230                     fi
231                 done
232             done
233         fi
234
235         CFLAGS="$savedcflags"
236         LDFLAGS="$savedldflags"
237         CPPFLAGS="$savedcppflags"
238         LIBS="$savedlibs"
239
240         if test "x$bdbfound" = "xyes"; then
241                 ifelse([$1], , :, [$1])
242         else
243                 ifelse([$2], , :, [$2])     
244         fi
245
246         CFLAGS_REMOVE_USR_INCLUDE(BDB_CFLAGS)
247         LIB_REMOVE_USR_LIB(BDB_LIBS)
248         AC_SUBST(BDB_CFLAGS)
249         AC_SUBST(BDB_LIBS)
250         AC_SUBST(BDB_BIN)
251         AC_SUBST(BDB_PATH)
252 ])
253
254