]> arthur.barton.de Git - netatalk.git/blob - macros/db3-check.m4
Index check and rebuild, only count the didname index if the devino index is ok.
[netatalk.git] / macros / db3-check.m4
1 dnl $Id: db3-check.m4,v 1.11.6.9 2004-08-11 03:01:11 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_1,[-ldb-4.1])
123 NETATALK_BDB_LINK_TRY(atalk_cv_db_db41,[-ldb41])
124 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_41,[-ldb-41])
125 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_1,[-ldb-4-1])
126 NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4,[-ldb-4])
127 NETATALK_BDB_LINK_TRY(atalk_cv_db_db4,[-ldb4])
128 NETATALK_BDB_LINK_TRY(atalk_cv_db_db,[-ldb])
129 ])
130
131
132 AC_DEFUN([AC_PATH_BDB], 
133 [
134         trybdbdir=""
135         dobdbsearch=yes
136         bdb_search_dirs="/usr/local/include /usr/include"
137         search_subdirs="/db4.2 /db42 /db4.1 /db41 /db4 /"
138
139 dnl required BDB version
140         DB_MAJOR_REQ=4
141         DB_MINOR_REQ=1
142         DB_PATCH_REQ=0
143
144 dnl make sure atalk_libname is defined beforehand
145 [[ -n "$atalk_libname" ]] || AC_MSG_ERROR([internal error, atalk_libname undefined])
146
147 dnl define the required BDB version
148         AC_DEFINE_UNQUOTED(DB_MAJOR_REQ, ${DB_MAJOR_REQ}, [Required BDB version, major])
149         AC_DEFINE_UNQUOTED(DB_MINOR_REQ, ${DB_MINOR_REQ}, [Required BDB version, minor])
150         AC_DEFINE_UNQUOTED(DB_PATCH_REQ, ${DB_PATCH_REQ}, [Required BDB version, patch])
151
152
153         AC_ARG_WITH(bdb,
154                 [  --with-bdb=PATH         specify path to Berkeley DB installation[[auto]]],
155                 if test "x$withval" = "xno"; then
156                         dobdbsearch=no
157                 elif test "x$withval" = "xyes"; then
158                         dobdbsearch=yes
159                 else
160                         bdb_search_dirs="$withval/include $withval"
161                 fi
162         )
163
164
165         bdbfound=no
166         savedcflags="$CFLAGS"
167         savedldflags="$LDFLAGS"
168         savedcppflags="$CPPFLAGS"
169         savedlibs="$LIBS"
170
171         if test "x$dobdbsearch" = "xyes"; then
172             for bdbdir in $bdb_search_dirs; do
173                 if test $bdbfound = "yes"; then
174                         break;
175                 fi
176                 for subdir in ${search_subdirs}; do
177                     AC_MSG_CHECKING([for Berkeley DB headers in ${bdbdir}${subdir}])
178                     if test -f "${bdbdir}${subdir}/db.h" ; then
179                         AC_MSG_RESULT([yes])
180                         NETATALK_BDB_HEADER([${bdbdir}${subdir}])
181                         if test ${atalk_cv_bdbheader} != "no"; then
182                         
183 dnl                       bdblibdir="`echo $bdbdir | sed 's/\/include\/db4\.*.*//'`"
184                           bdblibdir="`echo $bdbdir | sed 's/\/include\/db4.*//'`"
185                           bdblibdir="`echo $bdblibdir | sed 's/\/include$//'`"
186                           bdblibdir="${bdblibdir}/${atalk_libname}"
187 dnl                       bdbbindir="`echo $bdbdir | sed 's/include\/db4\.*.*/bin/'`"
188                           bdbbindir="`echo $bdbdir | sed 's/\/include\/db4.*/bin/'`"
189                           bdbbindir="`echo $bdbbindir | sed 's/include$/bin/'`"
190
191                           CPPFLAGS="-I${bdbdir}${subdir} $CFLAGS"
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