]> git.sur5r.net Git - openldap/blob - build/openldap.m4
replace sig_atomic_t and socklen_t macros
[openldap] / build / openldap.m4
1 dnl OpenLDAP Autoconf Macros
2 dnl $OpenLDAP$
3 dnl This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 dnl
5 dnl Copyright 1998-2005 The OpenLDAP Foundation.
6 dnl All rights reserved.
7 dnl
8 dnl Redistribution and use in source and binary forms, with or without
9 dnl modification, are permitted only as authorized by the OpenLDAP
10 dnl Public License.
11 dnl
12 dnl A copy of this license is available in the file LICENSE in the
13 dnl top-level directory of the distribution or, alternatively, at
14 dnl <http://www.OpenLDAP.org/license.html>.
15 dnl
16 dnl --------------------------------------------------------------------
17 dnl Restricted form of AC_ARG_ENABLE that limits user options
18 dnl
19 dnl $1 = option name
20 dnl $2 = help-string
21 dnl $3 = default value  (auto).  "--" means do not set it by default
22 dnl $4 = allowed values (auto yes no)
23 AC_DEFUN([OL_ARG_ENABLE], [# OpenLDAP --enable-$1
24         AC_ARG_ENABLE($1,ifelse($3,--,[$2],
25                 [changequote(<,>)<$2 [>ifelse($3,,auto,$3)<]>changequote([,])]),[
26         ol_arg=invalid
27         for ol_val in ifelse($4,,[auto yes no],[$4]) ; do
28                 if test "$enableval" = "$ol_val" ; then
29                         ol_arg="$ol_val"
30                 fi
31         done
32         if test "$ol_arg" = "invalid" ; then
33                 AC_MSG_ERROR(bad value $enableval for --enable-$1)
34         fi
35         ol_enable_$1="$ol_arg"
36 ]ifelse($3,--,,[,
37 [       ol_enable_$1=ifelse($3,,"auto","$3")]]))dnl
38 dnl AC_MSG_RESULT([OpenLDAP -enable-$1 $ol_enable_$1])
39 # end --enable-$1
40 ])dnl
41 dnl
42 dnl --------------------------------------------------------------------
43 dnl Restricted form of AC_ARG_WITH that limits user options
44 dnl
45 dnl $1 = option name
46 dnl $2 = help-string
47 dnl $3 = default value (no)
48 dnl $4 = allowed values (yes or no)
49 AC_DEFUN([OL_ARG_WITH], [# OpenLDAP --with-$1
50         AC_ARG_WITH($1,changequote(<,>)<$2 [>ifelse($3,,yes,$3)<]>changequote([,]),[
51         ol_arg=invalid
52         for ol_val in ifelse($4,,[yes no],[$4]) ; do
53                 if test "$withval" = "$ol_val" ; then
54                         ol_arg="$ol_val"
55                 fi
56         done
57         if test "$ol_arg" = "invalid" ; then
58                 AC_MSG_ERROR(bad value $withval for --with-$1)
59         fi
60         ol_with_$1="$ol_arg"
61 ],
62 [       ol_with_$1=ifelse($3,,"no","$3")])dnl
63 dnl AC_MSG_RESULT([OpenLDAP --with-$1 $ol_with_$1])
64 # end --with-$1
65 ])dnl
66 dnl ====================================================================
67 dnl Check for dependency generation flag
68 AC_DEFUN([OL_MKDEPEND], [# test for make depend flag
69 OL_MKDEP=
70 OL_MKDEP_FLAGS=
71 if test -z "${MKDEP}"; then
72         OL_MKDEP="${CC-cc}"
73         if test -z "${MKDEP_FLAGS}"; then
74                 AC_CACHE_CHECK([for ${OL_MKDEP} depend flag], ol_cv_mkdep, [
75                         ol_cv_mkdep=no
76                         for flag in "-M" "-xM"; do
77                                 cat > conftest.c <<EOF
78  noCode;
79 EOF
80                                 if AC_TRY_COMMAND($OL_MKDEP $flag conftest.c) \
81                                         | egrep '^conftest\.'"${ac_objext}" >/dev/null 2>&1
82                                 then
83                                         if test ! -f conftest."${ac_object}" ; then
84                                                 ol_cv_mkdep=$flag
85                                                 OL_MKDEP_FLAGS="$flag"
86                                                 break
87                                         fi
88                                 fi
89                         done
90                         rm -f conftest*
91                 ])
92         else
93                 cc_cv_mkdep=yes
94                 OL_MKDEP_FLAGS="${MKDEP_FLAGS}"
95         fi
96 else
97         cc_cv_mkdep=yes
98         OL_MKDEP="${MKDEP}"
99         OL_MKDEP_FLAGS="${MKDEP_FLAGS}"
100 fi
101 AC_SUBST(OL_MKDEP)
102 AC_SUBST(OL_MKDEP_FLAGS)
103 ])
104 dnl
105 dnl ====================================================================
106 dnl Check if system uses EBCDIC instead of ASCII
107 AC_DEFUN([OL_CPP_EBCDIC], [# test for EBCDIC
108 AC_CACHE_CHECK([for EBCDIC],ol_cv_cpp_ebcdic,[
109         AC_PREPROC_IFELSE([AC_LANG_SOURCE([[
110 #if !('M' == 0xd4)
111 #include <__ASCII__/generate_error.h>
112 #endif
113 ]])],[ol_cv_cpp_ebcdic=yes],[ol_cv_cpp_ebcdic=no])])
114 if test $ol_cv_cpp_ebcdic = yes ; then
115         AC_DEFINE(HAVE_EBCDIC,1, [define if system uses EBCDIC instead of ASCII])
116 fi
117 ])
118 dnl
119 dnl --------------------------------------------------------------------
120 dnl OpenLDAP version of STDC header check w/ EBCDIC support
121 AC_DEFUN([OL_HEADER_STDC],
122 [AC_REQUIRE_CPP()dnl
123 AC_REQUIRE([OL_CPP_EBCDIC])dnl
124 AC_CACHE_CHECK([for ANSI C header files], ol_cv_header_stdc,
125 [AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>
126 #include <stdarg.h>
127 #include <string.h>
128 #include <float.h>]])],[ol_cv_header_stdc=yes],[ol_cv_header_stdc=no])
129
130 if test $ol_cv_header_stdc = yes; then
131   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
132 AC_EGREP_HEADER(memchr, string.h, , ol_cv_header_stdc=no)
133 fi
134
135 if test $ol_cv_header_stdc = yes; then
136   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
137 AC_EGREP_HEADER(free, stdlib.h, , ol_cv_header_stdc=no)
138 fi
139
140 if test $ol_cv_header_stdc = yes; then
141   # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
142 AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <ctype.h>
143 #ifndef HAVE_EBCDIC
144 #       define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
145 #       define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
146 #else
147 #       define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \
148                 || ('j' <= (c) && (c) <= 'r') \
149                 || ('s' <= (c) && (c) <= 'z'))
150 #       define TOUPPER(c)       (ISLOWER(c) ? ((c) | 0x40) : (c))
151 #endif
152 #define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
153 int main () { int i; for (i = 0; i < 256; i++)
154 if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
155 exit (0); }
156 ]])],[],[ol_cv_header_stdc=no],[:])
157 fi])
158 if test $ol_cv_header_stdc = yes; then
159   AC_DEFINE(STDC_HEADERS)
160 fi
161 ac_cv_header_stdc=disable
162 ])
163 dnl
164 dnl ====================================================================
165 dnl DNS resolver macros
166 AC_DEFUN([OL_RESOLVER_TRY],
167 [if test $ol_cv_lib_resolver = no ; then
168         AC_CACHE_CHECK([for resolver link (]ifelse($2,,default,$2)[)],[$1],
169 [
170         ol_RESOLVER_LIB=ifelse($2,,,$2)
171         ol_LIBS=$LIBS
172         LIBS="$ol_RESOLVER_LIB $LIBS"
173
174         AC_LINK_IFELSE([AC_LANG_PROGRAM([[
175 #ifdef HAVE_SYS_TYPES_H
176 #       include <sys/types.h>
177 #endif
178 #include <netinet/in.h>
179 #ifdef HAVE_ARPA_NAMESER_H
180 #       include <arpa/nameser.h>
181 #endif
182 #ifdef HAVE_RESOLV_H
183 #       include <resolv.h>
184 #endif
185 ]], [[{
186         int len, status;
187         char *request = NULL;
188         unsigned char reply[64*1024];
189         unsigned char host[64*1024];
190         unsigned char *p;
191
192 #ifdef NS_HFIXEDSZ
193         /* Bind 8/9 interface */
194         len = res_query(request, ns_c_in, ns_t_srv, reply, sizeof(reply));
195 #else
196         /* Bind 4 interface */
197 # ifndef T_SRV
198 #  define T_SRV 33
199 # endif
200         len = res_query(request, C_IN, T_SRV, reply, sizeof(reply));
201 #endif
202         p = reply;
203 #ifdef NS_HFIXEDSZ
204         /* Bind 8/9 interface */
205         p += NS_HFIXEDSZ;
206 #elif defined(HFIXEDSZ)
207         /* Bind 4 interface w/ HFIXEDSZ */
208         p += HFIXEDSZ;
209 #else
210         /* Bind 4 interface w/o HFIXEDSZ */
211         p += sizeof(HEADER);
212 #endif
213         status = dn_expand( reply, reply+len, p, host, sizeof(host));
214 }]])],[$1=yes],[$1=no])
215
216         LIBS="$ol_LIBS"
217 ])
218
219         if test $$1 = yes ; then
220                 ol_cv_lib_resolver=ifelse($2,,yes,$2)
221         fi
222 fi
223 ])
224 dnl --------------------------------------------------------------------
225 dnl Try to locate appropriate library
226 AC_DEFUN([OL_RESOLVER_LINK],
227 [ol_cv_lib_resolver=no
228 OL_RESOLVER_TRY(ol_cv_resolver_none)
229 OL_RESOLVER_TRY(ol_cv_resolver_resolv,[-lresolv])
230 OL_RESOLVER_TRY(ol_cv_resolver_bind,[-lbind])
231 ])
232 dnl
233 dnl ====================================================================
234 dnl Berkeley DB macros
235 dnl
236 dnl --------------------------------------------------------------------
237 dnl Try to link
238 AC_DEFUN([OL_BERKELEY_DB_TRY],
239 [if test $ol_cv_lib_db = no ; then
240         AC_CACHE_CHECK([for Berkeley DB link (]ifelse($2,,default,$2)[)],[$1],
241 [
242         ol_DB_LIB=ifelse($2,,,$2)
243         ol_LIBS=$LIBS
244         LIBS="$ol_DB_LIB $LTHREAD_LIBS $LIBS"
245
246         AC_LINK_IFELSE([AC_LANG_PROGRAM([[
247 #ifdef HAVE_DB_185_H
248 # include <db_185.h>
249 #else
250 # include <db.h>
251 #endif
252
253 #ifndef DB_VERSION_MAJOR
254 # define DB_VERSION_MAJOR 1
255 #endif
256
257 #ifndef NULL
258 #define NULL ((void*)0)
259 #endif
260 ]], [[
261 #if DB_VERSION_MAJOR > 1
262         {
263                 char *version;
264                 int major, minor, patch;
265
266                 version = db_version( &major, &minor, &patch );
267
268                 if( major != DB_VERSION_MAJOR ||
269                         minor < DB_VERSION_MINOR )
270                 {
271                         printf("Berkeley DB version mismatch\n"
272                                 "\theader: %s\n\tlibrary: %s\n",
273                                 DB_VERSION_STRING, version);
274                         return 1;
275                 }
276         }
277 #endif
278
279 #if DB_VERSION_MAJOR > 2
280         db_env_create( NULL, 0 );
281 #elif DB_VERSION_MAJOR > 1
282         db_appexit( NULL );
283 #else
284         (void) dbopen( NULL, 0, 0, 0, NULL);
285 #endif
286 ]])],[$1=yes],[$1=no])
287
288         LIBS="$ol_LIBS"
289 ])
290
291         if test $$1 = yes ; then
292                 ol_cv_lib_db=ifelse($2,,yes,$2)
293         fi
294 fi
295 ])
296 dnl
297 dnl --------------------------------------------------------------------
298 dnl Try to locate appropriate library
299 AC_DEFUN([OL_BERKELEY_DB_LINK],
300 [ol_cv_lib_db=no
301 OL_BERKELEY_DB_TRY(ol_cv_db_none)
302 OL_BERKELEY_DB_TRY(ol_cv_db_db43,[-ldb43])
303 OL_BERKELEY_DB_TRY(ol_cv_db_db_43,[-ldb-43])
304 OL_BERKELEY_DB_TRY(ol_cv_db_db_4_dot_3,[-ldb-4.3])
305 OL_BERKELEY_DB_TRY(ol_cv_db_db_4_3,[-ldb-4-3])
306 OL_BERKELEY_DB_TRY(ol_cv_db_db42,[-ldb42])
307 OL_BERKELEY_DB_TRY(ol_cv_db_db_42,[-ldb-42])
308 OL_BERKELEY_DB_TRY(ol_cv_db_db_4_dot_2,[-ldb-4.2])
309 OL_BERKELEY_DB_TRY(ol_cv_db_db_4_2,[-ldb-4-2])
310 OL_BERKELEY_DB_TRY(ol_cv_db_db_4,[-ldb-4])
311 OL_BERKELEY_DB_TRY(ol_cv_db_db4,[-ldb4])
312 OL_BERKELEY_DB_TRY(ol_cv_db_db,[-ldb])
313 OL_BERKELEY_DB_TRY(ol_cv_db_db41,[-ldb41])
314 OL_BERKELEY_DB_TRY(ol_cv_db_db_41,[-ldb-41])
315 OL_BERKELEY_DB_TRY(ol_cv_db_db_4_dot_1,[-ldb-4.1])
316 OL_BERKELEY_DB_TRY(ol_cv_db_db_4_1,[-ldb-4-1])
317 OL_BERKELEY_DB_TRY(ol_cv_db_db3,[-ldb3])
318 OL_BERKELEY_DB_TRY(ol_cv_db_db_3,[-ldb-3])
319 OL_BERKELEY_DB_TRY(ol_cv_db_db2,[-ldb2])
320 OL_BERKELEY_DB_TRY(ol_cv_db_db_2,[-ldb-2])
321 OL_BERKELEY_DB_TRY(ol_cv_db_db1,[-ldb1])
322 OL_BERKELEY_DB_TRY(ol_cv_db_db_1,[-ldb-1])
323 ])
324 dnl
325 dnl --------------------------------------------------------------------
326 dnl Check if Berkeley DB version
327 AC_DEFUN([OL_BERKELEY_DB_VERSION],
328 [AC_CACHE_CHECK([for Berkeley DB version match], [ol_cv_berkeley_db_version], [
329         ol_LIBS="$LIBS"
330         LIBS="$LTHREAD_LIBS $LIBS"
331         if test $ol_cv_lib_db != yes ; then
332                 LIBS="$ol_cv_lib_db $LIBS"
333         fi
334
335         AC_RUN_IFELSE([AC_LANG_SOURCE([[
336 #ifdef HAVE_DB_185_H
337         choke me;
338 #else
339 #include <db.h>
340 #endif
341 #ifndef DB_VERSION_MAJOR
342 # define DB_VERSION_MAJOR 1
343 #endif
344 #ifndef NULL
345 #define NULL ((void *)0)
346 #endif
347 main()
348 {
349 #if DB_VERSION_MAJOR > 1
350         char *version;
351         int major, minor, patch;
352
353         version = db_version( &major, &minor, &patch );
354
355         if( major != DB_VERSION_MAJOR ||
356                 minor != DB_VERSION_MINOR ||
357                 patch != DB_VERSION_PATCH )
358         {
359                 printf("Berkeley DB version mismatch\n"
360                         "\theader: %s\n\tlibrary: %s\n",
361                         DB_VERSION_STRING, version);
362                 return 1;
363         }
364 #endif
365
366         return 0;
367 }]])],[ol_cv_berkeley_db_version=yes],[ol_cv_berkeley_db_version=no],[ol_cv_berkeley_db_version=cross])
368
369         LIBS="$ol_LIBS"
370 ])
371
372         if test $ol_cv_berkeley_db_version = no ; then
373                 AC_MSG_ERROR([Berkeley DB version mismatch])
374         fi
375 ])dnl
376 dnl
377 dnl --------------------------------------------------------------------
378 dnl Check if Berkeley DB supports DB_THREAD
379 AC_DEFUN([OL_BERKELEY_DB_THREAD],
380 [AC_CACHE_CHECK([for Berkeley DB thread support], [ol_cv_berkeley_db_thread], [
381         ol_LIBS="$LIBS"
382         LIBS="$LTHREAD_LIBS $LIBS"
383         if test $ol_cv_lib_db != yes ; then
384                 LIBS="$ol_cv_lib_db $LIBS"
385         fi
386
387         AC_RUN_IFELSE([AC_LANG_SOURCE([[
388 #ifdef HAVE_DB_185_H
389         choke me;
390 #else
391 #include <db.h>
392 #endif
393 #ifndef NULL
394 #define NULL ((void *)0)
395 #endif
396 main()
397 {
398         int rc;
399         u_int32_t flags = DB_CREATE |
400 #ifdef DB_PRIVATE
401                 DB_PRIVATE |
402 #endif
403                 DB_THREAD;
404
405 #if DB_VERSION_MAJOR > 2
406         DB_ENV *env = NULL;
407
408         rc = db_env_create( &env, 0 );
409
410         flags |= DB_INIT_MPOOL;
411 #ifdef DB_MPOOL_PRIVATE
412         flags |= DB_MPOOL_PRIVATE;
413 #endif
414
415         if( rc ) {
416                 printf("BerkeleyDB: %s\n", db_strerror(rc) );
417                 return rc;
418         }
419
420 #if (DB_VERSION_MAJOR > 3) || (DB_VERSION_MINOR >= 1)
421         rc = env->open( env, NULL, flags, 0 );
422 #else
423         rc = env->open( env, NULL, NULL, flags, 0 );
424 #endif
425
426         if ( rc == 0 ) {
427                 rc = env->close( env, 0 );
428         }
429
430         if( rc ) {
431                 printf("BerkeleyDB: %s\n", db_strerror(rc) );
432                 return rc;
433         }
434
435 #else
436         DB_ENV env;
437         memset( &env, '\0', sizeof(env) );
438
439         rc = db_appinit( NULL, NULL, &env, flags );
440
441         if( rc == 0 ) {
442                 db_appexit( &env );
443         }
444
445         unlink("__db_mpool.share");
446         unlink("__db_lock.share");
447 #endif
448
449         return rc;
450 }]])],[ol_cv_berkeley_db_thread=yes],[ol_cv_berkeley_db_thread=no],[ol_cv_berkeley_db_thread=cross])
451
452         LIBS="$ol_LIBS"
453 ])
454
455         if test $ol_cv_berkeley_db_thread != no ; then
456                 AC_DEFINE(HAVE_BERKELEY_DB_THREAD, 1,
457                         [define if Berkeley DB has DB_THREAD support])
458         fi
459 ])dnl
460 dnl
461 dnl --------------------------------------------------------------------
462 dnl Find any DB
463 AC_DEFUN([OL_BERKELEY_DB],
464 [ol_cv_berkeley_db=no
465 AC_CHECK_HEADERS(db.h)
466 if test $ac_cv_header_db_h = yes; then
467         OL_BERKELEY_DB_LINK
468         if test "$ol_cv_lib_db" != no ; then
469                 ol_cv_berkeley_db=yes
470                 OL_BERKELEY_DB_VERSION
471                 OL_BERKELEY_DB_THREAD
472         fi
473 fi
474 ])
475 dnl --------------------------------------------------------------------
476 dnl Check for version compatility with back-bdb
477 AC_DEFUN([OL_BDB_COMPAT],
478 [AC_CACHE_CHECK([Berkeley DB version for BDB/HDB backends], [ol_cv_bdb_compat],[
479         AC_EGREP_CPP(__db_version_compat,[
480 #include <db.h>
481
482  /* this check could be improved */
483 #ifndef DB_VERSION_MAJOR
484 #       define DB_VERSION_MAJOR 1
485 #endif
486 #ifndef DB_VERSION_MINOR
487 #       define DB_VERSION_MINOR 0
488 #endif
489
490 /* require 4.2 or later */
491 #if (DB_VERSION_MAJOR >= 4) && (DB_VERSION_MINOR >= 2)
492         __db_version_compat
493 #endif
494         ], [ol_cv_bdb_compat=yes], [ol_cv_bdb_compat=no])])
495 ])
496
497 dnl --------------------------------------------------------------------
498 dnl Find old Berkeley DB 1.85/1.86
499 AC_DEFUN([OL_BERKELEY_COMPAT_DB],
500 [AC_CHECK_HEADERS(db_185.h db.h)
501 if test $ac_cv_header_db_185_h = yes -o $ac_cv_header_db_h = yes; then
502         AC_CACHE_CHECK([if Berkeley DB header compatibility], [ol_cv_header_db1],[
503                 AC_EGREP_CPP(__db_version_1,[
504 #if HAVE_DB_185_H
505 #       include <db_185.h>
506 #else
507 #       include <db.h>
508 #endif
509
510  /* this check could be improved */
511 #ifndef DB_VERSION_MAJOR
512 #       define DB_VERSION_MAJOR 1
513 #endif
514
515 #if DB_VERSION_MAJOR == 1 
516         __db_version_1
517 #endif
518 ],      [ol_cv_header_db1=yes], [ol_cv_header_db1=no])])
519
520         if test $ol_cv_header_db1 = yes ; then
521                 OL_BERKELEY_DB_LINK
522                 if test "$ol_cv_lib_db" != no ; then
523                         ol_cv_berkeley_db=yes
524                 fi
525         fi
526 fi
527 ])
528 dnl
529 dnl ====================================================================
530 dnl Check if GDBM library exists
531 dnl Check for gdbm_open in standard libraries or -lgdbm
532 dnl
533 dnl defines ol_cv_lib_gdbm to 'yes' or '-lgdbm' or 'no'
534 dnl             'yes' implies gdbm_open is in $LIBS
535 dnl
536 dnl uses:
537 dnl             AC_CHECK_FUNC(gdbm_open)
538 dnl             AC_CHECK_LIB(gdbm,gdbm_open)
539 dnl
540 AC_DEFUN([OL_LIB_GDBM],
541 [AC_CACHE_CHECK(for GDBM library, [ol_cv_lib_gdbm],
542 [       ol_LIBS="$LIBS"
543         AC_CHECK_FUNC(gdbm_open,[ol_cv_lib_gdbm=yes], [
544                 AC_CHECK_LIB(gdbm,gdbm_open,[ol_cv_lib_gdbm=-lgdbm],[ol_cv_lib_gdbm=no])
545         ])
546         LIBS="$ol_LIBS"
547 ])
548 ])dnl
549 dnl
550 dnl --------------------------------------------------------------------
551 dnl Check if GDBM exists
552 dnl
553 dnl defines ol_cv_gdbm to 'yes' or 'no'
554 dnl 
555 dnl uses:
556 dnl             OL_LIB_GDBM
557 dnl             AC_CHECK_HEADERS(gdbm.h)
558 dnl
559 AC_DEFUN([OL_GDBM],
560 [AC_REQUIRE([OL_LIB_GDBM])
561  AC_CHECK_HEADERS(gdbm.h)
562  AC_CACHE_CHECK(for db, [ol_cv_gdbm], [
563         if test $ol_cv_lib_gdbm = no -o $ac_cv_header_gdbm_h = no ; then
564                 ol_cv_gdbm=no
565         else
566                 ol_cv_gdbm=yes
567         fi
568 ])
569  if test $ol_cv_gdbm = yes ; then
570         AC_DEFINE(HAVE_GDBM,1, [define if GNU DBM is available])
571  fi
572 ])dnl
573 dnl
574 dnl ====================================================================
575 dnl Check if MDBM library exists
576 dnl Check for mdbm_open in standard libraries or -lmdbm
577 dnl
578 dnl defines ol_cv_lib_mdbm to 'yes' or '-lmdbm' or 'no'
579 dnl             'yes' implies mdbm_open is in $LIBS
580 dnl
581 dnl uses:
582 dnl             AC_CHECK_FUNC(mdbm_set_chain)
583 dnl             AC_CHECK_LIB(mdbm,mdbm_set_chain)
584 dnl
585 AC_DEFUN([OL_LIB_MDBM],
586 [AC_CACHE_CHECK(for MDBM library, [ol_cv_lib_mdbm],
587 [       ol_LIBS="$LIBS"
588         AC_CHECK_FUNC(mdbm_set_chain,[ol_cv_lib_mdbm=yes], [
589                 AC_CHECK_LIB(mdbm,mdbm_set_chain,[ol_cv_lib_mdbm=-lmdbm],[ol_cv_lib_mdbm=no])
590         ])
591         LIBS="$ol_LIBS"
592 ])
593 ])dnl
594 dnl
595 dnl --------------------------------------------------------------------
596 dnl Check if MDBM exists
597 dnl
598 dnl defines ol_cv_mdbm to 'yes' or 'no'
599 dnl 
600 dnl uses:
601 dnl             OL_LIB_MDBM
602 dnl             AC_CHECK_HEADERS(mdbm.h)
603 dnl
604 AC_DEFUN([OL_MDBM],
605 [AC_REQUIRE([OL_LIB_MDBM])
606  AC_CHECK_HEADERS(mdbm.h)
607  AC_CACHE_CHECK(for db, [ol_cv_mdbm], [
608         if test $ol_cv_lib_mdbm = no -o $ac_cv_header_mdbm_h = no ; then
609                 ol_cv_mdbm=no
610         else
611                 ol_cv_mdbm=yes
612         fi
613 ])
614  if test $ol_cv_mdbm = yes ; then
615         AC_DEFINE(HAVE_MDBM,1, [define if MDBM is available])
616  fi
617 ])dnl
618 dnl
619 dnl ====================================================================
620 dnl Check if NDBM library exists
621 dnl Check for dbm_open in standard libraries or -lndbm or -ldbm
622 dnl
623 dnl defines ol_cv_lib_ndbm to 'yes' or '-lndbm' or -ldbm or 'no'
624 dnl             'yes' implies ndbm_open is in $LIBS
625 dnl
626 dnl uses:
627 dnl             AC_CHECK_FUNC(dbm_open)
628 dnl             AC_CHECK_LIB(ndbm,dbm_open)
629 dnl             AC_CHECK_LIB(dbm,dbm_open)
630 dnl
631 dnl restrictions:
632 dnl             should also check SVR4 case: dbm_open() in -lucb but that
633 dnl             would requiring dealing with -L/usr/ucblib
634 dnl
635 AC_DEFUN([OL_LIB_NDBM],
636 [AC_CACHE_CHECK(for NDBM library, [ol_cv_lib_ndbm],
637 [       ol_LIBS="$LIBS"
638         AC_CHECK_FUNC(dbm_open,[ol_cv_lib_ndbm=yes], [
639                 AC_CHECK_LIB(ndbm,dbm_open,[ol_cv_lib_ndbm=-lndbm], [
640                         AC_CHECK_LIB(dbm,dbm_open,[ol_cv_lib_ndbm=-ldbm],
641                                 [ol_cv_lib_ndbm=no])dnl
642                 ])
643         ])
644         LIBS="$ol_LIBS"
645 ])
646 ])dnl
647 dnl
648 dnl --------------------------------------------------------------------
649 dnl Check if NDBM exists
650 dnl
651 dnl defines ol_cv_ndbm to 'yes' or 'no'
652 dnl 
653 dnl uses:
654 dnl             OL_LIB_NDBM
655 dnl             AC_CHECK_HEADERS(ndbm.h)
656 dnl
657 dnl restrictions:
658 dnl             Doesn't handle SVR4 case (see above)
659 dnl
660 AC_DEFUN([OL_NDBM],
661 [AC_REQUIRE([OL_LIB_NDBM])
662  AC_CHECK_HEADERS(ndbm.h)
663  AC_CACHE_CHECK(for db, [ol_cv_ndbm], [
664         if test $ol_cv_lib_ndbm = no -o $ac_cv_header_ndbm_h = no ; then
665                 ol_cv_ndbm=no
666         else
667                 ol_cv_ndbm=yes
668         fi
669 ])
670  if test $ol_cv_ndbm = yes ; then
671         AC_DEFINE(HAVE_NDBM,1, [define if NDBM is available])
672  fi
673 ])dnl
674 dnl
675 dnl ====================================================================
676 dnl Check POSIX Thread version 
677 dnl
678 dnl defines ol_cv_pthread_version to 4, 5, 6, 7, 8, 10, depending on the
679 dnl     version of the POSIX.4a Draft that is implemented.
680 dnl     10 == POSIX.4a Final == POSIX.1c-1996 for our purposes.
681 dnl     Existence of pthread.h should be tested separately.
682 dnl
683 dnl tests:
684 dnl     pthread_detach() was dropped in Draft 8, it is present
685 dnl             in every other version
686 dnl     PTHREAD_CREATE_UNDETACHED is only in Draft 7, it was called
687 dnl             PTHREAD_CREATE_JOINABLE after that
688 dnl     pthread_attr_create was renamed to pthread_attr_init in Draft 6.
689 dnl             Draft 6-10 has _init, Draft 4-5 has _create.
690 dnl     pthread_attr_default was dropped in Draft 6, only 4 and 5 have it
691 dnl     PTHREAD_MUTEX_INITIALIZER was introduced in Draft 5. It's not
692 dnl             interesting to us because we don't try to statically
693 dnl             initialize mutexes. 5-10 has it.
694 dnl
695 dnl Draft 9 and 10 are equivalent for our purposes.
696 dnl
697 AC_DEFUN([OL_POSIX_THREAD_VERSION],
698 [AC_CACHE_CHECK([POSIX thread version],[ol_cv_pthread_version],[
699         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
700 #               include <pthread.h>
701         ]], [[
702                 int i = PTHREAD_CREATE_JOINABLE;
703         ]])],[
704         AC_EGREP_HEADER(pthread_detach,pthread.h,
705         ol_cv_pthread_version=10, ol_cv_pthread_version=8)],[
706         AC_EGREP_CPP(draft7,[
707 #               include <pthread.h>
708 #               ifdef PTHREAD_CREATE_UNDETACHED
709                 draft7
710 #               endif
711         ], ol_cv_pthread_version=7, [
712         AC_EGREP_HEADER(pthread_attr_init,pthread.h,
713         ol_cv_pthread_version=6, [
714         AC_EGREP_CPP(draft5,[
715 #               include <pthread.h>
716 #ifdef          PTHREAD_MUTEX_INITIALIZER
717                 draft5
718 #endif
719         ], ol_cv_pthread_version=5, ol_cv_pthread_version=4) ]) ]) ])
720 ])
721 ])dnl
722 dnl
723 dnl --------------------------------------------------------------------
724 AC_DEFUN([OL_PTHREAD_TEST_INCLUDES], [[
725 /* pthread test headers */
726 #include <pthread.h>
727 #if HAVE_PTHREADS < 7
728 #include <errno.h>
729 #endif
730 #ifndef NULL
731 #define NULL (void*)0
732 #endif
733
734 static void *task(p)
735         void *p;
736 {
737         return (void *) (p == NULL);
738 }
739 ]])
740 AC_DEFUN([OL_PTHREAD_TEST_FUNCTION],[[
741         /* pthread test function */
742 #ifndef PTHREAD_CREATE_DETACHED
743 #define PTHREAD_CREATE_DETACHED 1
744 #endif
745         pthread_t t;
746         int status;
747         int detach = PTHREAD_CREATE_DETACHED;
748
749 #if HAVE_PTHREADS > 4
750         /* Final pthreads */
751         pthread_attr_t attr;
752
753         status = pthread_attr_init(&attr);
754         if( status ) return status;
755
756 #if HAVE_PTHREADS < 7
757         status = pthread_attr_setdetachstate(&attr, &detach);
758         if( status < 0 ) status = errno;
759 #else
760         status = pthread_attr_setdetachstate(&attr, detach);
761 #endif
762         if( status ) return status;
763         status = pthread_create( &t, &attr, task, NULL );
764 #if HAVE_PTHREADS < 7
765         if( status < 0 ) status = errno;
766 #endif
767         if( status ) return status;
768 #else
769         /* Draft 4 pthreads */
770         status = pthread_create( &t, pthread_attr_default, task, NULL );
771         if( status ) return errno;
772
773         /* give thread a chance to complete */
774         /* it should remain joinable and hence detachable */
775         sleep( 1 );
776
777         status = pthread_detach( &t );
778         if( status ) return errno;
779 #endif
780
781 #ifdef HAVE_LINUX_THREADS
782         pthread_kill_other_threads_np();
783 #endif
784
785         return 0;
786 ]])
787
788 AC_DEFUN([OL_PTHREAD_TEST_PROGRAM],
789 [OL_PTHREAD_TEST_INCLUDES
790
791 int main(argc, argv)
792         int argc;
793         char **argv;
794 {
795 OL_PTHREAD_TEST_FUNCTION
796 }
797 ])
798 dnl --------------------------------------------------------------------
799 AC_DEFUN([OL_PTHREAD_TRY], [# Pthread try link: $1 ($2)
800 if test "$ol_link_threads" = no ; then
801         # try $1
802         AC_CACHE_CHECK([for pthread link with $1], [$2], [
803                 # save the flags
804                 ol_LIBS="$LIBS"
805                 LIBS="$1 $LIBS"
806
807                 AC_RUN_IFELSE([OL_PTHREAD_TEST_PROGRAM],
808                         [$2=yes],
809                         [$2=no],
810                         [AC_TRY_LINK(OL_PTHREAD_TEST_INCLUDES,OL_PTHREAD_TEST_FUNCTION,
811                                 [$2=yes], [$2=no])])
812
813                 # restore the LIBS
814                 LIBS="$ol_LIBS"
815         ])
816
817         if test $$2 = yes ; then
818                 ol_link_pthreads="$1"
819                 ol_link_threads=posix
820         fi
821 fi
822 ])
823 dnl
824 dnl ====================================================================
825 dnl Check GNU Pth pthread Header
826 dnl
827 dnl defines ol_cv_header linux_threads to 'yes' or 'no'
828 dnl             'no' implies pthreads.h is not LinuxThreads or pthreads.h
829 dnl             doesn't exists.  Existance of pthread.h should separately
830 dnl             checked.
831 dnl 
832 AC_DEFUN([OL_HEADER_GNU_PTH_PTHREAD_H], [
833         AC_CACHE_CHECK([for GNU Pth pthread.h],
834                 [ol_cv_header_gnu_pth_pthread_h],
835                 [AC_EGREP_CPP(__gnu_pth__,
836                         [#include <pthread.h>
837 #ifdef _POSIX_THREAD_IS_GNU_PTH
838         __gnu_pth__;
839 #endif
840 ],
841                         [ol_cv_header_gnu_pth_pthread_h=yes],
842                         [ol_cv_header_gnu_pth_pthread_h=no])
843                 ])
844 ])dnl
845 dnl ====================================================================
846 dnl Check for NT Threads
847 AC_DEFUN([OL_NT_THREADS], [
848         AC_CHECK_FUNC(_beginthread)
849
850         if test $ac_cv_func__beginthread = yes ; then
851                 AC_DEFINE(HAVE_NT_THREADS,1,[if you have NT Threads])
852                 ol_cv_nt_threads=yes
853         fi
854 ])
855 dnl ====================================================================
856 dnl Check LinuxThreads Header
857 dnl
858 dnl defines ol_cv_header linux_threads to 'yes' or 'no'
859 dnl             'no' implies pthreads.h is not LinuxThreads or pthreads.h
860 dnl             doesn't exists.  Existance of pthread.h should separately
861 dnl             checked.
862 dnl 
863 AC_DEFUN([OL_HEADER_LINUX_THREADS], [
864         AC_CACHE_CHECK([for LinuxThreads pthread.h],
865                 [ol_cv_header_linux_threads],
866                 [AC_EGREP_CPP(pthread_kill_other_threads_np,
867                         [#include <pthread.h>],
868                         [ol_cv_header_linux_threads=yes],
869                         [ol_cv_header_linux_threads=no])
870                 ])
871         if test $ol_cv_header_linux_threads = yes; then
872                 AC_DEFINE(HAVE_LINUX_THREADS,1,[if you have LinuxThreads])
873         fi
874 ])dnl
875 dnl --------------------------------------------------------------------
876 dnl     Check LinuxThreads Implementation
877 dnl
878 dnl     defines ol_cv_sys_linux_threads to 'yes' or 'no'
879 dnl     'no' implies pthreads implementation is not LinuxThreads.
880 dnl 
881 AC_DEFUN([OL_SYS_LINUX_THREADS], [
882         AC_CHECK_FUNCS(pthread_kill_other_threads_np)
883         AC_CACHE_CHECK([for LinuxThreads implementation],
884                 [ol_cv_sys_linux_threads],
885                 [ol_cv_sys_linux_threads=$ac_cv_func_pthread_kill_other_threads_np])
886 ])dnl
887 dnl
888 dnl --------------------------------------------------------------------
889 dnl Check LinuxThreads consistency
890 AC_DEFUN([OL_LINUX_THREADS], [
891         AC_REQUIRE([OL_HEADER_LINUX_THREADS])
892         AC_REQUIRE([OL_SYS_LINUX_THREADS])
893         AC_CACHE_CHECK([for LinuxThreads consistency], [ol_cv_linux_threads], [
894                 if test $ol_cv_header_linux_threads = yes -a \
895                         $ol_cv_sys_linux_threads = yes; then
896                         ol_cv_linux_threads=yes
897                 elif test $ol_cv_header_linux_threads = no -a \
898                         $ol_cv_sys_linux_threads = no; then
899                         ol_cv_linux_threads=no
900                 else
901                         ol_cv_linux_threads=error
902                 fi
903         ])
904 ])dnl
905 dnl
906 dnl ====================================================================
907 dnl Check for POSIX Regex
908 AC_DEFUN([OL_POSIX_REGEX], [
909 AC_CACHE_CHECK([for compatible POSIX regex],ol_cv_c_posix_regex,[
910         AC_RUN_IFELSE([AC_LANG_SOURCE([[
911 #include <sys/types.h>
912 #include <regex.h>
913 static char *pattern, *string;
914 main()
915 {
916         int rc;
917         regex_t re;
918
919         pattern = "^A";
920
921         if(regcomp(&re, pattern, 0)) {
922                 return -1;
923         }
924         
925         string = "ALL MATCH";
926         
927         rc = regexec(&re, string, 0, (void*)0, 0);
928
929         regfree(&re);
930
931         return rc;
932 }]])],[ol_cv_c_posix_regex=yes],[ol_cv_c_posix_regex=no],[ol_cv_c_posix_regex=cross])])
933 ])
934 dnl
935 dnl ====================================================================
936 dnl Check if toupper() requires islower() to be called first
937 AC_DEFUN([OL_C_UPPER_LOWER],
938 [AC_CACHE_CHECK([if toupper() requires islower()],ol_cv_c_upper_lower,[
939         AC_RUN_IFELSE([AC_LANG_SOURCE([[
940 #include <ctype.h>
941 main()
942 {
943         if ('C' == toupper('C'))
944                 exit(0);
945         else
946                 exit(1);
947 }]])],[ol_cv_c_upper_lower=no],[ol_cv_c_upper_lower=yes],[ol_cv_c_upper_lower=safe])])
948 if test $ol_cv_c_upper_lower != no ; then
949         AC_DEFINE(C_UPPER_LOWER,1, [define if toupper() requires islower()])
950 fi
951 ])
952 dnl
953 dnl ====================================================================
954 dnl Error string checks
955 dnl
956 dnl Check for declaration of sys_errlist in one of stdio.h and errno.h.
957 dnl Declaration of sys_errlist on BSD4.4 interferes with our declaration.
958 dnl Reported by Keith Bostic.
959 AC_DEFUN([OL_SYS_ERRLIST],
960 [AC_CACHE_CHECK([declaration of sys_errlist],ol_cv_dcl_sys_errlist,[
961         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
962 #include <stdio.h>
963 #include <sys/types.h>
964 #include <errno.h>
965 #ifdef WINNT
966 #include <stdlib.h>
967 #endif ]], [[char *c = (char *) *sys_errlist]])],[ol_cv_dcl_sys_errlist=yes
968         ol_cv_have_sys_errlist=yes],[ol_cv_dcl_sys_errlist=no])])
969 #
970 # It's possible (for near-UNIX clones) that sys_errlist doesn't exist
971 if test $ol_cv_dcl_sys_errlist = no ; then
972         AC_DEFINE(DECL_SYS_ERRLIST,1,
973                 [define if sys_errlist is not declared in stdio.h or errno.h])
974
975         AC_CACHE_CHECK([existence of sys_errlist],ol_cv_have_sys_errlist,[
976                 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <errno.h>]], [[char *c = (char *) *sys_errlist]])],[ol_cv_have_sys_errlist=yes],[ol_cv_have_sys_errlist=no])])
977 fi
978 if test $ol_cv_have_sys_errlist = yes ; then
979         AC_DEFINE(HAVE_SYS_ERRLIST,1,
980                 [define if you actually have sys_errlist in your libs])
981 fi
982 ])dnl
983 AC_DEFUN([OL_NONPOSIX_STRERROR_R],
984 [AC_CACHE_CHECK([non-posix strerror_r],ol_cv_nonposix_strerror_r,[
985         AC_EGREP_CPP(strerror_r,[#include <string.h>],
986                 ol_decl_strerror_r=yes, ol_decl_strerror_r=no)dnl
987
988         if test $ol_decl_strerror_r = yes ; then
989                 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <string.h>]], [[   /* from autoconf 2.59 */
990                                 char buf[100];
991                                 char x = *strerror_r (0, buf, sizeof buf);
992                                 char *p = strerror_r (0, buf, sizeof buf);
993                         ]])],[ol_cv_nonposix_strerror_r=yes],[ol_cv_nonposix_strerror_r=no])
994         else
995                 AC_RUN_IFELSE([AC_LANG_SOURCE([[
996                         main() {
997                                 char buf[100];
998                                 buf[0] = 0;
999                                 strerror_r( 1, buf, sizeof buf );
1000                                 exit( buf[0] == 0 );
1001                         }
1002                         ]])],[ol_cv_nonposix_strerror_r=yes],[ol_cv_nonposix_strerror=no],[ol_cv_nonposix_strerror=no])
1003         fi
1004         ])
1005 if test $ol_cv_nonposix_strerror_r = yes ; then
1006         AC_DEFINE(HAVE_NONPOSIX_STRERROR_R,1,
1007                 [define if strerror_r returns char* instead of int])
1008 fi
1009 ])dnl
1010 dnl
1011 AC_DEFUN([OL_STRERROR],
1012 [OL_SYS_ERRLIST dnl TEMPORARY
1013 AC_CHECK_FUNCS(strerror strerror_r)
1014 ol_cv_func_strerror_r=no
1015 if test "${ac_cv_func_strerror_r}" = yes ; then
1016         OL_NONPOSIX_STRERROR_R
1017 elif test "${ac_cv_func_strerror}" = no ; then
1018         OL_SYS_ERRLIST
1019 fi
1020 ])dnl
1021 dnl ====================================================================
1022 dnl Early MIPS compilers (used in Ultrix 4.2) don't like
1023 dnl "int x; int *volatile a = &x; *a = 0;"
1024 dnl     -- borrowed from PDKSH
1025 AC_DEFUN([OL_C_VOLATILE],
1026  [AC_CACHE_CHECK(if compiler understands volatile, ol_cv_c_volatile,
1027     [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[int x, y, z;]], [[volatile int a; int * volatile b = x ? &y : &z;
1028       /* Older MIPS compilers (eg., in Ultrix 4.2) don't like *b = 0 */
1029       *b = 0;]])],[ol_cv_c_volatile=yes],[ol_cv_c_volatile=no])])
1030   if test $ol_cv_c_volatile = yes; then
1031     : 
1032   else
1033     AC_DEFINE(volatile,,[define as empty if volatile is not supported])
1034   fi
1035  ])dnl
1036 dnl
1037 dnl ====================================================================
1038 dnl Look for fetch(3)
1039 AC_DEFUN([OL_LIB_FETCH],
1040 [ol_LIBS=$LIBS
1041 LIBS="-lfetch -lcom_err $LIBS"
1042 AC_CACHE_CHECK([fetch(3) library],ol_cv_lib_fetch,[
1043         AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1044 #include <sys/param.h>
1045 #include <stdio.h>
1046 #include <fetch.h>]], [[struct url *u = fetchParseURL("file:///"); ]])],[ol_cv_lib_fetch=yes],[ol_cv_lib_fetch=no])])
1047 LIBS=$ol_LIBS
1048 if test $ol_cv_lib_fetch != no ; then
1049         ol_link_fetch="-lfetch -lcom_err"
1050         AC_DEFINE(HAVE_FETCH,1,
1051                 [define if you actually have FreeBSD fetch(3)])
1052 fi
1053 ])dnl
1054 dnl
1055 dnl ====================================================================
1056 dnl Define inet_aton is available
1057 AC_DEFUN([OL_FUNC_INET_ATON],
1058  [AC_CACHE_CHECK([for inet_aton()], ol_cv_func_inet_aton,
1059     [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1060 #ifdef HAVE_SYS_TYPES_H
1061 #       include <sys/types.h>
1062 #endif
1063 #ifdef HAVE_SYS_SOCKET_H
1064 #       include <sys/socket.h>
1065 #       ifdef HAVE_SYS_SELECT_H
1066 #               include <sys/select.h>
1067 #       endif
1068 #       include <netinet/in.h>
1069 #       ifdef HAVE_ARPA_INET_H
1070 #               include <arpa/inet.h>
1071 #       endif
1072 #endif
1073 ]], [[struct in_addr in;
1074 int rc = inet_aton( "255.255.255.255", &in );]])],[ol_cv_func_inet_aton=yes],[ol_cv_func_inet_aton=no])])
1075   if test $ol_cv_func_inet_aton != no; then
1076     AC_DEFINE(HAVE_INET_ATON, 1,
1077                 [define to you inet_aton(3) is available])
1078   fi
1079  ])dnl
1080 dnl
1081 dnl ====================================================================
1082 dnl check no of arguments for ctime_r
1083 AC_DEFUN([OL_FUNC_CTIME_R_NARGS],
1084  [AC_CACHE_CHECK(number of arguments of ctime_r, ol_cv_func_ctime_r_nargs,
1085    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[time_t ti; char *buffer; ctime_r(&ti,buffer,32);]])],[ol_cv_func_ctime_r_nargs3=yes],[ol_cv_func_ctime_r_nargs3=no])
1086
1087         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[time_t ti; char *buffer; ctime_r(&ti,buffer);]])],[ol_cv_func_ctime_r_nargs2=yes],[ol_cv_func_ctime_r_nargs2=no])
1088
1089         if test $ol_cv_func_ctime_r_nargs3 = yes -a \
1090                 $ol_cv_func_ctime_r_nargs2 = no ; then
1091
1092                 ol_cv_func_ctime_r_nargs=3
1093
1094         elif test $ol_cv_func_ctime_r_nargs3 = no -a \
1095                 $ol_cv_func_ctime_r_nargs2 = yes ; then
1096
1097                 ol_cv_func_ctime_r_nargs=2
1098
1099         else
1100                 ol_cv_func_ctime_r_nargs=0
1101         fi
1102   ])
1103
1104   if test $ol_cv_func_ctime_r_nargs -gt 1 ; then
1105         AC_DEFINE_UNQUOTED(CTIME_R_NARGS, $ol_cv_func_ctime_r_nargs,
1106                 [set to the number of arguments ctime_r() expects])
1107   fi
1108 ])dnl
1109 dnl
1110 dnl --------------------------------------------------------------------
1111 dnl check return type of ctime_r()
1112 AC_DEFUN([OL_FUNC_CTIME_R_TYPE],
1113  [AC_CACHE_CHECK(return type of ctime_r, ol_cv_func_ctime_r_type,
1114    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[extern int (ctime_r)();]])],[ol_cv_func_ctime_r_type="int"],[ol_cv_func_ctime_r_type="charp"])
1115         ])
1116   if test $ol_cv_func_ctime_r_type = "int" ; then
1117         AC_DEFINE(CTIME_R_RETURNS_INT,1, [define if ctime_r() returns int])
1118   fi
1119 ])dnl
1120 dnl ====================================================================
1121 dnl check no of arguments for gethostbyname_r
1122 AC_DEFUN([OL_FUNC_GETHOSTBYNAME_R_NARGS],
1123  [AC_CACHE_CHECK(number of arguments of gethostbyname_r,
1124         ol_cv_func_gethostbyname_r_nargs,
1125         [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
1126 #include <sys/socket.h>
1127 #include <netinet/in.h>
1128 #include <netdb.h>
1129 #define BUFSIZE (sizeof(struct hostent)+10)]], [[struct hostent hent; char buffer[BUFSIZE];
1130                 int bufsize=BUFSIZE;int h_errno;
1131                 (void)gethostbyname_r("segovia.cs.purdue.edu", &hent,
1132                         buffer, bufsize, &h_errno);]])],[ol_cv_func_gethostbyname_r_nargs5=yes],[ol_cv_func_gethostbyname_r_nargs5=no])
1133
1134         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
1135 #include <sys/socket.h>
1136 #include <netinet/in.h>
1137 #include <netdb.h>
1138 #define BUFSIZE (sizeof(struct hostent)+10)]], [[struct hostent hent;struct hostent *rhent;
1139                 char buffer[BUFSIZE];
1140                 int bufsize=BUFSIZE;int h_errno;
1141                 (void)gethostbyname_r("localhost", &hent, buffer, bufsize,
1142                         &rhent, &h_errno);]])],[ol_cv_func_gethostbyname_r_nargs6=yes],[ol_cv_func_gethostbyname_r_nargs6=no])
1143
1144         if test $ol_cv_func_gethostbyname_r_nargs5 = yes -a \
1145                 $ol_cv_func_gethostbyname_r_nargs6 = no ; then
1146
1147                 ol_cv_func_gethostbyname_r_nargs=5
1148
1149         elif test $ol_cv_func_gethostbyname_r_nargs5 = no -a \
1150                 $ol_cv_func_gethostbyname_r_nargs6 = yes ; then
1151
1152                 ol_cv_func_gethostbyname_r_nargs=6
1153
1154         else
1155                 ol_cv_func_gethostbyname_r_nargs=0
1156         fi
1157   ])
1158   if test $ol_cv_func_gethostbyname_r_nargs -gt 1 ; then
1159         AC_DEFINE_UNQUOTED(GETHOSTBYNAME_R_NARGS,
1160                 $ol_cv_func_gethostbyname_r_nargs,
1161                 [set to the number of arguments gethostbyname_r() expects])
1162   fi
1163 ])dnl
1164 dnl
1165 dnl check no of arguments for gethostbyaddr_r
1166 AC_DEFUN([OL_FUNC_GETHOSTBYADDR_R_NARGS],
1167  [AC_CACHE_CHECK(number of arguments of gethostbyaddr_r,
1168         [ol_cv_func_gethostbyaddr_r_nargs],
1169         [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
1170 #include <sys/socket.h>
1171 #include <netinet/in.h>
1172 #include <netdb.h>
1173 #define BUFSIZE (sizeof(struct hostent)+10)]], [[struct hostent hent; char buffer[BUFSIZE]; 
1174             struct in_addr add;
1175             size_t alen=sizeof(struct in_addr);
1176             int bufsize=BUFSIZE;int h_errno;
1177                 (void)gethostbyaddr_r( (void *)&(add.s_addr),
1178                         alen, AF_INET, &hent, buffer, bufsize, &h_errno);]])],[ol_cv_func_gethostbyaddr_r_nargs7=yes],[ol_cv_func_gethostbyaddr_r_nargs7=no])
1179
1180         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
1181 #include <sys/socket.h>
1182 #include <netinet/in.h>
1183 #include <netdb.h>
1184 #define BUFSIZE (sizeof(struct hostent)+10)]], [[struct hostent hent;
1185                 struct hostent *rhent; char buffer[BUFSIZE]; 
1186                 struct in_addr add;
1187                 size_t alen=sizeof(struct in_addr);
1188                 int bufsize=BUFSIZE;int h_errno;
1189                 (void)gethostbyaddr_r( (void *)&(add.s_addr),
1190                         alen, AF_INET, &hent, buffer, bufsize, 
1191                         &rhent, &h_errno);]])],[ol_cv_func_gethostbyaddr_r_nargs8=yes],[ol_cv_func_gethostbyaddr_r_nargs8=no])
1192
1193         if test $ol_cv_func_gethostbyaddr_r_nargs7 = yes -a \
1194                 $ol_cv_func_gethostbyaddr_r_nargs8 = no ; then
1195
1196                 ol_cv_func_gethostbyaddr_r_nargs=7
1197
1198         elif test $ol_cv_func_gethostbyaddr_r_nargs7 = no -a \
1199                 $ol_cv_func_gethostbyaddr_r_nargs8 = yes ; then
1200
1201                 ol_cv_func_gethostbyaddr_r_nargs=8
1202
1203         else
1204                 ol_cv_func_gethostbyaddr_r_nargs=0
1205         fi
1206   ])
1207   if test $ol_cv_func_gethostbyaddr_r_nargs -gt 1 ; then
1208     AC_DEFINE_UNQUOTED(GETHOSTBYADDR_R_NARGS,
1209                 $ol_cv_func_gethostbyaddr_r_nargs,
1210                 [set to the number of arguments gethostbyaddr_r() expects])
1211   fi
1212 ])dnl
1213 dnl
1214 dnl --------------------------------------------------------------------
1215 dnl Check for Cyrus SASL version compatility
1216 AC_DEFUN([OL_SASL_COMPAT],
1217 [AC_CACHE_CHECK([Cyrus SASL library version], [ol_cv_sasl_compat],[
1218         AC_EGREP_CPP(__sasl_compat,[
1219 #ifdef HAVE_SASL_SASL_H
1220 #include <sasl/sasl.h>
1221 #else
1222 #include <sasl.h>
1223 #endif
1224
1225 /* Require 2.1.15+ */
1226 #if SASL_VERSION_MAJOR == 2  && SASL_VERSION_MINOR > 1
1227         char *__sasl_compat = "2.2+ or better okay (we guess)";
1228 #elif SASL_VERSION_MAJOR == 2  && SASL_VERSION_MINOR == 1 \
1229         && SASL_VERSION_STEP >=15
1230         char *__sasl_compat = "2.1.15+ or better okay";
1231 #endif
1232         ],      [ol_cv_sasl_compat=yes], [ol_cv_sasl_compat=no])])
1233 ])
1234 dnl ====================================================================
1235 dnl check for SSL compatibility
1236 AC_DEFUN([OL_SSL_COMPAT],
1237 [AC_CACHE_CHECK([OpenSSL library version (CRL checking capability)], [ol_cv_ssl_crl_compat],[
1238         AC_EGREP_CPP(__ssl_compat,[
1239 #ifdef HAVE_OPENSSL_SSL_H
1240 #include <openssl/ssl.h>
1241 #else
1242 #include <ssl.h>
1243 #endif
1244
1245 /* Require 0.9.7d+ */
1246 #if OPENSSL_VERSION_NUMBER >= 0x0090704fL
1247         char *__ssl_compat = "0.9.7d";
1248 #endif
1249         ],      [ol_cv_ssl_crl_compat=yes], [ol_cv_ssl_crl_compat=no])])
1250 ])