openldap.m4 31.8 KB
Newer Older
Kurt Zeilenga's avatar
Kurt Zeilenga committed
1
dnl OpenLDAP Autoconf Macros
Kurt Zeilenga's avatar
Kurt Zeilenga committed
2
dnl $OpenLDAP$
Kurt Zeilenga's avatar
Kurt Zeilenga committed
3
dnl This work is part of OpenLDAP Software <http://www.openldap.org/>.
Kurt Zeilenga's avatar
Kurt Zeilenga committed
4
dnl
Quanah Gibson-Mount's avatar
Quanah Gibson-Mount committed
5
dnl Copyright 1998-2020 The OpenLDAP Foundation.
Kurt Zeilenga's avatar
Kurt Zeilenga committed
6
dnl All rights reserved.
Kurt Zeilenga's avatar
Kurt Zeilenga committed
7
dnl
Kurt Zeilenga's avatar
Kurt Zeilenga committed
8
9
dnl Redistribution and use in source and binary forms, with or without
dnl modification, are permitted only as authorized by the OpenLDAP
Kurt Zeilenga's avatar
Kurt Zeilenga committed
10
dnl Public License.
11
dnl
Kurt Zeilenga's avatar
Kurt Zeilenga committed
12
13
14
dnl A copy of this license is available in the file LICENSE in the
dnl top-level directory of the distribution or, alternatively, at
dnl <http://www.OpenLDAP.org/license.html>.
15
16
17
18
19
20
dnl
dnl --------------------------------------------------------------------
dnl Restricted form of AC_ARG_ENABLE that limits user options
dnl
dnl $1 = option name
dnl $2 = help-string
21
dnl $3 = default value	(auto).  "--" means do not set it by default
22
dnl $4 = allowed values (auto yes no)
23
dnl $5 = overridden default
24
AC_DEFUN([OL_ARG_ENABLE], [# OpenLDAP --enable-$1
25
26
	pushdef([ol_DefVal],ifelse($3,,auto,$3))
	AC_ARG_ENABLE($1,ifelse($4,,[$2],[$2] translit([$4],[ ],[|])) ifelse($3,--,,@<:@ol_DefVal@:>@),[
27
28
	ol_arg=invalid
	for ol_val in ifelse($4,,[auto yes no],[$4]) ; do
29
30
31
32
33
34
35
36
		if test "$enableval" = "$ol_val" ; then
			ol_arg="$ol_val"
		fi
	done
	if test "$ol_arg" = "invalid" ; then
		AC_MSG_ERROR(bad value $enableval for --enable-$1)
	fi
	ol_enable_$1="$ol_arg"
37
]ifelse($3,--,,[,
38
[	ol_enable_$1=ifelse($5,,ol_DefVal,[${]$5[:-]ol_DefVal[}])]]))dnl
Kurt Zeilenga's avatar
Kurt Zeilenga committed
39
dnl AC_MSG_RESULT([OpenLDAP -enable-$1 $ol_enable_$1])
40
	popdef([ol_DefVal])
41
42
43
44
45
46
47
48
49
# end --enable-$1
])dnl
dnl
dnl --------------------------------------------------------------------
dnl Restricted form of AC_ARG_WITH that limits user options
dnl
dnl $1 = option name
dnl $2 = help-string
dnl $3 = default value (no)
50
dnl $4 = allowed values (yes or no)
51
AC_DEFUN([OL_ARG_WITH], [# OpenLDAP --with-$1
52
	AC_ARG_WITH($1,[$2 @<:@]ifelse($3,,yes,$3)@:>@,[
53
54
	ol_arg=invalid
	for ol_val in ifelse($4,,[yes no],[$4]) ; do
55
56
57
58
59
60
61
62
63
		if test "$withval" = "$ol_val" ; then
			ol_arg="$ol_val"
		fi
	done
	if test "$ol_arg" = "invalid" ; then
		AC_MSG_ERROR(bad value $withval for --with-$1)
	fi
	ol_with_$1="$ol_arg"
],
64
[	ol_with_$1=ifelse($3,,"no","$3")])dnl
Kurt Zeilenga's avatar
Kurt Zeilenga committed
65
dnl AC_MSG_RESULT([OpenLDAP --with-$1 $ol_with_$1])
66
67
# end --with-$1
])dnl
68
dnl ====================================================================
69
dnl Check for dependency generation flag
Kurt Zeilenga's avatar
Kurt Zeilenga committed
70
71
72
73
74
75
76
77
78
79
AC_DEFUN([OL_MKDEPEND], [# test for make depend flag
OL_MKDEP=
OL_MKDEP_FLAGS=
if test -z "${MKDEP}"; then
	OL_MKDEP="${CC-cc}"
	if test -z "${MKDEP_FLAGS}"; then
		AC_CACHE_CHECK([for ${OL_MKDEP} depend flag], ol_cv_mkdep, [
			ol_cv_mkdep=no
			for flag in "-M" "-xM"; do
				cat > conftest.c <<EOF
80
81
 noCode;
EOF
Kurt Zeilenga's avatar
Kurt Zeilenga committed
82
				if AC_TRY_COMMAND($OL_MKDEP $flag conftest.c) \
83
					| grep '^conftest\.'"${ac_objext}" >/dev/null 2>&1
Kurt Zeilenga's avatar
Kurt Zeilenga committed
84
				then
85
86
87
88
89
					if test ! -f conftest."${ac_object}" ; then
						ol_cv_mkdep=$flag
						OL_MKDEP_FLAGS="$flag"
						break
					fi
Kurt Zeilenga's avatar
Kurt Zeilenga committed
90
91
92
93
				fi
			done
			rm -f conftest*
		])
94
		test "$ol_cv_mkdep" = no && OL_MKDEP=":"
Kurt Zeilenga's avatar
Kurt Zeilenga committed
95
96
97
98
	else
		cc_cv_mkdep=yes
		OL_MKDEP_FLAGS="${MKDEP_FLAGS}"
	fi
99
else
Kurt Zeilenga's avatar
Kurt Zeilenga committed
100
101
102
103
	cc_cv_mkdep=yes
	OL_MKDEP="${MKDEP}"
	OL_MKDEP_FLAGS="${MKDEP_FLAGS}"
fi
104
105
AC_SUBST(OL_MKDEP)
AC_SUBST(OL_MKDEP_FLAGS)
Kurt Zeilenga's avatar
Kurt Zeilenga committed
106
])
107
108
dnl
dnl ====================================================================
Kurt Zeilenga's avatar
Kurt Zeilenga committed
109
110
dnl Check if system uses EBCDIC instead of ASCII
AC_DEFUN([OL_CPP_EBCDIC], [# test for EBCDIC
111
AC_CACHE_CHECK([for EBCDIC],ol_cv_cpp_ebcdic,[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
112
	AC_PREPROC_IFELSE([AC_LANG_SOURCE([[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
113
114
115
#if !('M' == 0xd4)
#include <__ASCII__/generate_error.h>
#endif
Kurt Zeilenga's avatar
Kurt Zeilenga committed
116
]])],[ol_cv_cpp_ebcdic=yes],[ol_cv_cpp_ebcdic=no])])
Kurt Zeilenga's avatar
Kurt Zeilenga committed
117
if test $ol_cv_cpp_ebcdic = yes ; then
Kurt Zeilenga's avatar
Kurt Zeilenga committed
118
119
120
121
	AC_DEFINE(HAVE_EBCDIC,1, [define if system uses EBCDIC instead of ASCII])
fi
])
dnl
Quanah Gibson-Mount's avatar
Quanah Gibson-Mount committed
122
123
124
125
126
127
128
129
130
131
132
dnl --------------------------------------------------------------------
dnl Check for MSVC
AC_DEFUN([OL_MSVC],
[AC_REQUIRE_CPP()dnl
AC_CACHE_CHECK([whether we are using MS Visual C++], ol_cv_msvc,
[AC_PREPROC_IFELSE([AC_LANG_SOURCE([[
#ifndef _MSC_VER
#include <__FOO__/generate_error.h>
#endif
]])],[ol_cv_msvc=yes],[ol_cv_msvc=no])])])

Kurt Zeilenga's avatar
Kurt Zeilenga committed
133
134
dnl --------------------------------------------------------------------
dnl OpenLDAP version of STDC header check w/ EBCDIC support
Kurt Zeilenga's avatar
Kurt Zeilenga committed
135
AC_DEFUN([OL_HEADER_STDC],
136
[AC_REQUIRE_CPP()dnl
Kurt Zeilenga's avatar
Kurt Zeilenga committed
137
AC_REQUIRE([OL_CPP_EBCDIC])dnl
Kurt Zeilenga's avatar
Kurt Zeilenga committed
138
AC_CACHE_CHECK([for ANSI C header files], ol_cv_header_stdc,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
139
[AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>
140
141
#include <stdarg.h>
#include <string.h>
Kurt Zeilenga's avatar
Kurt Zeilenga committed
142
#include <float.h>]])],[ol_cv_header_stdc=yes],[ol_cv_header_stdc=no])
143
144
145
146
147
148
149
150
151
152
153
154
155

if test $ol_cv_header_stdc = yes; then
  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
AC_EGREP_HEADER(memchr, string.h, , ol_cv_header_stdc=no)
fi

if test $ol_cv_header_stdc = yes; then
  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
AC_EGREP_HEADER(free, stdlib.h, , ol_cv_header_stdc=no)
fi

if test $ol_cv_header_stdc = yes; then
  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
Kurt Zeilenga's avatar
Kurt Zeilenga committed
156
AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <ctype.h>
Kurt Zeilenga's avatar
Kurt Zeilenga committed
157
#ifndef HAVE_EBCDIC
158
159
160
161
162
163
164
165
166
167
168
169
#	define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
#	define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
#else
#	define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \
		|| ('j' <= (c) && (c) <= 'r') \
		|| ('s' <= (c) && (c) <= 'z'))
#	define TOUPPER(c)	(ISLOWER(c) ? ((c) | 0x40) : (c))
#endif
#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
int main () { int i; for (i = 0; i < 256; i++)
if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
exit (0); }
Kurt Zeilenga's avatar
Kurt Zeilenga committed
170
]])],[],[ol_cv_header_stdc=no],[:])
171
172
173
174
175
176
177
178
fi])
if test $ol_cv_header_stdc = yes; then
  AC_DEFINE(STDC_HEADERS)
fi
ac_cv_header_stdc=disable
])
dnl
dnl ====================================================================
Kurt Zeilenga's avatar
Kurt Zeilenga committed
179
180
181
182
183
184
185
186
187
dnl DNS resolver macros
AC_DEFUN([OL_RESOLVER_TRY],
[if test $ol_cv_lib_resolver = no ; then
	AC_CACHE_CHECK([for resolver link (]ifelse($2,,default,$2)[)],[$1],
[
	ol_RESOLVER_LIB=ifelse($2,,,$2)
	ol_LIBS=$LIBS
	LIBS="$ol_RESOLVER_LIB $LIBS"

Kurt Zeilenga's avatar
Kurt Zeilenga committed
188
	AC_LINK_IFELSE([AC_LANG_PROGRAM([[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
189
190
191
192
193
194
195
196
197
198
#ifdef HAVE_SYS_TYPES_H
#	include <sys/types.h>
#endif
#include <netinet/in.h>
#ifdef HAVE_ARPA_NAMESER_H
#	include <arpa/nameser.h>
#endif
#ifdef HAVE_RESOLV_H
#	include <resolv.h>
#endif
Kurt Zeilenga's avatar
Kurt Zeilenga committed
199
]], [[{
Kurt Zeilenga's avatar
Kurt Zeilenga committed
200
201
202
203
204
205
	int len, status;
	char *request = NULL;
	unsigned char reply[64*1024];
	unsigned char host[64*1024];
	unsigned char *p;

Kurt Zeilenga's avatar
Kurt Zeilenga committed
206
#ifdef NS_HFIXEDSZ
Kurt Zeilenga's avatar
Kurt Zeilenga committed
207
208
209
210
211
212
213
214
215
216
	/* Bind 8/9 interface */
	len = res_query(request, ns_c_in, ns_t_srv, reply, sizeof(reply));
#else
	/* Bind 4 interface */
# ifndef T_SRV
#  define T_SRV 33
# endif
	len = res_query(request, C_IN, T_SRV, reply, sizeof(reply));
#endif
	p = reply;
Kurt Zeilenga's avatar
Kurt Zeilenga committed
217
#ifdef NS_HFIXEDSZ
Kurt Zeilenga's avatar
Kurt Zeilenga committed
218
219
220
221
222
223
224
225
226
227
	/* Bind 8/9 interface */
	p += NS_HFIXEDSZ;
#elif defined(HFIXEDSZ)
	/* Bind 4 interface w/ HFIXEDSZ */
	p += HFIXEDSZ;
#else
	/* Bind 4 interface w/o HFIXEDSZ */
	p += sizeof(HEADER);
#endif
	status = dn_expand( reply, reply+len, p, host, sizeof(host));
Kurt Zeilenga's avatar
Kurt Zeilenga committed
228
}]])],[$1=yes],[$1=no])
Kurt Zeilenga's avatar
Kurt Zeilenga committed
229
230
231
232
233
234
235
236
237
238
239
240
241
242

	LIBS="$ol_LIBS"
])

	if test $$1 = yes ; then
		ol_cv_lib_resolver=ifelse($2,,yes,$2)
	fi
fi
])
dnl --------------------------------------------------------------------
dnl Try to locate appropriate library
AC_DEFUN([OL_RESOLVER_LINK],
[ol_cv_lib_resolver=no
OL_RESOLVER_TRY(ol_cv_resolver_none)
Kurt Zeilenga's avatar
Kurt Zeilenga committed
243
OL_RESOLVER_TRY(ol_cv_resolver_resolv,[-lresolv])
Kurt Zeilenga's avatar
Kurt Zeilenga committed
244
245
246
247
OL_RESOLVER_TRY(ol_cv_resolver_bind,[-lbind])
])
dnl
dnl ====================================================================
Kurt Zeilenga's avatar
Kurt Zeilenga committed
248
dnl Berkeley DB macros
249
250
dnl
dnl --------------------------------------------------------------------
Kurt Zeilenga's avatar
Kurt Zeilenga committed
251
252
253
254
255
256
257
dnl Try to link
AC_DEFUN([OL_BERKELEY_DB_TRY],
[if test $ol_cv_lib_db = no ; then
	AC_CACHE_CHECK([for Berkeley DB link (]ifelse($2,,default,$2)[)],[$1],
[
	ol_DB_LIB=ifelse($2,,,$2)
	ol_LIBS=$LIBS
Kurt Zeilenga's avatar
Kurt Zeilenga committed
258
	LIBS="$ol_DB_LIB $LTHREAD_LIBS $LIBS"
Kurt Zeilenga's avatar
Kurt Zeilenga committed
259

Kurt Zeilenga's avatar
Kurt Zeilenga committed
260
	AC_LINK_IFELSE([AC_LANG_PROGRAM([[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
261
262
263
264
265
266
267
268
269
270
271
272
273
#ifdef HAVE_DB_185_H
# include <db_185.h>
#else
# include <db.h>
#endif

#ifndef DB_VERSION_MAJOR
# define DB_VERSION_MAJOR 1
#endif

#ifndef NULL
#define NULL ((void*)0)
#endif
Kurt Zeilenga's avatar
Kurt Zeilenga committed
274
]], [[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
275
276
277
#if DB_VERSION_MAJOR > 2
	db_env_create( NULL, 0 );
#elif DB_VERSION_MAJOR > 1
Kurt Zeilenga's avatar
Kurt Zeilenga committed
278
279
280
281
	db_appexit( NULL );
#else
	(void) dbopen( NULL, 0, 0, 0, NULL);
#endif
Kurt Zeilenga's avatar
Kurt Zeilenga committed
282
]])],[$1=yes],[$1=no])
Kurt Zeilenga's avatar
Kurt Zeilenga committed
283

284
285
	LIBS="$ol_LIBS"
])
Kurt Zeilenga's avatar
Kurt Zeilenga committed
286
287
288

	if test $$1 = yes ; then
		ol_cv_lib_db=ifelse($2,,yes,$2)
289
	fi
Kurt Zeilenga's avatar
Kurt Zeilenga committed
290
fi
291
292
])
dnl
Kurt Zeilenga's avatar
Kurt Zeilenga committed
293
dnl --------------------------------------------------------------------
294
295
296
297
dnl Get major and minor version from <db.h>
AC_DEFUN([OL_BDB_HEADER_VERSION],
[AC_CACHE_CHECK([for Berkeley DB major version in db.h], [ol_cv_bdb_major],[
	AC_LANG_CONFTEST([
298
299
300
301
#include <db.h>
#ifndef DB_VERSION_MAJOR
#	define DB_VERSION_MAJOR 1
#endif
302
303
__db_version DB_VERSION_MAJOR
])
304
	set X `eval "$ac_cpp -P conftest.$ac_ext" | $EGREP __db_version` none none
305
	ol_cv_bdb_major=${3}
306
])
307
308
309
case $ol_cv_bdb_major in [[1-9]]*) : ;; *)
	AC_MSG_ERROR([Unknown Berkeley DB major version in db.h]) ;;
esac
310
311

dnl Determine minor version
312
313
AC_CACHE_CHECK([for Berkeley DB minor version in db.h], [ol_cv_bdb_minor],[
	AC_LANG_CONFTEST([
314
315
316
317
#include <db.h>
#ifndef DB_VERSION_MINOR
#	define DB_VERSION_MINOR 0
#endif
318
319
__db_version DB_VERSION_MINOR
])
320
	set X `eval "$ac_cpp -P conftest.$ac_ext" | $EGREP __db_version` none none
321
	ol_cv_bdb_minor=${3}
322
])
323
324
325
326
327
328
329
330
331
case $ol_cv_bdb_minor in [[0-9]]*) : ;; *)
	AC_MSG_ERROR([Unknown Berkeley DB minor version in db.h]) ;;
esac
])
dnl
dnl --------------------------------------------------------------------
dnl Try to locate appropriate library
AC_DEFUN([OL_BERKELEY_DB_LINK],
[ol_cv_lib_db=no
332

Quanah Gibson-Mount's avatar
Quanah Gibson-Mount committed
333
334
335
336
337
338
339
340
if test $ol_cv_bdb_major = 5 ; then
	OL_BERKELEY_DB_TRY(ol_cv_db_db_5_dot_m,[-ldb-5.$ol_cv_bdb_minor])
	OL_BERKELEY_DB_TRY(ol_cv_db_db5m,[-ldb5$ol_cv_bdb_minor])
	OL_BERKELEY_DB_TRY(ol_cv_db_db_5m,[-ldb-5$ol_cv_bdb_minor])
	OL_BERKELEY_DB_TRY(ol_cv_db_db_5_m,[-ldb-5-$ol_cv_bdb_minor])
	OL_BERKELEY_DB_TRY(ol_cv_db_db_5,[-ldb-5])
	OL_BERKELEY_DB_TRY(ol_cv_db_db5,[-ldb5])
elif test $ol_cv_bdb_major = 4 ; then
Quanah Gibson-Mount's avatar
Quanah Gibson-Mount committed
341
342
343
344
	OL_BERKELEY_DB_TRY(ol_cv_db_db_4_dot_m,[-ldb-4.$ol_cv_bdb_minor])
	OL_BERKELEY_DB_TRY(ol_cv_db_db4m,[-ldb4$ol_cv_bdb_minor])
	OL_BERKELEY_DB_TRY(ol_cv_db_db_4m,[-ldb-4$ol_cv_bdb_minor])
	OL_BERKELEY_DB_TRY(ol_cv_db_db_4_m,[-ldb-4-$ol_cv_bdb_minor])
345
346
347
	OL_BERKELEY_DB_TRY(ol_cv_db_db_4,[-ldb-4])
	OL_BERKELEY_DB_TRY(ol_cv_db_db4,[-ldb4])
fi
Quanah Gibson-Mount's avatar
Quanah Gibson-Mount committed
348
OL_BERKELEY_DB_TRY(ol_cv_db_db,[-ldb])
Kurt Zeilenga's avatar
Kurt Zeilenga committed
349
350
OL_BERKELEY_DB_TRY(ol_cv_db_none)
])
351
352
dnl
dnl --------------------------------------------------------------------
Kurt Zeilenga's avatar
Kurt Zeilenga committed
353
354
dnl Check if Berkeley DB version
AC_DEFUN([OL_BERKELEY_DB_VERSION],
355
[AC_CACHE_CHECK([for Berkeley DB library and header version match], [ol_cv_berkeley_db_version], [
Kurt Zeilenga's avatar
Kurt Zeilenga committed
356
357
358
359
360
361
	ol_LIBS="$LIBS"
	LIBS="$LTHREAD_LIBS $LIBS"
	if test $ol_cv_lib_db != yes ; then
		LIBS="$ol_cv_lib_db $LIBS"
	fi

Kurt Zeilenga's avatar
Kurt Zeilenga committed
362
	AC_RUN_IFELSE([AC_LANG_SOURCE([[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
#ifdef HAVE_DB_185_H
	choke me;
#else
#include <db.h>
#endif
#ifndef DB_VERSION_MAJOR
# define DB_VERSION_MAJOR 1
#endif
#ifndef NULL
#define NULL ((void *)0)
#endif
main()
{
#if DB_VERSION_MAJOR > 1
	char *version;
	int major, minor, patch;

	version = db_version( &major, &minor, &patch );

382
383
384
385
	if( major != DB_VERSION_MAJOR ||
		minor != DB_VERSION_MINOR ||
		patch != DB_VERSION_PATCH )
	{
Kurt Zeilenga's avatar
Kurt Zeilenga committed
386
		printf("Berkeley DB version mismatch\n"
Kurt Zeilenga's avatar
Kurt Zeilenga committed
387
			"\theader: %s\n\tlibrary: %s\n",
Kurt Zeilenga's avatar
Kurt Zeilenga committed
388
389
390
391
392
393
			DB_VERSION_STRING, version);
		return 1;
	}
#endif

	return 0;
Kurt Zeilenga's avatar
Kurt Zeilenga committed
394
}]])],[ol_cv_berkeley_db_version=yes],[ol_cv_berkeley_db_version=no],[ol_cv_berkeley_db_version=cross])
Kurt Zeilenga's avatar
Kurt Zeilenga committed
395
396
397
398
399
400
401
402
403
404

	LIBS="$ol_LIBS"
])

	if test $ol_cv_berkeley_db_version = no ; then
		AC_MSG_ERROR([Berkeley DB version mismatch])
	fi
])dnl
dnl
dnl --------------------------------------------------------------------
Kurt Zeilenga's avatar
Kurt Zeilenga committed
405
406
407
dnl Check if Berkeley DB supports DB_THREAD
AC_DEFUN([OL_BERKELEY_DB_THREAD],
[AC_CACHE_CHECK([for Berkeley DB thread support], [ol_cv_berkeley_db_thread], [
408
	ol_LIBS="$LIBS"
Kurt Zeilenga's avatar
Kurt Zeilenga committed
409
	LIBS="$LTHREAD_LIBS $LIBS"
Kurt Zeilenga's avatar
Kurt Zeilenga committed
410
	if test $ol_cv_lib_db != yes ; then
Kurt Zeilenga's avatar
Kurt Zeilenga committed
411
		LIBS="$ol_cv_lib_db $LIBS"
412
413
	fi

Kurt Zeilenga's avatar
Kurt Zeilenga committed
414
	AC_RUN_IFELSE([AC_LANG_SOURCE([[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
415
416
417
#ifdef HAVE_DB_185_H
	choke me;
#else
418
#include <db.h>
Kurt Zeilenga's avatar
Kurt Zeilenga committed
419
#endif
420
421
422
423
424
425
#ifndef NULL
#define NULL ((void *)0)
#endif
main()
{
	int rc;
426
	u_int32_t flags = DB_CREATE |
Kurt Zeilenga's avatar
Kurt Zeilenga committed
427
#ifdef DB_PRIVATE
Kurt Zeilenga's avatar
Kurt Zeilenga committed
428
		DB_PRIVATE |
Kurt Zeilenga's avatar
Kurt Zeilenga committed
429
#endif
Kurt Zeilenga's avatar
Kurt Zeilenga committed
430
		DB_THREAD;
Kurt Zeilenga's avatar
Kurt Zeilenga committed
431

432
433
434
435
436
#if DB_VERSION_MAJOR > 2
	DB_ENV *env = NULL;

	rc = db_env_create( &env, 0 );

Kurt Zeilenga's avatar
Kurt Zeilenga committed
437
438
439
440
441
	flags |= DB_INIT_MPOOL;
#ifdef DB_MPOOL_PRIVATE
	flags |= DB_MPOOL_PRIVATE;
#endif

442
443
444
445
	if( rc ) {
		printf("BerkeleyDB: %s\n", db_strerror(rc) );
		return rc;
	}
Kurt Zeilenga's avatar
Kurt Zeilenga committed
446

447
#if (DB_VERSION_MAJOR > 3) || (DB_VERSION_MINOR >= 1)
448
	rc = (env->open)( env, NULL, flags, 0 );
449
#else
450
	rc = (env->open)( env, NULL, NULL, flags, 0 );
Kurt Zeilenga's avatar
Kurt Zeilenga committed
451
#endif
Kurt Zeilenga's avatar
Kurt Zeilenga committed
452
453
454

	if ( rc == 0 ) {
		rc = env->close( env, 0 );
455
456
457
458
459
460
	}

	if( rc ) {
		printf("BerkeleyDB: %s\n", db_strerror(rc) );
		return rc;
	}
Kurt Zeilenga's avatar
Kurt Zeilenga committed
461

462
463
#else
	DB_ENV env;
464
465
466
467
468
469
470
	memset( &env, '\0', sizeof(env) );

	rc = db_appinit( NULL, NULL, &env, flags );

	if( rc == 0 ) {
		db_appexit( &env );
	}
Kurt Zeilenga's avatar
Kurt Zeilenga committed
471
472
473

	unlink("__db_mpool.share");
	unlink("__db_lock.share");
474
#endif
475
476

	return rc;
Kurt Zeilenga's avatar
Kurt Zeilenga committed
477
}]])],[ol_cv_berkeley_db_thread=yes],[ol_cv_berkeley_db_thread=no],[ol_cv_berkeley_db_thread=cross])
478
479

	LIBS="$ol_LIBS"
480
])
481

Kurt Zeilenga's avatar
Kurt Zeilenga committed
482
483
484
	if test $ol_cv_berkeley_db_thread != no ; then
		AC_DEFINE(HAVE_BERKELEY_DB_THREAD, 1,
			[define if Berkeley DB has DB_THREAD support])
485
	fi
486
])dnl
487
488
dnl
dnl --------------------------------------------------------------------
Kurt Zeilenga's avatar
Kurt Zeilenga committed
489
490
491
492
493
dnl Find any DB
AC_DEFUN([OL_BERKELEY_DB],
[ol_cv_berkeley_db=no
AC_CHECK_HEADERS(db.h)
if test $ac_cv_header_db_h = yes; then
494
495
496
497
498
499
500
	OL_BDB_HEADER_VERSION
	OL_BDB_COMPAT

	if test $ol_cv_bdb_compat != yes ; then
		AC_MSG_ERROR([BerkeleyDB version incompatible with BDB/HDB backends])
	fi

Kurt Zeilenga's avatar
Kurt Zeilenga committed
501
502
503
	OL_BERKELEY_DB_LINK
	if test "$ol_cv_lib_db" != no ; then
		ol_cv_berkeley_db=yes
Kurt Zeilenga's avatar
Kurt Zeilenga committed
504
		OL_BERKELEY_DB_VERSION
505
		OL_BERKELEY_DB_THREAD
Kurt Zeilenga's avatar
Kurt Zeilenga committed
506
507
	fi
fi
508
])
509
510
511
dnl --------------------------------------------------------------------
dnl Check for version compatility with back-bdb
AC_DEFUN([OL_BDB_COMPAT],
512
[AC_CACHE_CHECK([if Berkeley DB version supported by BDB/HDB backends], [ol_cv_bdb_compat],[
513
514
515
516
517
518
519
	AC_EGREP_CPP(__db_version_compat,[
#include <db.h>

 /* this check could be improved */
#ifndef DB_VERSION_MAJOR
#	define DB_VERSION_MAJOR 1
#endif
Kurt Zeilenga's avatar
Kurt Zeilenga committed
520
521
522
#ifndef DB_VERSION_MINOR
#	define DB_VERSION_MINOR 0
#endif
Quanah Gibson-Mount's avatar
Quanah Gibson-Mount committed
523
524
525
#ifndef DB_VERSION_PATCH
#      define DB_VERSION_PATCH 0
#endif
526

Quanah Gibson-Mount's avatar
Quanah Gibson-Mount committed
527
#define DB_VERSION_FULL        ((DB_VERSION_MAJOR<<16)|(DB_VERSION_MINOR<<8)|DB_VERSION_PATCH)
Quanah Gibson-Mount's avatar
Quanah Gibson-Mount committed
528

Quanah Gibson-Mount's avatar
Quanah Gibson-Mount committed
529
530
/* require 4.4 or later, but less than 6.0.20 */
#if DB_VERSION_FULL >= 0x040400 && DB_VERSION_FULL < 0x060014
531
	__db_version_compat
Quanah Gibson-Mount's avatar
Quanah Gibson-Mount committed
532
533
534
#endif
#if DB_VERSION_FULL >= 0x060014
#error "BerkeleyDB 6.0.20+ license is incompatible with LDAP"
535
#endif
536
	], [ol_cv_bdb_compat=yes], [ol_cv_bdb_compat=no])])
537
538
])

539
540
541
542
dnl
dnl ====================================================================
dnl Check POSIX Thread version 
dnl
Howard Chu's avatar
Howard Chu committed
543
dnl defines ol_cv_pthread_version to 4, 5, 6, 7, 8, 10, depending on the
544
545
dnl	version of the POSIX.4a Draft that is implemented.
dnl	10 == POSIX.4a Final == POSIX.1c-1996 for our purposes.
Howard Chu's avatar
Howard Chu committed
546
dnl	Existence of pthread.h should be tested separately.
547
dnl
548
dnl tests:
Howard Chu's avatar
Howard Chu committed
549
550
551
552
dnl	pthread_detach() was dropped in Draft 8, it is present
dnl		in every other version
dnl	PTHREAD_CREATE_UNDETACHED is only in Draft 7, it was called
dnl		PTHREAD_CREATE_JOINABLE after that
Howard Chu's avatar
Howard Chu committed
553
554
dnl	pthread_attr_create was renamed to pthread_attr_init in Draft 6.
dnl		Draft 6-10 has _init, Draft 4-5 has _create.
Howard Chu's avatar
Howard Chu committed
555
dnl	pthread_attr_default was dropped in Draft 6, only 4 and 5 have it
556
557
558
559
dnl	PTHREAD_MUTEX_INITIALIZER was introduced in Draft 5. It's not
dnl		interesting to us because we don't try to statically
dnl		initialize mutexes. 5-10 has it.
dnl
Howard Chu's avatar
Howard Chu committed
560
dnl Draft 9 and 10 are equivalent for our purposes.
561
dnl
562
563
AC_DEFUN([OL_POSIX_THREAD_VERSION],
[AC_CACHE_CHECK([POSIX thread version],[ol_cv_pthread_version],[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
564
	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
Howard Chu's avatar
Howard Chu committed
565
#		include <pthread.h>
Kurt Zeilenga's avatar
Kurt Zeilenga committed
566
	]], [[
Howard Chu's avatar
Howard Chu committed
567
		int i = PTHREAD_CREATE_JOINABLE;
Kurt Zeilenga's avatar
Kurt Zeilenga committed
568
	]])],[
Howard Chu's avatar
Howard Chu committed
569
570
	AC_EGREP_HEADER(pthread_detach,pthread.h,
	ol_cv_pthread_version=10, ol_cv_pthread_version=8)],[
571
	AC_EGREP_CPP(draft7,[
572
#		include <pthread.h>
573
#		ifdef PTHREAD_CREATE_UNDETACHED
574
		draft7
575
#		endif
576
	], ol_cv_pthread_version=7, [
Howard Chu's avatar
Howard Chu committed
577
578
	AC_EGREP_HEADER(pthread_attr_init,pthread.h,
	ol_cv_pthread_version=6, [
579
580
581
582
583
	AC_EGREP_CPP(draft5,[
#		include <pthread.h>
#ifdef		PTHREAD_MUTEX_INITIALIZER
		draft5
#endif
Howard Chu's avatar
Howard Chu committed
584
	], ol_cv_pthread_version=5, ol_cv_pthread_version=4) ]) ]) ])
585
586
587
])
])dnl
dnl
588
dnl --------------------------------------------------------------------
Kurt Zeilenga's avatar
Kurt Zeilenga committed
589
590
AC_DEFUN([OL_PTHREAD_TEST_INCLUDES], [[
/* pthread test headers */
591
#include <pthread.h>
592
593
594
#if HAVE_PTHREADS < 7
#include <errno.h>
#endif
595
596
597
#ifndef NULL
#define NULL (void*)0
#endif
Kurt Zeilenga's avatar
Kurt Zeilenga committed
598
599
600
601
602
603

static void *task(p)
	void *p;
{
	return (void *) (p == NULL);
}
Kurt Zeilenga's avatar
Kurt Zeilenga committed
604
605
]])
AC_DEFUN([OL_PTHREAD_TEST_FUNCTION],[[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
606
	/* pthread test function */
607
608
609
#ifndef PTHREAD_CREATE_DETACHED
#define	PTHREAD_CREATE_DETACHED	1
#endif
610
	pthread_t t;
Kurt Zeilenga's avatar
Kurt Zeilenga committed
611
	int status;
612
	int detach = PTHREAD_CREATE_DETACHED;
613

614
#if HAVE_PTHREADS > 4
615
	/* Final pthreads */
616
	pthread_attr_t attr;
Kurt Zeilenga's avatar
Kurt Zeilenga committed
617

618
	status = pthread_attr_init(&attr);
619
	if( status ) return status;
620

621
622
623
#if HAVE_PTHREADS < 7
	status = pthread_attr_setdetachstate(&attr, &detach);
	if( status < 0 ) status = errno;
624
#else
625
	status = pthread_attr_setdetachstate(&attr, detach);
626
627
628
#endif
	if( status ) return status;
	status = pthread_create( &t, &attr, task, NULL );
629
630
#if HAVE_PTHREADS < 7
	if( status < 0 ) status = errno;
631
#endif
632
	if( status ) return status;
633
#else
634
635
	/* Draft 4 pthreads */
	status = pthread_create( &t, pthread_attr_default, task, NULL );
636
	if( status ) return errno;
637

638
639
640
	/* give thread a chance to complete */
	/* it should remain joinable and hence detachable */
	sleep( 1 );
641

642
643
	status = pthread_detach( &t );
	if( status ) return errno;
644
#endif
Kurt Zeilenga's avatar
Kurt Zeilenga committed
645

646
647
648
#ifdef HAVE_LINUX_THREADS
	pthread_kill_other_threads_np();
#endif
Kurt Zeilenga's avatar
Kurt Zeilenga committed
649

650
	return 0;
Kurt Zeilenga's avatar
Kurt Zeilenga committed
651
]])
Kurt Zeilenga's avatar
Kurt Zeilenga committed
652
653

AC_DEFUN([OL_PTHREAD_TEST_PROGRAM],
Howard Chu's avatar
Howard Chu committed
654
AC_LANG_SOURCE([OL_PTHREAD_TEST_INCLUDES
Kurt Zeilenga's avatar
Kurt Zeilenga committed
655
656
657
658
659
660
661

int main(argc, argv)
	int argc;
	char **argv;
{
OL_PTHREAD_TEST_FUNCTION
}
Howard Chu's avatar
Howard Chu committed
662
]))
Kurt Zeilenga's avatar
Kurt Zeilenga committed
663
664
665
666
667
668
669
670
671
dnl --------------------------------------------------------------------
AC_DEFUN([OL_PTHREAD_TRY], [# Pthread try link: $1 ($2)
if test "$ol_link_threads" = no ; then
	# try $1
	AC_CACHE_CHECK([for pthread link with $1], [$2], [
		# save the flags
		ol_LIBS="$LIBS"
		LIBS="$1 $LIBS"

Kurt Zeilenga's avatar
Kurt Zeilenga committed
672
673
674
		AC_RUN_IFELSE([OL_PTHREAD_TEST_PROGRAM],
			[$2=yes],
			[$2=no],
Howard Chu's avatar
Howard Chu committed
675
676
			[AC_LINK_IFELSE([AC_LANG_PROGRAM(OL_PTHREAD_TEST_INCLUDES,
				OL_PTHREAD_TEST_FUNCTION)],
Kurt Zeilenga's avatar
Kurt Zeilenga committed
677
				[$2=yes], [$2=no])])
678
679

		# restore the LIBS
680
		LIBS="$ol_LIBS"
Kurt Zeilenga's avatar
Kurt Zeilenga committed
681
	])
682

Kurt Zeilenga's avatar
Kurt Zeilenga committed
683
684
685
	if test $$2 = yes ; then
		ol_link_pthreads="$1"
		ol_link_threads=posix
686
	fi
Kurt Zeilenga's avatar
Kurt Zeilenga committed
687
fi
688
689
])
dnl
690
dnl ====================================================================
691
692
693
694
695
696
697
698
699
700
701
702
703
dnl Check GNU Pth pthread Header
dnl
dnl defines ol_cv_header linux_threads to 'yes' or 'no'
dnl		'no' implies pthreads.h is not LinuxThreads or pthreads.h
dnl		doesn't exists.  Existance of pthread.h should separately
dnl		checked.
dnl 
AC_DEFUN([OL_HEADER_GNU_PTH_PTHREAD_H], [
	AC_CACHE_CHECK([for GNU Pth pthread.h],
		[ol_cv_header_gnu_pth_pthread_h],
		[AC_EGREP_CPP(__gnu_pth__,
			[#include <pthread.h>
#ifdef _POSIX_THREAD_IS_GNU_PTH
704
	__gnu_pth__;
705
706
707
708
709
710
711
#endif
],
			[ol_cv_header_gnu_pth_pthread_h=yes],
			[ol_cv_header_gnu_pth_pthread_h=no])
		])
])dnl
dnl ====================================================================
712
713
dnl Check for NT Threads
AC_DEFUN([OL_NT_THREADS], [
Kurt Zeilenga's avatar
Kurt Zeilenga committed
714
	AC_CHECK_FUNC(_beginthread)
715

Kurt Zeilenga's avatar
Kurt Zeilenga committed
716
	if test $ac_cv_func__beginthread = yes ; then
717
		AC_DEFINE(HAVE_NT_THREADS,1,[if you have NT Threads])
Howard Chu's avatar
Howard Chu committed
718
		ol_cv_nt_threads=yes
719
720
721
	fi
])
dnl ====================================================================
722
dnl Check LinuxThreads Header
723
dnl
724
dnl defines ol_cv_header linux_threads to 'yes' or 'no'
725
726
727
728
dnl		'no' implies pthreads.h is not LinuxThreads or pthreads.h
dnl		doesn't exists.  Existance of pthread.h should separately
dnl		checked.
dnl 
729
730
AC_DEFUN([OL_HEADER_LINUX_THREADS], [
	AC_CACHE_CHECK([for LinuxThreads pthread.h],
731
732
733
734
735
736
737
738
739
740
		[ol_cv_header_linux_threads],
		[AC_EGREP_CPP(pthread_kill_other_threads_np,
			[#include <pthread.h>],
			[ol_cv_header_linux_threads=yes],
			[ol_cv_header_linux_threads=no])
		])
	if test $ol_cv_header_linux_threads = yes; then
		AC_DEFINE(HAVE_LINUX_THREADS,1,[if you have LinuxThreads])
	fi
])dnl
741
dnl --------------------------------------------------------------------
742
dnl	Check LinuxThreads Implementation
743
dnl
744
745
dnl	defines ol_cv_sys_linux_threads to 'yes' or 'no'
dnl	'no' implies pthreads implementation is not LinuxThreads.
746
747
dnl 
AC_DEFUN([OL_SYS_LINUX_THREADS], [
Kurt Zeilenga's avatar
Kurt Zeilenga committed
748
	AC_CHECK_FUNCS(pthread_kill_other_threads_np)
749
750
751
752
753
754
	AC_CACHE_CHECK([for LinuxThreads implementation],
		[ol_cv_sys_linux_threads],
		[ol_cv_sys_linux_threads=$ac_cv_func_pthread_kill_other_threads_np])
])dnl
dnl
dnl --------------------------------------------------------------------
755
dnl Check LinuxThreads consistency
756
757
758
759
AC_DEFUN([OL_LINUX_THREADS], [
	AC_REQUIRE([OL_HEADER_LINUX_THREADS])
	AC_REQUIRE([OL_SYS_LINUX_THREADS])
	AC_CACHE_CHECK([for LinuxThreads consistency], [ol_cv_linux_threads], [
760
761
		if test $ol_cv_header_linux_threads = yes &&
		   test $ol_cv_sys_linux_threads = yes; then
762
			ol_cv_linux_threads=yes
763
764
		elif test $ol_cv_header_linux_threads = no &&
		     test $ol_cv_sys_linux_threads = no; then
765
			ol_cv_linux_threads=no
766
		else
767
			ol_cv_linux_threads=error
768
		fi
769
	])
770
771
772
])dnl
dnl
dnl ====================================================================
773
774
dnl Check for POSIX Regex
AC_DEFUN([OL_POSIX_REGEX], [
775
AC_CACHE_CHECK([for compatible POSIX regex],ol_cv_c_posix_regex,[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
776
	AC_RUN_IFELSE([AC_LANG_SOURCE([[
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
#include <sys/types.h>
#include <regex.h>
static char *pattern, *string;
main()
{
	int rc;
	regex_t re;

	pattern = "^A";

	if(regcomp(&re, pattern, 0)) {
		return -1;
	}
	
	string = "ALL MATCH";
	
	rc = regexec(&re, string, 0, (void*)0, 0);

	regfree(&re);

	return rc;
Kurt Zeilenga's avatar
Kurt Zeilenga committed
798
}]])],[ol_cv_c_posix_regex=yes],[ol_cv_c_posix_regex=no],[ol_cv_c_posix_regex=cross])])
799
800
801
])
dnl
dnl ====================================================================
802
803
dnl Check if toupper() requires islower() to be called first
AC_DEFUN([OL_C_UPPER_LOWER],
804
[AC_CACHE_CHECK([if toupper() requires islower()],ol_cv_c_upper_lower,[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
805
	AC_RUN_IFELSE([AC_LANG_SOURCE([[
806
807
808
809
810
811
812
#include <ctype.h>
main()
{
	if ('C' == toupper('C'))
		exit(0);
	else
		exit(1);
Kurt Zeilenga's avatar
Kurt Zeilenga committed
813
}]])],[ol_cv_c_upper_lower=no],[ol_cv_c_upper_lower=yes],[ol_cv_c_upper_lower=safe])])
814
if test $ol_cv_c_upper_lower != no ; then
815
	AC_DEFINE(C_UPPER_LOWER,1, [define if toupper() requires islower()])
816
817
fi
])
818
dnl
819
dnl ====================================================================
Kurt Zeilenga's avatar
Kurt Zeilenga committed
820
821
dnl Error string checks
dnl
822
823
824
825
dnl Check for declaration of sys_errlist in one of stdio.h and errno.h.
dnl Declaration of sys_errlist on BSD4.4 interferes with our declaration.
dnl Reported by Keith Bostic.
AC_DEFUN([OL_SYS_ERRLIST],
826
[AC_CACHE_CHECK([declaration of sys_errlist],ol_cv_dcl_sys_errlist,[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
827
	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
828
829
#include <stdio.h>
#include <sys/types.h>
830
#include <errno.h>
831
#ifdef _WIN32
832
#include <stdlib.h>
Kurt Zeilenga's avatar
Kurt Zeilenga committed
833
834
#endif ]], [[char *c = (char *) *sys_errlist]])],[ol_cv_dcl_sys_errlist=yes
	ol_cv_have_sys_errlist=yes],[ol_cv_dcl_sys_errlist=no])])
835
#
836
837
# It's possible (for near-UNIX clones) that sys_errlist doesn't exist
if test $ol_cv_dcl_sys_errlist = no ; then
838
	AC_DEFINE(DECL_SYS_ERRLIST,1,
839
		[define if sys_errlist is not declared in stdio.h or errno.h])
840
841

	AC_CACHE_CHECK([existence of sys_errlist],ol_cv_have_sys_errlist,[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
842
		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])])
843
844
845
846
fi
if test $ol_cv_have_sys_errlist = yes ; then
	AC_DEFINE(HAVE_SYS_ERRLIST,1,
		[define if you actually have sys_errlist in your libs])
847
fi
848
])dnl
Kurt Zeilenga's avatar
Kurt Zeilenga committed
849
850
851
852
853
854
AC_DEFUN([OL_NONPOSIX_STRERROR_R],
[AC_CACHE_CHECK([non-posix strerror_r],ol_cv_nonposix_strerror_r,[
	AC_EGREP_CPP(strerror_r,[#include <string.h>],
		ol_decl_strerror_r=yes, ol_decl_strerror_r=no)dnl

	if test $ol_decl_strerror_r = yes ; then
Kurt Zeilenga's avatar
Kurt Zeilenga committed
855
		AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <string.h>]], [[   /* from autoconf 2.59 */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
856
857
858
				char buf[100];
				char x = *strerror_r (0, buf, sizeof buf);
				char *p = strerror_r (0, buf, sizeof buf);
Kurt Zeilenga's avatar
Kurt Zeilenga committed
859
			]])],[ol_cv_nonposix_strerror_r=yes],[ol_cv_nonposix_strerror_r=no])
Kurt Zeilenga's avatar
Kurt Zeilenga committed
860
	else
Kurt Zeilenga's avatar
Kurt Zeilenga committed
861
		AC_RUN_IFELSE([AC_LANG_SOURCE([[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
862
863
864
865
866
867
			main() {
				char buf[100];
				buf[0] = 0;
				strerror_r( 1, buf, sizeof buf );
				exit( buf[0] == 0 );
			}
Kurt Zeilenga's avatar
Kurt Zeilenga committed
868
			]])],[ol_cv_nonposix_strerror_r=yes],[ol_cv_nonposix_strerror=no],[ol_cv_nonposix_strerror=no])
Kurt Zeilenga's avatar
Kurt Zeilenga committed
869
870
871
872
873
874
875
	fi
	])
if test $ol_cv_nonposix_strerror_r = yes ; then
	AC_DEFINE(HAVE_NONPOSIX_STRERROR_R,1,
		[define if strerror_r returns char* instead of int])
fi
])dnl
876
dnl
Kurt Zeilenga's avatar
Kurt Zeilenga committed
877
AC_DEFUN([OL_STRERROR],
878
879
[OL_SYS_ERRLIST dnl TEMPORARY
AC_CHECK_FUNCS(strerror strerror_r)
Kurt Zeilenga's avatar
Kurt Zeilenga committed
880
881
882
883
884
885
886
ol_cv_func_strerror_r=no
if test "${ac_cv_func_strerror_r}" = yes ; then
	OL_NONPOSIX_STRERROR_R
elif test "${ac_cv_func_strerror}" = no ; then
	OL_SYS_ERRLIST
fi
])dnl
887
888
889
890
dnl ====================================================================
dnl Early MIPS compilers (used in Ultrix 4.2) don't like
dnl "int x; int *volatile a = &x; *a = 0;"
dnl 	-- borrowed from PDKSH
Kurt Zeilenga's avatar
Kurt Zeilenga committed
891
AC_DEFUN([OL_C_VOLATILE],
892
 [AC_CACHE_CHECK(if compiler understands volatile, ol_cv_c_volatile,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
893
    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[int x, y, z;]], [[volatile int a; int * volatile b = x ? &y : &z;
894
      /* Older MIPS compilers (eg., in Ultrix 4.2) don't like *b = 0 */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
895
      *b = 0;]])],[ol_cv_c_volatile=yes],[ol_cv_c_volatile=no])])
896
897
898
  if test $ol_cv_c_volatile = yes; then
    : 
  else
899
    AC_DEFINE(volatile,,[define as empty if volatile is not supported])
900
901
  fi
 ])dnl
902
dnl
903
dnl ====================================================================
904
905
dnl Look for fetch(3)
AC_DEFUN([OL_LIB_FETCH],
906
[ol_LIBS=$LIBS
907
908
LIBS="-lfetch -lcom_err $LIBS"
AC_CACHE_CHECK([fetch(3) library],ol_cv_lib_fetch,[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
909
	AC_LINK_IFELSE([AC_LANG_PROGRAM([[
Quanah Gibson-Mount's avatar
Quanah Gibson-Mount committed
910
#ifdef HAVE_SYS_PARAM_H
911
#include <sys/param.h>
Quanah Gibson-Mount's avatar
Quanah Gibson-Mount committed
912
#endif
913
#include <stdio.h>
Kurt Zeilenga's avatar
Kurt Zeilenga committed
914
#include <fetch.h>]], [[struct url *u = fetchParseURL("file:///"); ]])],[ol_cv_lib_fetch=yes],[ol_cv_lib_fetch=no])])
915
916
917
918
919
920
921
922
923
LIBS=$ol_LIBS
if test $ol_cv_lib_fetch != no ; then
	ol_link_fetch="-lfetch -lcom_err"
	AC_DEFINE(HAVE_FETCH,1,
		[define if you actually have FreeBSD fetch(3)])
fi
])dnl
dnl
dnl ====================================================================
Kurt Zeilenga's avatar
Kurt Zeilenga committed
924
dnl Define inet_aton is available
Kurt Zeilenga's avatar
Kurt Zeilenga committed
925
AC_DEFUN([OL_FUNC_INET_ATON],
Kurt Zeilenga's avatar
Kurt Zeilenga committed
926
 [AC_CACHE_CHECK([for inet_aton()], ol_cv_func_inet_aton,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
927
    [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
928
929
930
931
932
933
934
935
936
937
938
939
940
#ifdef HAVE_SYS_TYPES_H
#	include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#	include <sys/socket.h>
#	ifdef HAVE_SYS_SELECT_H
#		include <sys/select.h>
#	endif
#	include <netinet/in.h>
#	ifdef HAVE_ARPA_INET_H
#		include <arpa/inet.h>
#	endif
#endif
Kurt Zeilenga's avatar
Kurt Zeilenga committed
941
942
]], [[struct in_addr in;
int rc = inet_aton( "255.255.255.255", &in );]])],[ol_cv_func_inet_aton=yes],[ol_cv_func_inet_aton=no])])
Kurt Zeilenga's avatar
Kurt Zeilenga committed
943
944
945
946
947
948
949
  if test $ol_cv_func_inet_aton != no; then
    AC_DEFINE(HAVE_INET_ATON, 1,
		[define to you inet_aton(3) is available])
  fi
 ])dnl
dnl
dnl ====================================================================
Bart Hartgers's avatar
   
Bart Hartgers committed
950
dnl check no of arguments for ctime_r
Kurt Zeilenga's avatar
Kurt Zeilenga committed
951
AC_DEFUN([OL_FUNC_CTIME_R_NARGS],
952
 [AC_CACHE_CHECK(number of arguments of ctime_r, ol_cv_func_ctime_r_nargs,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
953
   [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])
954

Kurt Zeilenga's avatar
Kurt Zeilenga committed
955
	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])
956

957
958
	if test $ol_cv_func_ctime_r_nargs3 = yes &&
	   test $ol_cv_func_ctime_r_nargs2 = no ; then
959
960
961

		ol_cv_func_ctime_r_nargs=3

962
963
	elif test $ol_cv_func_ctime_r_nargs3 = no &&
	     test $ol_cv_func_ctime_r_nargs2 = yes ; then
964
965
966
967
968
969
970
971

		ol_cv_func_ctime_r_nargs=2

	else
		ol_cv_func_ctime_r_nargs=0
	fi
  ])

972
  if test $ol_cv_func_ctime_r_nargs -gt 1 ; then
973
 	AC_DEFINE_UNQUOTED(CTIME_R_NARGS, $ol_cv_func_ctime_r_nargs,
974
		[set to the number of arguments ctime_r() expects])
Bart Hartgers's avatar
   
Bart Hartgers committed
975
976
  fi
])dnl
977
dnl
978
979
dnl --------------------------------------------------------------------
dnl check return type of ctime_r()
Kurt Zeilenga's avatar
Kurt Zeilenga committed
980
AC_DEFUN([OL_FUNC_CTIME_R_TYPE],
981
 [AC_CACHE_CHECK(return type of ctime_r, ol_cv_func_ctime_r_type,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
982
   [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"])
983
984
	])
  if test $ol_cv_func_ctime_r_type = "int" ; then
985
	AC_DEFINE(CTIME_R_RETURNS_INT,1, [define if ctime_r() returns int])
986
987
  fi
])dnl
Bart Hartgers's avatar
   
Bart Hartgers committed
988
989
dnl ====================================================================
dnl check no of arguments for gethostbyname_r
Kurt Zeilenga's avatar
Kurt Zeilenga committed
990
AC_DEFUN([OL_FUNC_GETHOSTBYNAME_R_NARGS],
991
992
 [AC_CACHE_CHECK(number of arguments of gethostbyname_r,
	ol_cv_func_gethostbyname_r_nargs,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
993
	[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
994
995
996
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
Kurt Zeilenga's avatar
Kurt Zeilenga committed
997
#define BUFSIZE (sizeof(struct hostent)+10)]], [[struct hostent hent; char buffer[BUFSIZE];
998
999
		int bufsize=BUFSIZE;int h_errno;
		(void)gethostbyname_r("segovia.cs.purdue.edu", &hent,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
1000
			buffer, bufsize, &h_errno);]])],[ol_cv_func_gethostbyname_r_nargs5=yes],[ol_cv_func_gethostbyname_r_nargs5=no])
1001

Kurt Zeilenga's avatar
Kurt Zeilenga committed
1002
	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
1003
1004
1005
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
Kurt Zeilenga's avatar
Kurt Zeilenga committed
1006
#define BUFSIZE (sizeof(struct hostent)+10)]], [[struct hostent hent;struct hostent *rhent;
1007
1008
1009
		char buffer[BUFSIZE];
		int bufsize=BUFSIZE;int h_errno;
		(void)gethostbyname_r("localhost", &hent, buffer, bufsize,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
1010
			&rhent, &h_errno);]])],[ol_cv_func_gethostbyname_r_nargs6=yes],[ol_cv_func_gethostbyname_r_nargs6=no])
1011

1012
1013
	if test $ol_cv_func_gethostbyname_r_nargs5 = yes &&
	   test $ol_cv_func_gethostbyname_r_nargs6 = no ; then
1014
1015
1016

		ol_cv_func_gethostbyname_r_nargs=5

1017
1018
	elif test $ol_cv_func_gethostbyname_r_nargs5 = no &&
	     test $ol_cv_func_gethostbyname_r_nargs6 = yes ; then
1019
1020
1021
1022
1023
1024
1025

		ol_cv_func_gethostbyname_r_nargs=6

	else
		ol_cv_func_gethostbyname_r_nargs=0
	fi
  ])
Bart Hartgers's avatar
   
Bart Hartgers committed
1026
  if test $ol_cv_func_gethostbyname_r_nargs -gt 1 ; then
1027
	AC_DEFINE_UNQUOTED(GETHOSTBYNAME_R_NARGS,
1028
1029
		$ol_cv_func_gethostbyname_r_nargs,
		[set to the number of arguments gethostbyname_r() expects])
Bart Hartgers's avatar
   
Bart Hartgers committed
1030
1031
  fi
])dnl
1032
dnl
Bart Hartgers's avatar
   
Bart Hartgers committed
1033
dnl check no of arguments for gethostbyaddr_r
Kurt Zeilenga's avatar
Kurt Zeilenga committed
1034
AC_DEFUN([OL_FUNC_GETHOSTBYADDR_R_NARGS],
1035
1036
 [AC_CACHE_CHECK(number of arguments of gethostbyaddr_r,
	[ol_cv_func_gethostbyaddr_r_nargs],
Kurt Zeilenga's avatar
Kurt Zeilenga committed
1037
	[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
1038
1039
1040
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
Kurt Zeilenga's avatar
Kurt Zeilenga committed
1041
#define BUFSIZE (sizeof(struct hostent)+10)]], [[struct hostent hent; char buffer[BUFSIZE]; 
Kurt Zeilenga's avatar
Kurt Zeilenga committed
1042
	    struct in_addr add;
1043
1044
1045
	    size_t alen=sizeof(struct in_addr);
	    int bufsize=BUFSIZE;int h_errno;
		(void)gethostbyaddr_r( (void *)&(add.s_addr),
Kurt Zeilenga's avatar
Kurt Zeilenga committed
1046
			alen, AF_INET, &hent, buffer, bufsize, &h_errno);]])],[ol_cv_func_gethostbyaddr_r_nargs7=yes],[ol_cv_func_gethostbyaddr_r_nargs7=no])
1047

Kurt Zeilenga's avatar
Kurt Zeilenga committed
1048
	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
1049
1050
1051
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
Kurt Zeilenga's avatar
Kurt Zeilenga committed
1052
#define BUFSIZE (sizeof(struct hostent)+10)]], [[struct hostent hent;
1053
1054
1055
1056
1057
1058
		struct hostent *rhent; char buffer[BUFSIZE]; 
		struct in_addr add;
		size_t alen=sizeof(struct in_addr);
		int bufsize=BUFSIZE;int h_errno;
		(void)gethostbyaddr_r( (void *)&(add.s_addr),
			alen, AF_INET, &hent, buffer, bufsize, 
Kurt Zeilenga's avatar
Kurt Zeilenga committed
1059
			&rhent, &h_errno);]])],[ol_cv_func_gethostbyaddr_r_nargs8=yes],[ol_cv_func_gethostbyaddr_r_nargs8=no])
1060

1061
1062
	if test $ol_cv_func_gethostbyaddr_r_nargs7 = yes &&
	   test $ol_cv_func_gethostbyaddr_r_nargs8 = no ; then
1063

1064
		ol_cv_func_gethostbyaddr_r_nargs=7
1065

1066
1067
	elif test $ol_cv_func_gethostbyaddr_r_nargs7 = no &&
	     test $ol_cv_func_gethostbyaddr_r_nargs8 = yes ; then
1068
1069
1070
1071
1072
1073
1074

		ol_cv_func_gethostbyaddr_r_nargs=8

	else
		ol_cv_func_gethostbyaddr_r_nargs=0
	fi
  ])
Bart Hartgers's avatar
   
Bart Hartgers committed
1075
  if test $ol_cv_func_gethostbyaddr_r_nargs -gt 1 ; then
1076
1077
1078
    AC_DEFINE_UNQUOTED(GETHOSTBYADDR_R_NARGS,
		$ol_cv_func_gethostbyaddr_r_nargs,
		[set to the number of arguments gethostbyaddr_r() expects])
Bart Hartgers's avatar
   
Bart Hartgers committed
1079
1080
  fi
])dnl
1081
dnl
1082
dnl --------------------------------------------------------------------
1083
dnl Check for Cyrus SASL version compatility
1084
1085
1086
AC_DEFUN([OL_SASL_COMPAT],
[AC_CACHE_CHECK([Cyrus SASL library version], [ol_cv_sasl_compat],[
	AC_EGREP_CPP(__sasl_compat,[
1087
#ifdef HAVE_SASL_SASL_H
1088
#include <sasl/sasl.h>
1089
1090
1091
#else
#include <sasl.h>
#endif
1092

1093
/* Require 2.1.15+ */
1094
#if SASL_VERSION_MAJOR == 2  && SASL_VERSION_MINOR > 1
Kurt Zeilenga's avatar
Kurt Zeilenga committed
1095
	char *__sasl_compat = "2.2+ or better okay (we guess)";
1096
#elif SASL_VERSION_MAJOR == 2  && SASL_VERSION_MINOR == 1 \
1097
1098
	&& SASL_VERSION_STEP >=15
	char *__sasl_compat = "2.1.15+ or better okay";
1099
#endif
1100
	],	[ol_cv_sasl_compat=yes], [ol_cv_sasl_compat=no])])
1101
])
1102
dnl ====================================================================
Kurt Zeilenga's avatar
Kurt Zeilenga committed
1103
dnl check for SSL compatibility
1104
AC_DEFUN([OL_SSL_COMPAT],