openldap.m4 24.4 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
122
	AC_DEFINE(HAVE_EBCDIC,1, [define if system uses EBCDIC instead of ASCII])
fi
])
dnl
dnl --------------------------------------------------------------------
Kurt Zeilenga's avatar
Kurt Zeilenga committed
123
124
125
dnl Check for MSVC
AC_DEFUN([OL_MSVC],
[AC_REQUIRE_CPP()dnl
Kurt Zeilenga's avatar
Kurt Zeilenga committed
126
AC_CACHE_CHECK([whether we are using MS Visual C++], ol_cv_msvc,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
127
128
129
130
131
132
133
[AC_PREPROC_IFELSE([AC_LANG_SOURCE([[
#ifndef _MSC_VER
#include <__FOO__/generate_error.h>
#endif
]])],[ol_cv_msvc=yes],[ol_cv_msvc=no])])])

dnl --------------------------------------------------------------------
Kurt Zeilenga's avatar
Kurt Zeilenga committed
134
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
OL_RESOLVER_TRY(ol_cv_resolver_bind,[-lbind])
])
246
247
248
249
dnl
dnl ====================================================================
dnl Check POSIX Thread version 
dnl
Howard Chu's avatar
Howard Chu committed
250
dnl defines ol_cv_pthread_version to 4, 5, 6, 7, 8, 10, depending on the
251
252
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
253
dnl	Existence of pthread.h should be tested separately.
254
dnl
255
dnl tests:
Howard Chu's avatar
Howard Chu committed
256
257
258
259
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
260
261
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
262
dnl	pthread_attr_default was dropped in Draft 6, only 4 and 5 have it
263
264
265
266
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
267
dnl Draft 9 and 10 are equivalent for our purposes.
268
dnl
269
270
AC_DEFUN([OL_POSIX_THREAD_VERSION],
[AC_CACHE_CHECK([POSIX thread version],[ol_cv_pthread_version],[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
271
	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
Howard Chu's avatar
Howard Chu committed
272
#		include <pthread.h>
Kurt Zeilenga's avatar
Kurt Zeilenga committed
273
	]], [[
Howard Chu's avatar
Howard Chu committed
274
		int i = PTHREAD_CREATE_JOINABLE;
Kurt Zeilenga's avatar
Kurt Zeilenga committed
275
	]])],[
Howard Chu's avatar
Howard Chu committed
276
277
	AC_EGREP_HEADER(pthread_detach,pthread.h,
	ol_cv_pthread_version=10, ol_cv_pthread_version=8)],[
278
	AC_EGREP_CPP(draft7,[
279
#		include <pthread.h>
280
#		ifdef PTHREAD_CREATE_UNDETACHED
281
		draft7
282
#		endif
283
	], ol_cv_pthread_version=7, [
Howard Chu's avatar
Howard Chu committed
284
285
	AC_EGREP_HEADER(pthread_attr_init,pthread.h,
	ol_cv_pthread_version=6, [
286
287
288
289
290
	AC_EGREP_CPP(draft5,[
#		include <pthread.h>
#ifdef		PTHREAD_MUTEX_INITIALIZER
		draft5
#endif
Howard Chu's avatar
Howard Chu committed
291
	], ol_cv_pthread_version=5, ol_cv_pthread_version=4) ]) ]) ])
292
293
294
])
])dnl
dnl
295
dnl --------------------------------------------------------------------
Kurt Zeilenga's avatar
Kurt Zeilenga committed
296
297
AC_DEFUN([OL_PTHREAD_TEST_INCLUDES], [[
/* pthread test headers */
298
#include <pthread.h>
299
300
301
#if HAVE_PTHREADS < 7
#include <errno.h>
#endif
302
303
304
#ifndef NULL
#define NULL (void*)0
#endif
Kurt Zeilenga's avatar
Kurt Zeilenga committed
305
306
307
308
309
310

static void *task(p)
	void *p;
{
	return (void *) (p == NULL);
}
Kurt Zeilenga's avatar
Kurt Zeilenga committed
311
312
]])
AC_DEFUN([OL_PTHREAD_TEST_FUNCTION],[[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
313
	/* pthread test function */
314
315
316
#ifndef PTHREAD_CREATE_DETACHED
#define	PTHREAD_CREATE_DETACHED	1
#endif
317
	pthread_t t;
Kurt Zeilenga's avatar
Kurt Zeilenga committed
318
	int status;
319
	int detach = PTHREAD_CREATE_DETACHED;
320

321
#if HAVE_PTHREADS > 4
322
	/* Final pthreads */
323
	pthread_attr_t attr;
Kurt Zeilenga's avatar
Kurt Zeilenga committed
324

325
	status = pthread_attr_init(&attr);
326
	if( status ) return status;
327

328
329
330
#if HAVE_PTHREADS < 7
	status = pthread_attr_setdetachstate(&attr, &detach);
	if( status < 0 ) status = errno;
331
#else
332
	status = pthread_attr_setdetachstate(&attr, detach);
333
334
335
#endif
	if( status ) return status;
	status = pthread_create( &t, &attr, task, NULL );
336
337
#if HAVE_PTHREADS < 7
	if( status < 0 ) status = errno;
338
#endif
339
	if( status ) return status;
340
#else
341
342
	/* Draft 4 pthreads */
	status = pthread_create( &t, pthread_attr_default, task, NULL );
343
	if( status ) return errno;
344

345
346
347
	/* give thread a chance to complete */
	/* it should remain joinable and hence detachable */
	sleep( 1 );
348

349
350
	status = pthread_detach( &t );
	if( status ) return errno;
351
#endif
Kurt Zeilenga's avatar
Kurt Zeilenga committed
352

353
354
355
#ifdef HAVE_LINUX_THREADS
	pthread_kill_other_threads_np();
#endif
Kurt Zeilenga's avatar
Kurt Zeilenga committed
356

357
	return 0;
Kurt Zeilenga's avatar
Kurt Zeilenga committed
358
]])
Kurt Zeilenga's avatar
Kurt Zeilenga committed
359
360

AC_DEFUN([OL_PTHREAD_TEST_PROGRAM],
361
[AC_LANG_SOURCE([OL_PTHREAD_TEST_INCLUDES
Kurt Zeilenga's avatar
Kurt Zeilenga committed
362
363
364
365
366
367
368

int main(argc, argv)
	int argc;
	char **argv;
{
OL_PTHREAD_TEST_FUNCTION
}
369
])])
Kurt Zeilenga's avatar
Kurt Zeilenga committed
370
371
372
373
374
375
376
377
378
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
379
380
381
		AC_RUN_IFELSE([OL_PTHREAD_TEST_PROGRAM],
			[$2=yes],
			[$2=no],
Howard Chu's avatar
Howard Chu committed
382
383
			[AC_LINK_IFELSE([AC_LANG_PROGRAM(OL_PTHREAD_TEST_INCLUDES,
				OL_PTHREAD_TEST_FUNCTION)],
Kurt Zeilenga's avatar
Kurt Zeilenga committed
384
				[$2=yes], [$2=no])])
385
386

		# restore the LIBS
387
		LIBS="$ol_LIBS"
Kurt Zeilenga's avatar
Kurt Zeilenga committed
388
	])
389

Kurt Zeilenga's avatar
Kurt Zeilenga committed
390
391
392
	if test $$2 = yes ; then
		ol_link_pthreads="$1"
		ol_link_threads=posix
393
	fi
Kurt Zeilenga's avatar
Kurt Zeilenga committed
394
fi
395
396
])
dnl
397
dnl ====================================================================
398
399
400
401
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
Josh Soref's avatar
Josh Soref committed
402
dnl		doesn't exist.  Existence of pthread.h should separately
403
404
405
406
407
408
409
410
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
411
	__gnu_pth__;
412
413
414
415
416
417
418
#endif
],
			[ol_cv_header_gnu_pth_pthread_h=yes],
			[ol_cv_header_gnu_pth_pthread_h=no])
		])
])dnl
dnl ====================================================================
419
420
dnl Check for NT Threads
AC_DEFUN([OL_NT_THREADS], [
Kurt Zeilenga's avatar
Kurt Zeilenga committed
421
	AC_CHECK_FUNC(_beginthread)
422

Kurt Zeilenga's avatar
Kurt Zeilenga committed
423
	if test $ac_cv_func__beginthread = yes ; then
424
		AC_DEFINE(HAVE_NT_THREADS,1,[if you have NT Threads])
Howard Chu's avatar
Howard Chu committed
425
		ol_cv_nt_threads=yes
426
427
428
	fi
])
dnl ====================================================================
429
dnl Check LinuxThreads Header
430
dnl
431
dnl defines ol_cv_header linux_threads to 'yes' or 'no'
432
dnl		'no' implies pthreads.h is not LinuxThreads or pthreads.h
Josh Soref's avatar
Josh Soref committed
433
dnl		doesn't exist.  Existence of pthread.h should separately
434
435
dnl		checked.
dnl 
436
437
AC_DEFUN([OL_HEADER_LINUX_THREADS], [
	AC_CACHE_CHECK([for LinuxThreads pthread.h],
438
439
440
441
442
443
444
445
446
447
		[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
448
dnl --------------------------------------------------------------------
449
dnl	Check LinuxThreads Implementation
450
dnl
451
452
dnl	defines ol_cv_sys_linux_threads to 'yes' or 'no'
dnl	'no' implies pthreads implementation is not LinuxThreads.
453
454
dnl 
AC_DEFUN([OL_SYS_LINUX_THREADS], [
Kurt Zeilenga's avatar
Kurt Zeilenga committed
455
	AC_CHECK_FUNCS(pthread_kill_other_threads_np)
456
457
458
459
460
461
	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 --------------------------------------------------------------------
462
dnl Check LinuxThreads consistency
463
464
465
466
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], [
467
468
		if test $ol_cv_header_linux_threads = yes &&
		   test $ol_cv_sys_linux_threads = yes; then
469
			ol_cv_linux_threads=yes
470
471
		elif test $ol_cv_header_linux_threads = no &&
		     test $ol_cv_sys_linux_threads = no; then
472
			ol_cv_linux_threads=no
473
		else
474
			ol_cv_linux_threads=error
475
		fi
476
	])
477
478
479
])dnl
dnl
dnl ====================================================================
480
481
dnl Check for POSIX Regex
AC_DEFUN([OL_POSIX_REGEX], [
482
AC_CACHE_CHECK([for compatible POSIX regex],ol_cv_c_posix_regex,[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
483
	AC_RUN_IFELSE([AC_LANG_SOURCE([[
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
#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
505
}]])],[ol_cv_c_posix_regex=yes],[ol_cv_c_posix_regex=no],[ol_cv_c_posix_regex=cross])])
506
507
508
])
dnl
dnl ====================================================================
509
510
dnl Check if toupper() requires islower() to be called first
AC_DEFUN([OL_C_UPPER_LOWER],
511
[AC_CACHE_CHECK([if toupper() requires islower()],ol_cv_c_upper_lower,[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
512
	AC_RUN_IFELSE([AC_LANG_SOURCE([[
513
514
515
516
517
518
519
#include <ctype.h>
main()
{
	if ('C' == toupper('C'))
		exit(0);
	else
		exit(1);
Kurt Zeilenga's avatar
Kurt Zeilenga committed
520
}]])],[ol_cv_c_upper_lower=no],[ol_cv_c_upper_lower=yes],[ol_cv_c_upper_lower=safe])])
521
if test $ol_cv_c_upper_lower != no ; then
522
	AC_DEFINE(C_UPPER_LOWER,1, [define if toupper() requires islower()])
523
524
fi
])
525
dnl
526
dnl ====================================================================
Kurt Zeilenga's avatar
Kurt Zeilenga committed
527
528
dnl Error string checks
dnl
529
530
531
532
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],
533
[AC_CACHE_CHECK([declaration of sys_errlist],ol_cv_dcl_sys_errlist,[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
534
	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
535
536
#include <stdio.h>
#include <sys/types.h>
537
#include <errno.h>
538
#ifdef _WIN32
539
#include <stdlib.h>
Kurt Zeilenga's avatar
Kurt Zeilenga committed
540
541
#endif ]], [[char *c = (char *) *sys_errlist]])],[ol_cv_dcl_sys_errlist=yes
	ol_cv_have_sys_errlist=yes],[ol_cv_dcl_sys_errlist=no])])
542
#
543
544
# It's possible (for near-UNIX clones) that sys_errlist doesn't exist
if test $ol_cv_dcl_sys_errlist = no ; then
545
	AC_DEFINE(DECL_SYS_ERRLIST,1,
546
		[define if sys_errlist is not declared in stdio.h or errno.h])
547
548

	AC_CACHE_CHECK([existence of sys_errlist],ol_cv_have_sys_errlist,[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
549
		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])])
550
551
552
553
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])
554
fi
555
])dnl
Kurt Zeilenga's avatar
Kurt Zeilenga committed
556
557
558
559
560
561
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
562
		AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <string.h>]], [[   /* from autoconf 2.59 */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
563
564
565
				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
566
			]])],[ol_cv_nonposix_strerror_r=yes],[ol_cv_nonposix_strerror_r=no])
Kurt Zeilenga's avatar
Kurt Zeilenga committed
567
	else
Kurt Zeilenga's avatar
Kurt Zeilenga committed
568
		AC_RUN_IFELSE([AC_LANG_SOURCE([[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
569
570
571
572
573
574
			main() {
				char buf[100];
				buf[0] = 0;
				strerror_r( 1, buf, sizeof buf );
				exit( buf[0] == 0 );
			}
Kurt Zeilenga's avatar
Kurt Zeilenga committed
575
			]])],[ol_cv_nonposix_strerror_r=yes],[ol_cv_nonposix_strerror=no],[ol_cv_nonposix_strerror=no])
Kurt Zeilenga's avatar
Kurt Zeilenga committed
576
577
578
579
580
581
582
	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
583
dnl
Kurt Zeilenga's avatar
Kurt Zeilenga committed
584
AC_DEFUN([OL_STRERROR],
585
586
[OL_SYS_ERRLIST dnl TEMPORARY
AC_CHECK_FUNCS(strerror strerror_r)
Kurt Zeilenga's avatar
Kurt Zeilenga committed
587
588
589
590
591
592
593
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
594
595
596
597
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
598
AC_DEFUN([OL_C_VOLATILE],
599
 [AC_CACHE_CHECK(if compiler understands volatile, ol_cv_c_volatile,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
600
    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[int x, y, z;]], [[volatile int a; int * volatile b = x ? &y : &z;
601
      /* Older MIPS compilers (eg., in Ultrix 4.2) don't like *b = 0 */
Kurt Zeilenga's avatar
Kurt Zeilenga committed
602
      *b = 0;]])],[ol_cv_c_volatile=yes],[ol_cv_c_volatile=no])])
603
604
605
  if test $ol_cv_c_volatile = yes; then
    : 
  else
606
    AC_DEFINE(volatile,,[define as empty if volatile is not supported])
607
608
  fi
 ])dnl
609
dnl
610
dnl ====================================================================
611
612
dnl Look for fetch(3)
AC_DEFUN([OL_LIB_FETCH],
613
[ol_LIBS=$LIBS
614
615
LIBS="-lfetch -lcom_err $LIBS"
AC_CACHE_CHECK([fetch(3) library],ol_cv_lib_fetch,[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
616
	AC_LINK_IFELSE([AC_LANG_PROGRAM([[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
617
#ifdef HAVE_SYS_PARAM_H
618
#include <sys/param.h>
Kurt Zeilenga's avatar
Kurt Zeilenga committed
619
#endif
620
#include <stdio.h>
Kurt Zeilenga's avatar
Kurt Zeilenga committed
621
#include <fetch.h>]], [[struct url *u = fetchParseURL("file:///"); ]])],[ol_cv_lib_fetch=yes],[ol_cv_lib_fetch=no])])
622
623
624
625
626
627
628
629
630
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
631
dnl Define inet_aton is available
Kurt Zeilenga's avatar
Kurt Zeilenga committed
632
AC_DEFUN([OL_FUNC_INET_ATON],
Kurt Zeilenga's avatar
Kurt Zeilenga committed
633
 [AC_CACHE_CHECK([for inet_aton()], ol_cv_func_inet_aton,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
634
    [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
Kurt Zeilenga's avatar
Kurt Zeilenga committed
635
636
637
638
639
640
641
642
643
644
645
646
647
#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
648
649
]], [[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
650
651
652
653
654
655
656
  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
657
dnl check no of arguments for ctime_r
Kurt Zeilenga's avatar
Kurt Zeilenga committed
658
AC_DEFUN([OL_FUNC_CTIME_R_NARGS],
659
 [AC_CACHE_CHECK(number of arguments of ctime_r, ol_cv_func_ctime_r_nargs,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
660
   [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])
661

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

664
665
	if test $ol_cv_func_ctime_r_nargs3 = yes &&
	   test $ol_cv_func_ctime_r_nargs2 = no ; then
666
667
668

		ol_cv_func_ctime_r_nargs=3

669
670
	elif test $ol_cv_func_ctime_r_nargs3 = no &&
	     test $ol_cv_func_ctime_r_nargs2 = yes ; then
671
672
673
674
675
676
677
678

		ol_cv_func_ctime_r_nargs=2

	else
		ol_cv_func_ctime_r_nargs=0
	fi
  ])

679
  if test $ol_cv_func_ctime_r_nargs -gt 1 ; then
680
 	AC_DEFINE_UNQUOTED(CTIME_R_NARGS, $ol_cv_func_ctime_r_nargs,
681
		[set to the number of arguments ctime_r() expects])
Bart Hartgers's avatar
   
Bart Hartgers committed
682
683
  fi
])dnl
684
dnl
685
686
dnl --------------------------------------------------------------------
dnl check return type of ctime_r()
Kurt Zeilenga's avatar
Kurt Zeilenga committed
687
AC_DEFUN([OL_FUNC_CTIME_R_TYPE],
688
 [AC_CACHE_CHECK(return type of ctime_r, ol_cv_func_ctime_r_type,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
689
   [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"])
690
691
	])
  if test $ol_cv_func_ctime_r_type = "int" ; then
692
	AC_DEFINE(CTIME_R_RETURNS_INT,1, [define if ctime_r() returns int])
693
694
  fi
])dnl
Bart Hartgers's avatar
   
Bart Hartgers committed
695
696
dnl ====================================================================
dnl check no of arguments for gethostbyname_r
Kurt Zeilenga's avatar
Kurt Zeilenga committed
697
AC_DEFUN([OL_FUNC_GETHOSTBYNAME_R_NARGS],
698
699
 [AC_CACHE_CHECK(number of arguments of gethostbyname_r,
	ol_cv_func_gethostbyname_r_nargs,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
700
	[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
701
702
703
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
Kurt Zeilenga's avatar
Kurt Zeilenga committed
704
#define BUFSIZE (sizeof(struct hostent)+10)]], [[struct hostent hent; char buffer[BUFSIZE];
705
706
		int bufsize=BUFSIZE;int h_errno;
		(void)gethostbyname_r("segovia.cs.purdue.edu", &hent,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
707
			buffer, bufsize, &h_errno);]])],[ol_cv_func_gethostbyname_r_nargs5=yes],[ol_cv_func_gethostbyname_r_nargs5=no])
708

Kurt Zeilenga's avatar
Kurt Zeilenga committed
709
	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
710
711
712
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
Kurt Zeilenga's avatar
Kurt Zeilenga committed
713
#define BUFSIZE (sizeof(struct hostent)+10)]], [[struct hostent hent;struct hostent *rhent;
714
715
716
		char buffer[BUFSIZE];
		int bufsize=BUFSIZE;int h_errno;
		(void)gethostbyname_r("localhost", &hent, buffer, bufsize,
Kurt Zeilenga's avatar
Kurt Zeilenga committed
717
			&rhent, &h_errno);]])],[ol_cv_func_gethostbyname_r_nargs6=yes],[ol_cv_func_gethostbyname_r_nargs6=no])
718

719
720
	if test $ol_cv_func_gethostbyname_r_nargs5 = yes &&
	   test $ol_cv_func_gethostbyname_r_nargs6 = no ; then
721
722
723

		ol_cv_func_gethostbyname_r_nargs=5

724
725
	elif test $ol_cv_func_gethostbyname_r_nargs5 = no &&
	     test $ol_cv_func_gethostbyname_r_nargs6 = yes ; then
726
727
728
729
730
731
732

		ol_cv_func_gethostbyname_r_nargs=6

	else
		ol_cv_func_gethostbyname_r_nargs=0
	fi
  ])
Bart Hartgers's avatar
   
Bart Hartgers committed
733
  if test $ol_cv_func_gethostbyname_r_nargs -gt 1 ; then
734
	AC_DEFINE_UNQUOTED(GETHOSTBYNAME_R_NARGS,
735
736
		$ol_cv_func_gethostbyname_r_nargs,
		[set to the number of arguments gethostbyname_r() expects])
Bart Hartgers's avatar
   
Bart Hartgers committed
737
738
  fi
])dnl
739
dnl
Bart Hartgers's avatar
   
Bart Hartgers committed
740
dnl check no of arguments for gethostbyaddr_r
Kurt Zeilenga's avatar
Kurt Zeilenga committed
741
AC_DEFUN([OL_FUNC_GETHOSTBYADDR_R_NARGS],
742
743
 [AC_CACHE_CHECK(number of arguments of gethostbyaddr_r,
	[ol_cv_func_gethostbyaddr_r_nargs],
Kurt Zeilenga's avatar
Kurt Zeilenga committed
744
	[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
745
746
747
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
Kurt Zeilenga's avatar
Kurt Zeilenga committed
748
#define BUFSIZE (sizeof(struct hostent)+10)]], [[struct hostent hent; char buffer[BUFSIZE]; 
Kurt Zeilenga's avatar
Kurt Zeilenga committed
749
	    struct in_addr add;
750
751
752
	    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
753
			alen, AF_INET, &hent, buffer, bufsize, &h_errno);]])],[ol_cv_func_gethostbyaddr_r_nargs7=yes],[ol_cv_func_gethostbyaddr_r_nargs7=no])
754

Kurt Zeilenga's avatar
Kurt Zeilenga committed
755
	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
756
757
758
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
Kurt Zeilenga's avatar
Kurt Zeilenga committed
759
#define BUFSIZE (sizeof(struct hostent)+10)]], [[struct hostent hent;
760
761
762
763
764
765
		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
766
			&rhent, &h_errno);]])],[ol_cv_func_gethostbyaddr_r_nargs8=yes],[ol_cv_func_gethostbyaddr_r_nargs8=no])
767

768
769
	if test $ol_cv_func_gethostbyaddr_r_nargs7 = yes &&
	   test $ol_cv_func_gethostbyaddr_r_nargs8 = no ; then
770

771
		ol_cv_func_gethostbyaddr_r_nargs=7
772

773
774
	elif test $ol_cv_func_gethostbyaddr_r_nargs7 = no &&
	     test $ol_cv_func_gethostbyaddr_r_nargs8 = yes ; then
775
776
777
778
779
780
781

		ol_cv_func_gethostbyaddr_r_nargs=8

	else
		ol_cv_func_gethostbyaddr_r_nargs=0
	fi
  ])
Bart Hartgers's avatar
   
Bart Hartgers committed
782
  if test $ol_cv_func_gethostbyaddr_r_nargs -gt 1 ; then
783
784
785
    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
786
787
  fi
])dnl
788
dnl
789
dnl --------------------------------------------------------------------
Josh Soref's avatar
Josh Soref committed
790
dnl Check for Cyrus SASL version compatibility
791
792
793
AC_DEFUN([OL_SASL_COMPAT],
[AC_CACHE_CHECK([Cyrus SASL library version], [ol_cv_sasl_compat],[
	AC_EGREP_CPP(__sasl_compat,[
794
#ifdef HAVE_SASL_SASL_H
795
#include <sasl/sasl.h>
796
797
798
#else
#include <sasl.h>
#endif
799

800
/* Require 2.1.15+ */
801
#if SASL_VERSION_MAJOR == 2  && SASL_VERSION_MINOR > 1
Kurt Zeilenga's avatar
Kurt Zeilenga committed
802
	char *__sasl_compat = "2.2+ or better okay (we guess)";
803
#elif SASL_VERSION_MAJOR == 2  && SASL_VERSION_MINOR == 1 \
804
805
	&& SASL_VERSION_STEP >=15
	char *__sasl_compat = "2.1.15+ or better okay";
806
#endif
807
	],	[ol_cv_sasl_compat=yes], [ol_cv_sasl_compat=no])])
808
])