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