1dnl OpenLDAP Autoconf Macros
2dnl $OpenLDAP$
3dnl This work is part of OpenLDAP Software <http://www.openldap.org/>.
4dnl
5dnl Copyright 1998-2011 The OpenLDAP Foundation.
6dnl All rights reserved.
7dnl
8dnl Redistribution and use in source and binary forms, with or without
9dnl modification, are permitted only as authorized by the OpenLDAP
10dnl Public License.
11dnl
12dnl A copy of this license is available in the file LICENSE in the
13dnl top-level directory of the distribution or, alternatively, at
14dnl <http://www.OpenLDAP.org/license.html>.
15dnl
16dnl --------------------------------------------------------------------
17dnl Restricted form of AC_ARG_ENABLE that limits user options
18dnl
19dnl $1 = option name
20dnl $2 = help-string
21dnl $3 = default value	(auto).  "--" means do not set it by default
22dnl $4 = allowed values (auto yes no)
23dnl $5 = overridden default
24AC_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
39dnl AC_MSG_RESULT([OpenLDAP -enable-$1 $ol_enable_$1])
40	popdef([ol_DefVal])
41# end --enable-$1
42])dnl
43dnl
44dnl --------------------------------------------------------------------
45dnl Restricted form of AC_ARG_WITH that limits user options
46dnl
47dnl $1 = option name
48dnl $2 = help-string
49dnl $3 = default value (no)
50dnl $4 = allowed values (yes or no)
51AC_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
65dnl AC_MSG_RESULT([OpenLDAP --with-$1 $ol_with_$1])
66# end --with-$1
67])dnl
68dnl ====================================================================
69dnl Check for dependency generation flag
70AC_DEFUN([OL_MKDEPEND], [# test for make depend flag
71OL_MKDEP=
72OL_MKDEP_FLAGS=
73if 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;
81EOF
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
99else
100	cc_cv_mkdep=yes
101	OL_MKDEP="${MKDEP}"
102	OL_MKDEP_FLAGS="${MKDEP_FLAGS}"
103fi
104AC_SUBST(OL_MKDEP)
105AC_SUBST(OL_MKDEP_FLAGS)
106])
107dnl
108dnl ====================================================================
109dnl Check if system uses EBCDIC instead of ASCII
110AC_DEFUN([OL_CPP_EBCDIC], [# test for EBCDIC
111AC_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])])
117if test $ol_cv_cpp_ebcdic = yes ; then
118	AC_DEFINE(HAVE_EBCDIC,1, [define if system uses EBCDIC instead of ASCII])
119fi
120])
121dnl
122dnl --------------------------------------------------------------------
123dnl Check for MSVC
124AC_DEFUN([OL_MSVC],
125[AC_REQUIRE_CPP()dnl
126AC_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
133dnl --------------------------------------------------------------------
134dnl OpenLDAP version of STDC header check w/ EBCDIC support
135AC_DEFUN([OL_HEADER_STDC],
136[AC_REQUIRE_CPP()dnl
137AC_REQUIRE([OL_CPP_EBCDIC])dnl
138AC_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
144if test $ol_cv_header_stdc = yes; then
145  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
146AC_EGREP_HEADER(memchr, string.h, , ol_cv_header_stdc=no)
147fi
148
149if test $ol_cv_header_stdc = yes; then
150  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
151AC_EGREP_HEADER(free, stdlib.h, , ol_cv_header_stdc=no)
152fi
153
154if test $ol_cv_header_stdc = yes; then
155  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
156AC_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)))
167int main () { int i; for (i = 0; i < 256; i++)
168if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
169exit (0); }
170]])],[],[ol_cv_header_stdc=no],[:])
171fi])
172if test $ol_cv_header_stdc = yes; then
173  AC_DEFINE(STDC_HEADERS)
174fi
175ac_cv_header_stdc=disable
176])
177dnl
178dnl ====================================================================
179dnl DNS resolver macros
180AC_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
236fi
237])
238dnl --------------------------------------------------------------------
239dnl Try to locate appropriate library
240AC_DEFUN([OL_RESOLVER_LINK],
241[ol_cv_lib_resolver=no
242OL_RESOLVER_TRY(ol_cv_resolver_none)
243OL_RESOLVER_TRY(ol_cv_resolver_resolv,[-lresolv])
244OL_RESOLVER_TRY(ol_cv_resolver_bind,[-lbind])
245])
246dnl
247dnl ====================================================================
248dnl International Components for Unicode (ICU)
249AC_DEFUN([OL_ICU],
250[ol_icu=no
251AC_CHECK_HEADERS( unicode/utypes.h )
252if 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
271fi
272])
273dnl
274dnl ====================================================================
275dnl Berkeley DB macros
276dnl
277dnl --------------------------------------------------------------------
278dnl Try to link
279AC_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
317fi
318])
319dnl
320dnl --------------------------------------------------------------------
321dnl Get major and minor version from <db.h>
322AC_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])
334case $ol_cv_bdb_major in [[1-9]]*) : ;; *)
335	AC_MSG_ERROR([Unknown Berkeley DB major version in db.h]) ;;
336esac
337
338dnl Determine minor version
339AC_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])
350case $ol_cv_bdb_minor in [[0-9]]*) : ;; *)
351	AC_MSG_ERROR([Unknown Berkeley DB minor version in db.h]) ;;
352esac
353])
354dnl
355dnl --------------------------------------------------------------------
356dnl Try to locate appropriate library
357AC_DEFUN([OL_BERKELEY_DB_LINK],
358[ol_cv_lib_db=no
359
360if 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])
367elif 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])
374fi
375OL_BERKELEY_DB_TRY(ol_cv_db_db,[-ldb])
376OL_BERKELEY_DB_TRY(ol_cv_db_none)
377])
378dnl
379dnl --------------------------------------------------------------------
380dnl Check if Berkeley DB version
381AC_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
401main()
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
430dnl
431dnl --------------------------------------------------------------------
432dnl Check if Berkeley DB supports DB_THREAD
433AC_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
450main()
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
514dnl
515dnl --------------------------------------------------------------------
516dnl Find any DB
517AC_DEFUN([OL_BERKELEY_DB],
518[ol_cv_berkeley_db=no
519AC_CHECK_HEADERS(db.h)
520if 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
534fi
535])
536dnl --------------------------------------------------------------------
537dnl Check for version compatility with back-bdb
538AC_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
560dnl
561dnl ====================================================================
562dnl Check POSIX Thread version 
563dnl
564dnl defines ol_cv_pthread_version to 4, 5, 6, 7, 8, 10, depending on the
565dnl	version of the POSIX.4a Draft that is implemented.
566dnl	10 == POSIX.4a Final == POSIX.1c-1996 for our purposes.
567dnl	Existence of pthread.h should be tested separately.
568dnl
569dnl tests:
570dnl	pthread_detach() was dropped in Draft 8, it is present
571dnl		in every other version
572dnl	PTHREAD_CREATE_UNDETACHED is only in Draft 7, it was called
573dnl		PTHREAD_CREATE_JOINABLE after that
574dnl	pthread_attr_create was renamed to pthread_attr_init in Draft 6.
575dnl		Draft 6-10 has _init, Draft 4-5 has _create.
576dnl	pthread_attr_default was dropped in Draft 6, only 4 and 5 have it
577dnl	PTHREAD_MUTEX_INITIALIZER was introduced in Draft 5. It's not
578dnl		interesting to us because we don't try to statically
579dnl		initialize mutexes. 5-10 has it.
580dnl
581dnl Draft 9 and 10 are equivalent for our purposes.
582dnl
583AC_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
608dnl
609dnl --------------------------------------------------------------------
610AC_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
620static void *task(p)
621	void *p;
622{
623	return (void *) (p == NULL);
624}
625]])
626AC_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
674AC_DEFUN([OL_PTHREAD_TEST_PROGRAM],
675AC_LANG_SOURCE([OL_PTHREAD_TEST_INCLUDES
676
677int main(argc, argv)
678	int argc;
679	char **argv;
680{
681OL_PTHREAD_TEST_FUNCTION
682}
683]))
684dnl --------------------------------------------------------------------
685AC_DEFUN([OL_PTHREAD_TRY], [# Pthread try link: $1 ($2)
686if 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
708fi
709])
710dnl
711dnl ====================================================================
712dnl Check GNU Pth pthread Header
713dnl
714dnl defines ol_cv_header linux_threads to 'yes' or 'no'
715dnl		'no' implies pthreads.h is not LinuxThreads or pthreads.h
716dnl		doesn't exists.  Existance of pthread.h should separately
717dnl		checked.
718dnl 
719AC_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
732dnl ====================================================================
733dnl Check for NT Threads
734AC_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])
742dnl ====================================================================
743dnl Check LinuxThreads Header
744dnl
745dnl defines ol_cv_header linux_threads to 'yes' or 'no'
746dnl		'no' implies pthreads.h is not LinuxThreads or pthreads.h
747dnl		doesn't exists.  Existance of pthread.h should separately
748dnl		checked.
749dnl 
750AC_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
762dnl --------------------------------------------------------------------
763dnl	Check LinuxThreads Implementation
764dnl
765dnl	defines ol_cv_sys_linux_threads to 'yes' or 'no'
766dnl	'no' implies pthreads implementation is not LinuxThreads.
767dnl 
768AC_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
774dnl
775dnl --------------------------------------------------------------------
776dnl Check LinuxThreads consistency
777AC_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
792dnl
793dnl ====================================================================
794dnl Check for POSIX Regex
795AC_DEFUN([OL_POSIX_REGEX], [
796AC_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>
800static char *pattern, *string;
801main()
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])
821dnl
822dnl ====================================================================
823dnl Check if toupper() requires islower() to be called first
824AC_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>
828main()
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])])
835if test $ol_cv_c_upper_lower != no ; then
836	AC_DEFINE(C_UPPER_LOWER,1, [define if toupper() requires islower()])
837fi
838])
839dnl
840dnl ====================================================================
841dnl Error string checks
842dnl
843dnl Check for declaration of sys_errlist in one of stdio.h and errno.h.
844dnl Declaration of sys_errlist on BSD4.4 interferes with our declaration.
845dnl Reported by Keith Bostic.
846AC_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
858if 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])])
864fi
865if 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])
868fi
869])dnl
870AC_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	])
892if 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])
895fi
896])dnl
897dnl
898AC_DEFUN([OL_STRERROR],
899[OL_SYS_ERRLIST dnl TEMPORARY
900AC_CHECK_FUNCS(strerror strerror_r)
901ol_cv_func_strerror_r=no
902if test "${ac_cv_func_strerror_r}" = yes ; then
903	OL_NONPOSIX_STRERROR_R
904elif test "${ac_cv_func_strerror}" = no ; then
905	OL_SYS_ERRLIST
906fi
907])dnl
908dnl ====================================================================
909dnl Early MIPS compilers (used in Ultrix 4.2) don't like
910dnl "int x; int *volatile a = &x; *a = 0;"
911dnl 	-- borrowed from PDKSH
912AC_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
923dnl
924dnl ====================================================================
925dnl Look for fetch(3)
926AC_DEFUN([OL_LIB_FETCH],
927[ol_LIBS=$LIBS
928LIBS="-lfetch -lcom_err $LIBS"
929AC_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])])
936LIBS=$ol_LIBS
937if 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)])
941fi
942])dnl
943dnl
944dnl ====================================================================
945dnl Define inet_aton is available
946AC_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;
963int 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
969dnl
970dnl ====================================================================
971dnl check no of arguments for ctime_r
972AC_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
998dnl
999dnl --------------------------------------------------------------------
1000dnl check return type of ctime_r()
1001AC_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
1009dnl ====================================================================
1010dnl check no of arguments for gethostbyname_r
1011AC_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
1053dnl
1054dnl check no of arguments for gethostbyaddr_r
1055AC_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
1102dnl
1103dnl --------------------------------------------------------------------
1104dnl Check for Cyrus SASL version compatility
1105AC_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])
1123dnl ====================================================================
1124dnl check for SSL compatibility
1125AC_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])
1139