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