]> arthur.barton.de Git - netatalk.git/blob - macros/db3-check.m4
Link DBD using -R on systems that need -R. Closes bug #1240793.
[netatalk.git] / macros / db3-check.m4
1 dnl $Id: db3-check.m4,v 1.15 2008-12-02 18:22:01 morgana 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                           if test "x$need_dash_r" = "xyes"; then
211                                 LDFLAGS="$LDFLAGS -R${bdblibdir}"
212                           fi
213                           NETATALK_BERKELEY_LINK
214                           if test x"${atalk_cv_lib_db}" != x"no"; then
215                                 NETATALK_BDB_CHECK_VERSION
216                                 if test x"${atalk_cv_bdb_version}" != x"no"; then
217                                     BDB_LIBS="-L${bdblibdir} ${atalk_cv_lib_db}"
218                                     if test "x$need_dash_r" = "xyes"; then
219                                         BDB_LIBS="$BDB_LIBS -R${bdblibdir}"
220                                     fi
221                                     BDB_CFLAGS="-I${bdbdir}${subdir}"
222                                     BDB_BIN=$bdbbindir
223                                     BDB_PATH="`echo $bdbdir | sed 's,include\/db4$,,'`"
224                                     BDB_PATH="`echo $BDB_PATH | sed 's,include$,,'`"
225                                     bdbfound=yes
226                                     break;
227                                 fi
228                           fi    
229                           CFLAGS="$savedcflags"
230                           LDFLAGS="$savedldflags"
231                           CPPFLAGS="$savedcppflags"
232                           LIBS="$savedlibs"
233                         fi
234                     else
235                         AC_MSG_RESULT([no])
236                     fi
237                 done
238             done
239         fi
240
241         CFLAGS="$savedcflags"
242         LDFLAGS="$savedldflags"
243         CPPFLAGS="$savedcppflags"
244         LIBS="$savedlibs"
245
246         if test "x$bdbfound" = "xyes"; then
247                 ifelse([$1], , :, [$1])
248         else
249                 ifelse([$2], , :, [$2])     
250         fi
251
252         CFLAGS_REMOVE_USR_INCLUDE(BDB_CFLAGS)
253         LIB_REMOVE_USR_LIB(BDB_LIBS)
254         AC_SUBST(BDB_CFLAGS)
255         AC_SUBST(BDB_LIBS)
256         AC_SUBST(BDB_BIN)
257         AC_SUBST(BDB_PATH)
258 ])
259
260