]> git.sur5r.net Git - openldap/blob - build/openldap.m4
2e0741444490487e4337c7750f04b2d5d5778146
[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-2013 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 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 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
551 #define DB_VERSION_MM   ((DB_VERSION_MAJOR<<8)|DB_VERSION_MINOR)
552
553 /* require 4.4 or later */
554 #if DB_VERSION_MM >= 0x0404
555         __db_version_compat
556 #endif
557         ], [ol_cv_bdb_compat=yes], [ol_cv_bdb_compat=no])])
558 ])
559
560 dnl
561 dnl ====================================================================
562 dnl Check POSIX Thread version 
563 dnl
564 dnl defines ol_cv_pthread_version to 4, 5, 6, 7, 8, 10, depending on the
565 dnl     version of the POSIX.4a Draft that is implemented.
566 dnl     10 == POSIX.4a Final == POSIX.1c-1996 for our purposes.
567 dnl     Existence of pthread.h should be tested separately.
568 dnl
569 dnl tests:
570 dnl     pthread_detach() was dropped in Draft 8, it is present
571 dnl             in every other version
572 dnl     PTHREAD_CREATE_UNDETACHED is only in Draft 7, it was called
573 dnl             PTHREAD_CREATE_JOINABLE after that
574 dnl     pthread_attr_create was renamed to pthread_attr_init in Draft 6.
575 dnl             Draft 6-10 has _init, Draft 4-5 has _create.
576 dnl     pthread_attr_default was dropped in Draft 6, only 4 and 5 have it
577 dnl     PTHREAD_MUTEX_INITIALIZER was introduced in Draft 5. It's not
578 dnl             interesting to us because we don't try to statically
579 dnl             initialize mutexes. 5-10 has it.
580 dnl
581 dnl Draft 9 and 10 are equivalent for our purposes.
582 dnl
583 AC_DEFUN([OL_POSIX_THREAD_VERSION],
584 [AC_CACHE_CHECK([POSIX thread version],[ol_cv_pthread_version],[
585         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
586 #               include <pthread.h>
587         ]], [[
588                 int i = PTHREAD_CREATE_JOINABLE;
589         ]])],[
590         AC_EGREP_HEADER(pthread_detach,pthread.h,
591         ol_cv_pthread_version=10, ol_cv_pthread_version=8)],[
592         AC_EGREP_CPP(draft7,[
593 #               include <pthread.h>
594 #               ifdef PTHREAD_CREATE_UNDETACHED
595                 draft7
596 #               endif
597         ], ol_cv_pthread_version=7, [
598         AC_EGREP_HEADER(pthread_attr_init,pthread.h,
599         ol_cv_pthread_version=6, [
600         AC_EGREP_CPP(draft5,[
601 #               include <pthread.h>
602 #ifdef          PTHREAD_MUTEX_INITIALIZER
603                 draft5
604 #endif
605         ], ol_cv_pthread_version=5, ol_cv_pthread_version=4) ]) ]) ])
606 ])
607 ])dnl
608 dnl
609 dnl --------------------------------------------------------------------
610 AC_DEFUN([OL_PTHREAD_TEST_INCLUDES], [[
611 /* pthread test headers */
612 #include <pthread.h>
613 #if HAVE_PTHREADS < 7
614 #include <errno.h>
615 #endif
616 #ifndef NULL
617 #define NULL (void*)0
618 #endif
619
620 static void *task(p)
621         void *p;
622 {
623         return (void *) (p == NULL);
624 }
625 ]])
626 AC_DEFUN([OL_PTHREAD_TEST_FUNCTION],[[
627         /* pthread test function */
628 #ifndef PTHREAD_CREATE_DETACHED
629 #define PTHREAD_CREATE_DETACHED 1
630 #endif
631         pthread_t t;
632         int status;
633         int detach = PTHREAD_CREATE_DETACHED;
634
635 #if HAVE_PTHREADS > 4
636         /* Final pthreads */
637         pthread_attr_t attr;
638
639         status = pthread_attr_init(&attr);
640         if( status ) return status;
641
642 #if HAVE_PTHREADS < 7
643         status = pthread_attr_setdetachstate(&attr, &detach);
644         if( status < 0 ) status = errno;
645 #else
646         status = pthread_attr_setdetachstate(&attr, detach);
647 #endif
648         if( status ) return status;
649         status = pthread_create( &t, &attr, task, NULL );
650 #if HAVE_PTHREADS < 7
651         if( status < 0 ) status = errno;
652 #endif
653         if( status ) return status;
654 #else
655         /* Draft 4 pthreads */
656         status = pthread_create( &t, pthread_attr_default, task, NULL );
657         if( status ) return errno;
658
659         /* give thread a chance to complete */
660         /* it should remain joinable and hence detachable */
661         sleep( 1 );
662
663         status = pthread_detach( &t );
664         if( status ) return errno;
665 #endif
666
667 #ifdef HAVE_LINUX_THREADS
668         pthread_kill_other_threads_np();
669 #endif
670
671         return 0;
672 ]])
673
674 AC_DEFUN([OL_PTHREAD_TEST_PROGRAM],
675 AC_LANG_SOURCE([OL_PTHREAD_TEST_INCLUDES
676
677 int main(argc, argv)
678         int argc;
679         char **argv;
680 {
681 OL_PTHREAD_TEST_FUNCTION
682 }
683 ]))
684 dnl --------------------------------------------------------------------
685 AC_DEFUN([OL_PTHREAD_TRY], [# Pthread try link: $1 ($2)
686 if test "$ol_link_threads" = no ; then
687         # try $1
688         AC_CACHE_CHECK([for pthread link with $1], [$2], [
689                 # save the flags
690                 ol_LIBS="$LIBS"
691                 LIBS="$1 $LIBS"
692
693                 AC_RUN_IFELSE([OL_PTHREAD_TEST_PROGRAM],
694                         [$2=yes],
695                         [$2=no],
696                         [AC_LINK_IFELSE([AC_LANG_PROGRAM(OL_PTHREAD_TEST_INCLUDES,
697                                 OL_PTHREAD_TEST_FUNCTION)],
698                                 [$2=yes], [$2=no])])
699
700                 # restore the LIBS
701                 LIBS="$ol_LIBS"
702         ])
703
704         if test $$2 = yes ; then
705                 ol_link_pthreads="$1"
706                 ol_link_threads=posix
707         fi
708 fi
709 ])
710 dnl
711 dnl ====================================================================
712 dnl Check GNU Pth pthread Header
713 dnl
714 dnl defines ol_cv_header linux_threads to 'yes' or 'no'
715 dnl             'no' implies pthreads.h is not LinuxThreads or pthreads.h
716 dnl             doesn't exists.  Existance of pthread.h should separately
717 dnl             checked.
718 dnl 
719 AC_DEFUN([OL_HEADER_GNU_PTH_PTHREAD_H], [
720         AC_CACHE_CHECK([for GNU Pth pthread.h],
721                 [ol_cv_header_gnu_pth_pthread_h],
722                 [AC_EGREP_CPP(__gnu_pth__,
723                         [#include <pthread.h>
724 #ifdef _POSIX_THREAD_IS_GNU_PTH
725         __gnu_pth__;
726 #endif
727 ],
728                         [ol_cv_header_gnu_pth_pthread_h=yes],
729                         [ol_cv_header_gnu_pth_pthread_h=no])
730                 ])
731 ])dnl
732 dnl ====================================================================
733 dnl Check for NT Threads
734 AC_DEFUN([OL_NT_THREADS], [
735         AC_CHECK_FUNC(_beginthread)
736
737         if test $ac_cv_func__beginthread = yes ; then
738                 AC_DEFINE(HAVE_NT_THREADS,1,[if you have NT Threads])
739                 ol_cv_nt_threads=yes
740         fi
741 ])
742 dnl ====================================================================
743 dnl Check LinuxThreads Header
744 dnl
745 dnl defines ol_cv_header linux_threads to 'yes' or 'no'
746 dnl             'no' implies pthreads.h is not LinuxThreads or pthreads.h
747 dnl             doesn't exists.  Existance of pthread.h should separately
748 dnl             checked.
749 dnl 
750 AC_DEFUN([OL_HEADER_LINUX_THREADS], [
751         AC_CACHE_CHECK([for LinuxThreads pthread.h],
752                 [ol_cv_header_linux_threads],
753                 [AC_EGREP_CPP(pthread_kill_other_threads_np,
754                         [#include <pthread.h>],
755                         [ol_cv_header_linux_threads=yes],
756                         [ol_cv_header_linux_threads=no])
757                 ])
758         if test $ol_cv_header_linux_threads = yes; then
759                 AC_DEFINE(HAVE_LINUX_THREADS,1,[if you have LinuxThreads])
760         fi
761 ])dnl
762 dnl --------------------------------------------------------------------
763 dnl     Check LinuxThreads Implementation
764 dnl
765 dnl     defines ol_cv_sys_linux_threads to 'yes' or 'no'
766 dnl     'no' implies pthreads implementation is not LinuxThreads.
767 dnl 
768 AC_DEFUN([OL_SYS_LINUX_THREADS], [
769         AC_CHECK_FUNCS(pthread_kill_other_threads_np)
770         AC_CACHE_CHECK([for LinuxThreads implementation],
771                 [ol_cv_sys_linux_threads],
772                 [ol_cv_sys_linux_threads=$ac_cv_func_pthread_kill_other_threads_np])
773 ])dnl
774 dnl
775 dnl --------------------------------------------------------------------
776 dnl Check LinuxThreads consistency
777 AC_DEFUN([OL_LINUX_THREADS], [
778         AC_REQUIRE([OL_HEADER_LINUX_THREADS])
779         AC_REQUIRE([OL_SYS_LINUX_THREADS])
780         AC_CACHE_CHECK([for LinuxThreads consistency], [ol_cv_linux_threads], [
781                 if test $ol_cv_header_linux_threads = yes &&
782                    test $ol_cv_sys_linux_threads = yes; then
783                         ol_cv_linux_threads=yes
784                 elif test $ol_cv_header_linux_threads = no &&
785                      test $ol_cv_sys_linux_threads = no; then
786                         ol_cv_linux_threads=no
787                 else
788                         ol_cv_linux_threads=error
789                 fi
790         ])
791 ])dnl
792 dnl
793 dnl ====================================================================
794 dnl Check for POSIX Regex
795 AC_DEFUN([OL_POSIX_REGEX], [
796 AC_CACHE_CHECK([for compatible POSIX regex],ol_cv_c_posix_regex,[
797         AC_RUN_IFELSE([AC_LANG_SOURCE([[
798 #include <sys/types.h>
799 #include <regex.h>
800 static char *pattern, *string;
801 main()
802 {
803         int rc;
804         regex_t re;
805
806         pattern = "^A";
807
808         if(regcomp(&re, pattern, 0)) {
809                 return -1;
810         }
811         
812         string = "ALL MATCH";
813         
814         rc = regexec(&re, string, 0, (void*)0, 0);
815
816         regfree(&re);
817
818         return rc;
819 }]])],[ol_cv_c_posix_regex=yes],[ol_cv_c_posix_regex=no],[ol_cv_c_posix_regex=cross])])
820 ])
821 dnl
822 dnl ====================================================================
823 dnl Check if toupper() requires islower() to be called first
824 AC_DEFUN([OL_C_UPPER_LOWER],
825 [AC_CACHE_CHECK([if toupper() requires islower()],ol_cv_c_upper_lower,[
826         AC_RUN_IFELSE([AC_LANG_SOURCE([[
827 #include <ctype.h>
828 main()
829 {
830         if ('C' == toupper('C'))
831                 exit(0);
832         else
833                 exit(1);
834 }]])],[ol_cv_c_upper_lower=no],[ol_cv_c_upper_lower=yes],[ol_cv_c_upper_lower=safe])])
835 if test $ol_cv_c_upper_lower != no ; then
836         AC_DEFINE(C_UPPER_LOWER,1, [define if toupper() requires islower()])
837 fi
838 ])
839 dnl
840 dnl ====================================================================
841 dnl Error string checks
842 dnl
843 dnl Check for declaration of sys_errlist in one of stdio.h and errno.h.
844 dnl Declaration of sys_errlist on BSD4.4 interferes with our declaration.
845 dnl Reported by Keith Bostic.
846 AC_DEFUN([OL_SYS_ERRLIST],
847 [AC_CACHE_CHECK([declaration of sys_errlist],ol_cv_dcl_sys_errlist,[
848         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
849 #include <stdio.h>
850 #include <sys/types.h>
851 #include <errno.h>
852 #ifdef _WIN32
853 #include <stdlib.h>
854 #endif ]], [[char *c = (char *) *sys_errlist]])],[ol_cv_dcl_sys_errlist=yes
855         ol_cv_have_sys_errlist=yes],[ol_cv_dcl_sys_errlist=no])])
856 #
857 # It's possible (for near-UNIX clones) that sys_errlist doesn't exist
858 if test $ol_cv_dcl_sys_errlist = no ; then
859         AC_DEFINE(DECL_SYS_ERRLIST,1,
860                 [define if sys_errlist is not declared in stdio.h or errno.h])
861
862         AC_CACHE_CHECK([existence of sys_errlist],ol_cv_have_sys_errlist,[
863                 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])])
864 fi
865 if test $ol_cv_have_sys_errlist = yes ; then
866         AC_DEFINE(HAVE_SYS_ERRLIST,1,
867                 [define if you actually have sys_errlist in your libs])
868 fi
869 ])dnl
870 AC_DEFUN([OL_NONPOSIX_STRERROR_R],
871 [AC_CACHE_CHECK([non-posix strerror_r],ol_cv_nonposix_strerror_r,[
872         AC_EGREP_CPP(strerror_r,[#include <string.h>],
873                 ol_decl_strerror_r=yes, ol_decl_strerror_r=no)dnl
874
875         if test $ol_decl_strerror_r = yes ; then
876                 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <string.h>]], [[   /* from autoconf 2.59 */
877                                 char buf[100];
878                                 char x = *strerror_r (0, buf, sizeof buf);
879                                 char *p = strerror_r (0, buf, sizeof buf);
880                         ]])],[ol_cv_nonposix_strerror_r=yes],[ol_cv_nonposix_strerror_r=no])
881         else
882                 AC_RUN_IFELSE([AC_LANG_SOURCE([[
883                         main() {
884                                 char buf[100];
885                                 buf[0] = 0;
886                                 strerror_r( 1, buf, sizeof buf );
887                                 exit( buf[0] == 0 );
888                         }
889                         ]])],[ol_cv_nonposix_strerror_r=yes],[ol_cv_nonposix_strerror=no],[ol_cv_nonposix_strerror=no])
890         fi
891         ])
892 if test $ol_cv_nonposix_strerror_r = yes ; then
893         AC_DEFINE(HAVE_NONPOSIX_STRERROR_R,1,
894                 [define if strerror_r returns char* instead of int])
895 fi
896 ])dnl
897 dnl
898 AC_DEFUN([OL_STRERROR],
899 [OL_SYS_ERRLIST dnl TEMPORARY
900 AC_CHECK_FUNCS(strerror strerror_r)
901 ol_cv_func_strerror_r=no
902 if test "${ac_cv_func_strerror_r}" = yes ; then
903         OL_NONPOSIX_STRERROR_R
904 elif test "${ac_cv_func_strerror}" = no ; then
905         OL_SYS_ERRLIST
906 fi
907 ])dnl
908 dnl ====================================================================
909 dnl Early MIPS compilers (used in Ultrix 4.2) don't like
910 dnl "int x; int *volatile a = &x; *a = 0;"
911 dnl     -- borrowed from PDKSH
912 AC_DEFUN([OL_C_VOLATILE],
913  [AC_CACHE_CHECK(if compiler understands volatile, ol_cv_c_volatile,
914     [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[int x, y, z;]], [[volatile int a; int * volatile b = x ? &y : &z;
915       /* Older MIPS compilers (eg., in Ultrix 4.2) don't like *b = 0 */
916       *b = 0;]])],[ol_cv_c_volatile=yes],[ol_cv_c_volatile=no])])
917   if test $ol_cv_c_volatile = yes; then
918     : 
919   else
920     AC_DEFINE(volatile,,[define as empty if volatile is not supported])
921   fi
922  ])dnl
923 dnl
924 dnl ====================================================================
925 dnl Look for fetch(3)
926 AC_DEFUN([OL_LIB_FETCH],
927 [ol_LIBS=$LIBS
928 LIBS="-lfetch -lcom_err $LIBS"
929 AC_CACHE_CHECK([fetch(3) library],ol_cv_lib_fetch,[
930         AC_LINK_IFELSE([AC_LANG_PROGRAM([[
931 #ifdef HAVE_SYS_PARAM_H
932 #include <sys/param.h>
933 #endif
934 #include <stdio.h>
935 #include <fetch.h>]], [[struct url *u = fetchParseURL("file:///"); ]])],[ol_cv_lib_fetch=yes],[ol_cv_lib_fetch=no])])
936 LIBS=$ol_LIBS
937 if test $ol_cv_lib_fetch != no ; then
938         ol_link_fetch="-lfetch -lcom_err"
939         AC_DEFINE(HAVE_FETCH,1,
940                 [define if you actually have FreeBSD fetch(3)])
941 fi
942 ])dnl
943 dnl
944 dnl ====================================================================
945 dnl Define inet_aton is available
946 AC_DEFUN([OL_FUNC_INET_ATON],
947  [AC_CACHE_CHECK([for inet_aton()], ol_cv_func_inet_aton,
948     [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
949 #ifdef HAVE_SYS_TYPES_H
950 #       include <sys/types.h>
951 #endif
952 #ifdef HAVE_SYS_SOCKET_H
953 #       include <sys/socket.h>
954 #       ifdef HAVE_SYS_SELECT_H
955 #               include <sys/select.h>
956 #       endif
957 #       include <netinet/in.h>
958 #       ifdef HAVE_ARPA_INET_H
959 #               include <arpa/inet.h>
960 #       endif
961 #endif
962 ]], [[struct in_addr in;
963 int rc = inet_aton( "255.255.255.255", &in );]])],[ol_cv_func_inet_aton=yes],[ol_cv_func_inet_aton=no])])
964   if test $ol_cv_func_inet_aton != no; then
965     AC_DEFINE(HAVE_INET_ATON, 1,
966                 [define to you inet_aton(3) is available])
967   fi
968  ])dnl
969 dnl
970 dnl ====================================================================
971 dnl check no of arguments for ctime_r
972 AC_DEFUN([OL_FUNC_CTIME_R_NARGS],
973  [AC_CACHE_CHECK(number of arguments of ctime_r, ol_cv_func_ctime_r_nargs,
974    [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])
975
976         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])
977
978         if test $ol_cv_func_ctime_r_nargs3 = yes &&
979            test $ol_cv_func_ctime_r_nargs2 = no ; then
980
981                 ol_cv_func_ctime_r_nargs=3
982
983         elif test $ol_cv_func_ctime_r_nargs3 = no &&
984              test $ol_cv_func_ctime_r_nargs2 = yes ; then
985
986                 ol_cv_func_ctime_r_nargs=2
987
988         else
989                 ol_cv_func_ctime_r_nargs=0
990         fi
991   ])
992
993   if test $ol_cv_func_ctime_r_nargs -gt 1 ; then
994         AC_DEFINE_UNQUOTED(CTIME_R_NARGS, $ol_cv_func_ctime_r_nargs,
995                 [set to the number of arguments ctime_r() expects])
996   fi
997 ])dnl
998 dnl
999 dnl --------------------------------------------------------------------
1000 dnl check return type of ctime_r()
1001 AC_DEFUN([OL_FUNC_CTIME_R_TYPE],
1002  [AC_CACHE_CHECK(return type of ctime_r, ol_cv_func_ctime_r_type,
1003    [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"])
1004         ])
1005   if test $ol_cv_func_ctime_r_type = "int" ; then
1006         AC_DEFINE(CTIME_R_RETURNS_INT,1, [define if ctime_r() returns int])
1007   fi
1008 ])dnl
1009 dnl ====================================================================
1010 dnl check no of arguments for gethostbyname_r
1011 AC_DEFUN([OL_FUNC_GETHOSTBYNAME_R_NARGS],
1012  [AC_CACHE_CHECK(number of arguments of gethostbyname_r,
1013         ol_cv_func_gethostbyname_r_nargs,
1014         [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
1015 #include <sys/socket.h>
1016 #include <netinet/in.h>
1017 #include <netdb.h>
1018 #define BUFSIZE (sizeof(struct hostent)+10)]], [[struct hostent hent; char buffer[BUFSIZE];
1019                 int bufsize=BUFSIZE;int h_errno;
1020                 (void)gethostbyname_r("segovia.cs.purdue.edu", &hent,
1021                         buffer, bufsize, &h_errno);]])],[ol_cv_func_gethostbyname_r_nargs5=yes],[ol_cv_func_gethostbyname_r_nargs5=no])
1022
1023         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
1024 #include <sys/socket.h>
1025 #include <netinet/in.h>
1026 #include <netdb.h>
1027 #define BUFSIZE (sizeof(struct hostent)+10)]], [[struct hostent hent;struct hostent *rhent;
1028                 char buffer[BUFSIZE];
1029                 int bufsize=BUFSIZE;int h_errno;
1030                 (void)gethostbyname_r("localhost", &hent, buffer, bufsize,
1031                         &rhent, &h_errno);]])],[ol_cv_func_gethostbyname_r_nargs6=yes],[ol_cv_func_gethostbyname_r_nargs6=no])
1032
1033         if test $ol_cv_func_gethostbyname_r_nargs5 = yes &&
1034            test $ol_cv_func_gethostbyname_r_nargs6 = no ; then
1035
1036                 ol_cv_func_gethostbyname_r_nargs=5
1037
1038         elif test $ol_cv_func_gethostbyname_r_nargs5 = no &&
1039              test $ol_cv_func_gethostbyname_r_nargs6 = yes ; then
1040
1041                 ol_cv_func_gethostbyname_r_nargs=6
1042
1043         else
1044                 ol_cv_func_gethostbyname_r_nargs=0
1045         fi
1046   ])
1047   if test $ol_cv_func_gethostbyname_r_nargs -gt 1 ; then
1048         AC_DEFINE_UNQUOTED(GETHOSTBYNAME_R_NARGS,
1049                 $ol_cv_func_gethostbyname_r_nargs,
1050                 [set to the number of arguments gethostbyname_r() expects])
1051   fi
1052 ])dnl
1053 dnl
1054 dnl check no of arguments for gethostbyaddr_r
1055 AC_DEFUN([OL_FUNC_GETHOSTBYADDR_R_NARGS],
1056  [AC_CACHE_CHECK(number of arguments of gethostbyaddr_r,
1057         [ol_cv_func_gethostbyaddr_r_nargs],
1058         [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
1059 #include <sys/socket.h>
1060 #include <netinet/in.h>
1061 #include <netdb.h>
1062 #define BUFSIZE (sizeof(struct hostent)+10)]], [[struct hostent hent; char buffer[BUFSIZE]; 
1063             struct in_addr add;
1064             size_t alen=sizeof(struct in_addr);
1065             int bufsize=BUFSIZE;int h_errno;
1066                 (void)gethostbyaddr_r( (void *)&(add.s_addr),
1067                         alen, AF_INET, &hent, buffer, bufsize, &h_errno);]])],[ol_cv_func_gethostbyaddr_r_nargs7=yes],[ol_cv_func_gethostbyaddr_r_nargs7=no])
1068
1069         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
1070 #include <sys/socket.h>
1071 #include <netinet/in.h>
1072 #include <netdb.h>
1073 #define BUFSIZE (sizeof(struct hostent)+10)]], [[struct hostent hent;
1074                 struct hostent *rhent; char buffer[BUFSIZE]; 
1075                 struct in_addr add;
1076                 size_t alen=sizeof(struct in_addr);
1077                 int bufsize=BUFSIZE;int h_errno;
1078                 (void)gethostbyaddr_r( (void *)&(add.s_addr),
1079                         alen, AF_INET, &hent, buffer, bufsize, 
1080                         &rhent, &h_errno);]])],[ol_cv_func_gethostbyaddr_r_nargs8=yes],[ol_cv_func_gethostbyaddr_r_nargs8=no])
1081
1082         if test $ol_cv_func_gethostbyaddr_r_nargs7 = yes &&
1083            test $ol_cv_func_gethostbyaddr_r_nargs8 = no ; then
1084
1085                 ol_cv_func_gethostbyaddr_r_nargs=7
1086
1087         elif test $ol_cv_func_gethostbyaddr_r_nargs7 = no &&
1088              test $ol_cv_func_gethostbyaddr_r_nargs8 = yes ; then
1089
1090                 ol_cv_func_gethostbyaddr_r_nargs=8
1091
1092         else
1093                 ol_cv_func_gethostbyaddr_r_nargs=0
1094         fi
1095   ])
1096   if test $ol_cv_func_gethostbyaddr_r_nargs -gt 1 ; then
1097     AC_DEFINE_UNQUOTED(GETHOSTBYADDR_R_NARGS,
1098                 $ol_cv_func_gethostbyaddr_r_nargs,
1099                 [set to the number of arguments gethostbyaddr_r() expects])
1100   fi
1101 ])dnl
1102 dnl
1103 dnl --------------------------------------------------------------------
1104 dnl Check for Cyrus SASL version compatility
1105 AC_DEFUN([OL_SASL_COMPAT],
1106 [AC_CACHE_CHECK([Cyrus SASL library version], [ol_cv_sasl_compat],[
1107         AC_EGREP_CPP(__sasl_compat,[
1108 #ifdef HAVE_SASL_SASL_H
1109 #include <sasl/sasl.h>
1110 #else
1111 #include <sasl.h>
1112 #endif
1113
1114 /* Require 2.1.15+ */
1115 #if SASL_VERSION_MAJOR == 2  && SASL_VERSION_MINOR > 1
1116         char *__sasl_compat = "2.2+ or better okay (we guess)";
1117 #elif SASL_VERSION_MAJOR == 2  && SASL_VERSION_MINOR == 1 \
1118         && SASL_VERSION_STEP >=15
1119         char *__sasl_compat = "2.1.15+ or better okay";
1120 #endif
1121         ],      [ol_cv_sasl_compat=yes], [ol_cv_sasl_compat=no])])
1122 ])
1123 dnl ====================================================================
1124 dnl check for SSL compatibility
1125 AC_DEFUN([OL_SSL_COMPAT],
1126 [AC_CACHE_CHECK([OpenSSL library version (CRL checking capability)],
1127         [ol_cv_ssl_crl_compat],[
1128                 AC_EGREP_CPP(__ssl_compat,[
1129 #ifdef HAVE_OPENSSL_SSL_H
1130 #include <openssl/ssl.h>
1131 #endif
1132
1133 /* Require 0.9.7d+ */
1134 #if OPENSSL_VERSION_NUMBER >= 0x0090704fL
1135         char *__ssl_compat = "0.9.7d";
1136 #endif
1137         ], [ol_cv_ssl_crl_compat=yes], [ol_cv_ssl_crl_compat=no])])
1138 ])