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