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