configure.in 83.2 KB
Newer Older
Automatic Updater's avatar
Automatic Updater committed
1
# Copyright (C) 2004-2009  Internet Systems Consortium, Inc. ("ISC")
Mark Andrews's avatar
Mark Andrews committed
2
# Copyright (C) 1998-2003  Internet Software Consortium.
3
#
Automatic Updater's avatar
Automatic Updater committed
4
# Permission to use, copy, modify, and/or distribute this software for any
David Lawrence's avatar
David Lawrence committed
5
6
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
7
#
Mark Andrews's avatar
Mark Andrews committed
8
9
10
11
12
13
14
# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
David Lawrence's avatar
David Lawrence committed
15

16
dnl
17
AC_DIVERT_PUSH(1)dnl
18
19
esyscmd([sed "s/^/# /" COPYRIGHT])dnl
AC_DIVERT_POP()dnl
David Lawrence's avatar
David Lawrence committed
20

21
AC_REVISION($Revision: 1.484 $)
22

23
AC_INIT(lib/dns/name.c)
24
AC_PREREQ(2.59)
Bob Halley's avatar
Bob Halley committed
25
26
27
28
29

AC_CONFIG_HEADER(config.h)

AC_CANONICAL_HOST

30
AC_PROG_MAKE_SET
31
32
33
34
35
36
37
38
39
40
41
42
43

#
# GNU libtool support
#
case $build_os in
sunos*)
    # Just set the maximum command line length for sunos as it otherwise
    # takes a exceptionally long time to work it out. Required for libtool.
     
    lt_cv_sys_max_cmd_len=4096;
    ;;
esac

44
AC_PROG_LIBTOOL
45
AC_PROG_INSTALL
46
AC_PROG_LN_S
47
48
49
50

AC_SUBST(STD_CINCLUDES)
AC_SUBST(STD_CDEFINES)
AC_SUBST(STD_CWARNINGS)
51
AC_SUBST(CCOPT)
52

53
54
55
56
57
58
59
60
61
62
63
64
# Warn if the user specified libbind, which is now deprecated
AC_ARG_ENABLE(libbind, [  --enable-libbind	  deprecated])

case "$enable_libbind" in
	yes)
		AC_MSG_ERROR(['libbind' is no longer part of the BIND 9 distribution.
It is available from http://www.isc.org as a separate download.])
		;;
	no|'')
		;;
esac

65
66
67
#
# Make very sure that these are the first files processed by
# config.status, since we use the processed output as the input for
Francis Dupont's avatar
Francis Dupont committed
68
# AC_SUBST_FILE() substitutions in other files.
69
70
71
#
AC_CONFIG_FILES([make/rules make/includes])

David Lawrence's avatar
David Lawrence committed
72
73
74
75
76
AC_PATH_PROG(AR, ar)
ARFLAGS="cruv"
AC_SUBST(AR)
AC_SUBST(ARFLAGS)

77
78
79
80
81
# The POSIX ln(1) program.  Non-POSIX systems may substitute
# "copy" or something.
LN=ln
AC_SUBST(LN)

82
83
84
85
86
87
88
89
90
91
case "$AR" in
	"")
		AC_MSG_ERROR([
ar program not found.  Please fix your PATH to include the directory in
which ar resides, or set AR in the environment with the full path to ar.
])

		;;
esac

Bob Halley's avatar
Bob Halley committed
92
93
94
#
# Etags.
#
95
AC_PATH_PROGS(ETAGS, etags emacs-etags)
Andreas Gustafsson's avatar
Andreas Gustafsson committed
96

Bob Halley's avatar
Bob Halley committed
97
98
99
100
101
102
103
104
105
106
107
108
109
#
# Some systems, e.g. RH7, have the Exuberant Ctags etags instead of
# GNU emacs etags, and it requires the -L flag.
#
if test "X$ETAGS" != "X"; then
	AC_MSG_CHECKING(for Exuberant Ctags etags)
	if $ETAGS --version 2>&1 | grep 'Exuberant Ctags' >/dev/null 2>&1; then
		AC_MSG_RESULT(yes)
		ETAGS="$ETAGS -L"
	else
		AC_MSG_RESULT(no)
	fi
fi
110
111
AC_SUBST(ETAGS)

112
113
#
# Perl is optional; it is used only by some of the system test scripts.
114
115
# Note: the backtrace feature (see below) uses perl to build the symbol table,
# but it still compiles without perl, in which case an empty table will be used.
116
117
118
119
#
AC_PATH_PROGS(PERL, perl5 perl)
AC_SUBST(PERL)

120
121
122
#
# Special processing of paths depending on whether --prefix,
# --sysconfdir or --localstatedir arguments were given.  What's
Mark Andrews's avatar
Mark Andrews committed
123
# desired is some compatibility with the way previous versions
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# of BIND built; they defaulted to /usr/local for most parts of
# the installation, but named.boot/named.conf was in /etc
# and named.pid was in /var/run.
#
# So ... if none of --prefix, --sysconfdir or --localstatedir are
# specified, set things up that way.  If --prefix is given, use
# it for sysconfdir and localstatedir the way configure normally
# would.  To change the prefix for everything but leave named.conf
# in /etc or named.pid in /var/run, then do this the usual configure way:
# ./configure --prefix=/somewhere --sysconfdir=/etc
# ./configure --prefix=/somewhere --localstatedir=/var
#
# To put named.conf and named.pid in /usr/local with everything else,
# set the prefix explicitly to /usr/local even though that's the default:
# ./configure --prefix=/usr/local
#
140
case "$prefix" in
141
142
143
144
145
146
147
148
149
150
151
152
	NONE)
		case "$sysconfdir" in
			'${prefix}/etc')
				sysconfdir=/etc
				;;
		esac
		case "$localstatedir" in
			'${prefix}/var')
				localstatedir=/var
				;;
		esac
		;;
153
154
esac

155
156
157
158
159
160
161
162
#
# Make sure INSTALL uses an absolute path, else it will be wrong in all
# Makefiles, since they use make/rules.in and INSTALL will be adjusted by
# configure based on the location of the file where it is substituted.
# Since in BIND9 INSTALL is only substituted into make/rules.in, an immediate
# subdirectory of install-sh, This relative path will be wrong for all
# directories more than one level down from install-sh.
#
163
164
case "$INSTALL" in
	/*)
165
166
167
168
169
170
171
172
173
174
175
176
177
178
		;;
	*)
		#
		# Not all systems have dirname.
		#
		changequote({, })
		ac_dir="`echo $INSTALL | sed 's%/[^/]*$%%'`"
		changequote([, ])

		ac_prog="`echo $INSTALL | sed 's%.*/%%'`"
		test "$ac_dir" = "$ac_prog" && ac_dir=.
		test -d "$ac_dir" && ac_dir="`(cd \"$ac_dir\" && pwd)`"
		INSTALL="$ac_dir/$ac_prog"
		;;
179
180
esac

181
182
183
184
185
186
187
188
#
# On these hosts, we really want to use cc, not gcc, even if it is
# found.  The gcc that these systems have will not correctly handle
# pthreads.
#
# However, if the user sets $CC to be something, let that override
# our change.
#
189
190
191
192
193
if test "X$CC" = "X" ; then
	case "$host" in
		*-dec-osf*)
			CC="cc"
			;;
194
		*-solaris*)
195
196
197
198
199
200
			# Use Sun's cc if it is available, but watch
			# out for /usr/ucb/cc; it will never be the right
			# compiler to use.
			#
			# If setting CC here fails, the AC_PROG_CC done
			# below might still find gcc.
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
			IFS="${IFS=	}"; ac_save_ifs="$IFS"; IFS=":"
			for ac_dir in $PATH; do
				test -z "$ac_dir" && ac_dir=.
				case "$ac_dir" in
				/usr/ucb)
					# exclude
					;;
				*)
					if test -f "$ac_dir/cc"; then
						CC="$ac_dir/cc"
						break
					fi
					;;
				esac
			done
			IFS="$ac_save_ifs"
217
218
219
220
221
222
223
224
225
226
			;;
		*-hp-hpux*)
			CC="cc"
			;;
		mips-sgi-irix*)
			CC="cc"
			;;
	esac
fi

227
228
AC_PROG_CC

229
230
231
232
233
#
# gcc's optimiser is broken at -02 for ultrasparc
#
if test "$ac_env_CFLAGS_set" != set -a "X$GCC" = "Xyes"; then
	case "$host" in
234
	sparc-*)
235
236
237
238
239
		CCFLAGS="-g -O1"
		;;
	esac
fi

240
#
241
# OS dependent CC flags
242
243
#
case "$host" in
Francis Dupont's avatar
Francis Dupont committed
244
	# OSF 5.0: recv/send are only available with -D_POSIX_PII_SOCKET or
245
	# -D_XOPEN_SOURCE_EXTENDED.
246
247
248
249
	*-dec-osf*)
		STD_CDEFINES="$STD_CDEFINES -D_POSIX_PII_SOCKET"
		CPPFLAGS="$CPPFLAGS -D_POSIX_PII_SOCKET"
		;;
250
251
252
253
254
255
256
257
258
259
260
	#HP-UX: need -D_XOPEN_SOURCE_EXTENDED and -lxnet for CMSG macros
	*-hp-hpux*)
		STD_CDEFINES="$STD_CDEFINES -D_XOPEN_SOURCE_EXTENDED"
		CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED"
		LIBS="-lxnet $LIBS"
		;;
	# Solaris: need -D_XPG4_2 and -D__EXTENSIONS__ for CMSG macros
	*-solaris*)
		STD_CDEFINES="$STD_CDEFINES -D_XPG4_2 -D__EXTENSIONS__"
		CPPFLAGS="$CPPFLAGS -D_XPG4_2 -D__EXTENSIONS__"
		;;
261
262
263
264
265
266
267
268
269
	# POSIX doesn't include the IPv6 Advanced Socket API and glibc hides
	# parts of the IPv6 Advanced Socket API as a result.  This is stupid
	# as it breaks how the two halves (Basic and Advanced) of the IPv6
	# Socket API were designed to be used but we have to live with it.
	# Define _GNU_SOURCE to pull in the IPv6 Advanced Socket API.
	*-linux*)
		STD_CDEFINES="$STD_CDEFINES -D_GNU_SOURCE"
		CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
		;;
270
271
esac

272
273
AC_HEADER_STDC

274
AC_CHECK_HEADERS(fcntl.h regex.h sys/time.h unistd.h sys/sockio.h sys/select.h sys/param.h sys/sysctl.h net/if6.h,,,
275
276
277
278
279
[$ac_includes_default
#ifdef HAVE_SYS_PARAM_H
# include <sys/param.h>
#endif
])
280
281
282

AC_C_CONST
AC_C_INLINE
283
AC_C_VOLATILE
Mark Andrews's avatar
Mark Andrews committed
284
AC_CHECK_FUNC(sysctlbyname, AC_DEFINE(HAVE_SYSCTLBYNAME))
285

286
287
288
289
290
291
#
# Older versions of HP/UX don't define seteuid() and setegid()
#
AC_CHECK_FUNCS(seteuid setresuid)
AC_CHECK_FUNCS(setegid setresgid)

292
293
294
295
296
#
# UnixWare 7.1.1 with the feature supplement to the UDK compiler
# is reported to not support "static inline" (RT #1212).
#
AC_MSG_CHECKING(for static inline breakage)
297
298
299
300
301
302
303
304
305
306
307
AC_TRY_COMPILE(, [
		foo1();
	}

	static inline int foo1() {
		return 0;
	}

	static inline int foo2() {
		return foo1();
	],
308
309
	[AC_MSG_RESULT(no)],
	[AC_MSG_RESULT(yes)
310
	 AC_DEFINE(inline, )])
311

312
AC_TYPE_SIZE_T
Mark Andrews's avatar
Mark Andrews committed
313
AC_CHECK_TYPE(ssize_t, int)
314
AC_CHECK_TYPE(uintptr_t,unsigned long)
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
AC_CHECK_TYPE(socklen_t,
[AC_DEFINE(ISC_SOCKADDR_LEN_T, socklen_t)],
[
AC_TRY_COMPILE(
[
#include <sys/types.h>
#include <sys/socket.h>
int getsockname(int, struct sockaddr *, size_t *);
],[],
[AC_DEFINE(ISC_SOCKADDR_LEN_T, size_t)],
[AC_DEFINE(ISC_SOCKADDR_LEN_T, int)])
],
[
#include <sys/types.h>
#include <sys/socket.h>
])
AC_SUBST(ISC_SOCKADDR_LEN_T)
332
AC_HEADER_TIME
Mark Andrews's avatar
Mark Andrews committed
333
334
335
336
337
338
339
AC_MSG_CHECKING(for long long)
AC_TRY_COMPILE([],[long long i = 0; return (0);],
	[AC_MSG_RESULT(yes)
		ISC_PLATFORM_HAVELONGLONG="#define ISC_PLATFORM_HAVELONGLONG 1"],
	[AC_MSG_RESULT(no)
		ISC_PLATFORM_HAVELONGLONG="#undef ISC_PLATFORM_HAVELONGLONG"])
AC_SUBST(ISC_PLATFORM_HAVELONGLONG)
340

Francis Dupont's avatar
Francis Dupont committed
341
342
343
344
345
346
347
348
349
350
#
# check for GCC noreturn attribute
#
AC_MSG_CHECKING(for GCC noreturn attribute)
AC_TRY_COMPILE([],[void foo() __attribute__((noreturn));],
	[AC_MSG_RESULT(yes)
		ISC_PLATFORM_NORETURN_PRE="#define ISC_PLATFORM_NORETURN_PRE"
		ISC_PLATFORM_NORETURN_POST="#define ISC_PLATFORM_NORETURN_POST __attribute__((noreturn))"],
	[AC_MSG_RESULT(no)
		ISC_PLATFORM_NORETURN_PRE="#define ISC_PLATFORM_NORETURN_PRE"
351
		ISC_PLATFORM_NORETURN_POST="#define ISC_PLATFORM_NORETURN_POST"])
Francis Dupont's avatar
Francis Dupont committed
352
353
354
AC_SUBST(ISC_PLATFORM_NORETURN_PRE)
AC_SUBST(ISC_PLATFORM_NORETURN_POST)

355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
#
# check if we have lifconf
#
AC_MSG_CHECKING(for struct lifconf)
AC_TRY_COMPILE([
#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
],
[
struct lifconf lifconf;
lifconf.lifc_len = 0;
]
,
	[AC_MSG_RESULT(yes)
		ISC_PLATFORM_HAVELIFCONF="#define ISC_PLATFORM_HAVELIFCONF 1"],
	[AC_MSG_RESULT(no)
		ISC_PLATFORM_HAVELIFCONF="#undef ISC_PLATFORM_HAVELIFCONF"])
AC_SUBST(ISC_PLATFORM_HAVELIFCONF)

375
376
377
#
# check if we have kqueue
#
378
379
380
381
AC_ARG_ENABLE(kqueue,
	[  --enable-kqueue         use BSD kqueue when available [[default=yes]]],
	      want_kqueue="$enableval",  want_kqueue="yes")
case $want_kqueue in
382
yes)
383
384
385
386
387
388
389
390
391
	AC_CHECK_FUNC(kqueue, ac_cv_have_kqueue=yes, ac_cv_have_kqueue=no)
	case $ac_cv_have_kqueue in
	yes)
		ISC_PLATFORM_HAVEKQUEUE="#define ISC_PLATFORM_HAVEKQUEUE 1"
		;;
	*)
		ISC_PLATFORM_HAVEKQUEUE="#undef ISC_PLATFORM_HAVEKQUEUE"
		;;
	esac
392
393
394
395
396
397
398
399
	;;
*)
	ISC_PLATFORM_HAVEKQUEUE="#undef ISC_PLATFORM_HAVEKQUEUE"
	;;
esac
AC_SUBST(ISC_PLATFORM_HAVEKQUEUE)

#
400
401
# check if we have epoll.  Linux kernel 2.4 has epoll_create() which fails,
# so we need to try running the code, not just test its existence.
402
#
403
AC_ARG_ENABLE(epoll,
404
405
[  --enable-epoll          use Linux epoll when available [[default=auto]]],
	      want_epoll="$enableval",  want_epoll="auto")
406
case $want_epoll in
407
auto)
408
409
410
411
412
413
414
415
416
417
418
419
420
	AC_MSG_CHECKING(epoll support)
	AC_TRY_RUN([
#include <sys/epoll.h>
int main() {
	if (epoll_create(1) < 0)
		return (1);
	return (0);
}
],
	[AC_MSG_RESULT(yes)
	ISC_PLATFORM_HAVEEPOLL="#define ISC_PLATFORM_HAVEEPOLL 1"],
	[AC_MSG_RESULT(no)
	ISC_PLATFORM_HAVEEPOLL="#undef ISC_PLATFORM_HAVEEPOLL"])
421
	;;
422
423
424
yes)
	ISC_PLATFORM_HAVEEPOLL="#define ISC_PLATFORM_HAVEEPOLL 1"
	;;
425
426
427
428
429
430
431
432
433
*)
	ISC_PLATFORM_HAVEEPOLL="#undef ISC_PLATFORM_HAVEEPOLL"
	;;
esac
AC_SUBST(ISC_PLATFORM_HAVEEPOLL)

#
# check if we support /dev/poll
#
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
AC_ARG_ENABLE(devpoll,
	[  --enable-devpoll        use /dev/poll when available [[default=yes]]],
	      want_devpoll="$enableval",  want_devpoll="yes")
case $want_devpoll in
yes)
	AC_CHECK_HEADERS(sys/devpoll.h,
	ISC_PLATFORM_HAVEDEVPOLL="#define ISC_PLATFORM_HAVEDEVPOLL 1"
	,
	ISC_PLATFORM_HAVEDEVPOLL="#undef ISC_PLATFORM_HAVEDEVPOLL"
	)
	;;
*)
	ISC_PLATFORM_HAVEDEVPOLL="#undef ISC_PLATFORM_HAVEDEVPOLL"
	;;
esac
449
AC_SUBST(ISC_PLATFORM_HAVEDEVPOLL)
450

451
452
453
454
455
#
# check if we need to #include sys/select.h explicitly
#
case $ac_cv_header_unistd_h in
yes)
456
AC_MSG_CHECKING(if unistd.h or sys/types.h defines fd_set)
457
AC_TRY_COMPILE([
458
#include <sys/types.h> /* Ultrix */
459
460
461
462
463
464
#include <unistd.h>],
[fd_set read_set; return (0);],
	[AC_MSG_RESULT(yes)
	 ISC_PLATFORM_NEEDSYSSELECTH="#undef ISC_PLATFORM_NEEDSYSSELECTH"
	 LWRES_PLATFORM_NEEDSYSSELECTH="#undef LWRES_PLATFORM_NEEDSYSSELECTH"],
	[AC_MSG_RESULT(no)
465
	case $ac_cv_header_sys_select_h in
466
	yes)
467
	 ISC_PLATFORM_NEEDSYSSELECTH="#define ISC_PLATFORM_NEEDSYSSELECTH 1"
468
469
470
471
472
473
474
475
476
	 LWRES_PLATFORM_NEEDSYSSELECTH="#define LWRES_PLATFORM_NEEDSYSSELECTH 1"
		;;
	no)
		AC_MSG_ERROR([need either working unistd.h or sys/select.h])
		;;
	esac
	])
	;;
no)
477
	case $ac_cv_header_sys_select_h in
478
	yes)
479
	     ISC_PLATFORM_NEEDSYSSELECTH="#define ISC_PLATFORM_NEEDSYSSELECTH 1"
480
481
482
483
484
485
486
487
488
489
490
	     LWRES_PLATFORM_NEEDSYSSELECTH="#define LWRES_PLATFORM_NEEDSYSSELECTH 1"
		;;
	no)
		AC_MSG_ERROR([need either unistd.h or sys/select.h])
		;;
	esac
	;;
esac
AC_SUBST(ISC_PLATFORM_NEEDSYSSELECTH)
AC_SUBST(LWRES_PLATFORM_NEEDSYSSELECTH)

491
492
493
494
495
#
# Find the machine's endian flavor.
#
AC_C_BIGENDIAN

496

Michael Graff's avatar
Michael Graff committed
497
498
499
#
# was --with-openssl specified?
#
500
OPENSSL_WARNING=
501
AC_MSG_CHECKING(for OpenSSL library)
Michael Graff's avatar
Michael Graff committed
502
AC_ARG_WITH(openssl,
503
[  --with-openssl[=PATH]     Build with OpenSSL [yes|no|path].
504
			  (Required for DNSSEC)],
505
    use_openssl="$withval", use_openssl="auto")
Michael Graff's avatar
Michael Graff committed
506

507
openssldirs="/usr /usr/local /usr/local/ssl /usr/pkg /usr/sfw"
508
509
510
511
512
513
514
515
516
517
518
if test "$use_openssl" = "auto"
then
	for d in $openssldirs
	do
		if test -f $d/include/openssl/opensslv.h
		then
			use_openssl=$d
			break
		fi
	done
fi
519
520
case "$use_openssl" in
	no)
521
522
523
		AC_MSG_RESULT(no)
		DST_OPENSSL_INC=""
		USE_OPENSSL=""
524
		;;
525
526
527
528
529
	auto)
		DST_OPENSSL_INC=""
		USE_OPENSSL=""
		AC_MSG_RESULT(not found)
		;;
530
	*)
531
		if test "$use_openssl" = "yes"
532
		then
533
			# User did not specify a path - guess it
534
535
536
537
			for d in $openssldirs
			do
				if test -f $d/include/openssl/opensslv.h
				then
538
					use_openssl=$d
539
540
541
542
					break
				fi
			done
			if test "$use_openssl" = "yes"
543
			then
544
				AC_MSG_RESULT(not found)
545
				AC_MSG_ERROR(
Andreas Gustafsson's avatar
typo    
Andreas Gustafsson committed
546
[OpenSSL was not found in any of $openssldirs; use --with-openssl=/path])
547
			fi
548
549
550
		elif ! test -f "$use_openssl"/include/openssl/opensslv.h
		then
			AC_MSG_ERROR(["$use_openssl/include/openssl/opensslv.h" not found])
551
		fi
552
		USE_OPENSSL='-DOPENSSL'
553
554
555
556
557
558
559
560
561
562
		if test "$use_openssl" = "/usr"
		then
			DST_OPENSSL_INC=""
			DNS_OPENSSL_LIBS="-lcrypto"
		else
			DST_OPENSSL_INC="-I$use_openssl/include"
			case $host in
			*-solaris*)
				DNS_OPENSSL_LIBS="-L$use_openssl/lib -R$use_openssl/lib -lcrypto"
				;;
563
564
565
			*-hp-hpux*)
				DNS_OPENSSL_LIBS="-L$use_openssl/lib -Wl,+b: -lcrypto"
				;;
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
			*-apple-darwin*)
				#
				# Apple's ld seaches for serially for dynamic
				# then static libraries.  This means you can't
				# use -L to override dynamic system libraries
				# with static ones when linking.  Instead
				# we specify a absolute path.
				#
				if test -f "$use_openssl/lib/libcrypto.dylib"
				then
					DNS_OPENSSL_LIBS="-L$use_openssl/lib -lcrypto"
				else
					DNS_OPENSSL_LIBS="$use_openssl/lib/libcrypto.a"
				fi
				;;
581
582
583
584
585
			*)
				DNS_OPENSSL_LIBS="-L$use_openssl/lib -lcrypto"
				;;
			esac
		fi
586
		AC_MSG_RESULT(using OpenSSL from $use_openssl/lib and $use_openssl/include)
587
588
589
590
591

		saved_cflags="$CFLAGS"
		saved_libs="$LIBS"
		CFLAGS="$CFLAGS $DST_OPENSSL_INC"
		LIBS="$LIBS $DNS_OPENSSL_LIBS"
592
593
594
595
596
		AC_MSG_CHECKING(whether linking with OpenSSL works)
		AC_TRY_RUN([
#include <openssl/err.h>
int main() {
	ERR_clear_error();
597
	return (0);
598
599
}
],
600
		[AC_MSG_RESULT(yes)],
601
		[AC_MSG_RESULT(no)
Andreas Gustafsson's avatar
tweaked    
Andreas Gustafsson committed
602
603
604
605
		 AC_MSG_ERROR(Could not run test program using OpenSSL from
$use_openssl/lib and $use_openssl/include.
Please check the argument to --with-openssl and your
shared library configuration (e.g., LD_LIBRARY_PATH).)],
606
		[AC_MSG_RESULT(assuming it does work on target platform)])
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626

		AC_MSG_CHECKING(whether linking with OpenSSL requires -ldl)
		AC_TRY_LINK([
#include <openssl/err.h>],
[ DSO_METHOD_dlfcn(); ],
		[AC_MSG_RESULT(no)],
		[LIBS="$LIBS -ldl"
		AC_TRY_LINK([
#include <openssl/err.h>
],[ DSO_METHOD_dlfcn(); ],
		[AC_MSG_RESULT(yes)
		DNS_OPENSSL_LIBS="$DNS_OPENSSL_LIBS -ldl"
		],
		 [AC_MSG_RESULT(unknown)
		 AC_MSG_ERROR(OpenSSL has unsupported dynamic loading)],
		[AC_MSG_RESULT(assuming it does work on target platform)])
		],
		[AC_MSG_RESULT(assuming it does work on target platform)]
		)
		 
627
628
AC_ARG_ENABLE(openssl-version-check,
[AC_HELP_STRING([--enable-openssl-version-check],
629
	[Check OpenSSL Version @<:@default=yes@:>@])])
630
631
case "$enable_openssl_version_check" in
yes|'')
632
		AC_MSG_CHECKING(OpenSSL library version)
633
		AC_TRY_RUN([
634
#include <stdio.h>
635
636
#include <openssl/opensslv.h>
int main() {
637
	if ((OPENSSL_VERSION_NUMBER >= 0x009070cfL &&
638
	     OPENSSL_VERSION_NUMBER < 0x00908000L) ||
639
	     OPENSSL_VERSION_NUMBER >= 0x0090804fL)
640
		return (0);
641
642
	printf("\n\nFound   OPENSSL_VERSION_NUMBER %#010x\n",
		OPENSSL_VERSION_NUMBER);
643
644
	printf("Require OPENSSL_VERSION_NUMBER 0x009070cf or greater (0.9.7l)\n"
	       "Require OPENSSL_VERSION_NUMBER 0x0090804f or greater (0.9.8d)\n\n");
645
	return (1);
646
}
647
		],
648
		[AC_MSG_RESULT(ok)],
649
		[AC_MSG_RESULT(not compatible)
650
		 OPENSSL_WARNING=yes
651
		],
652
653
654
655
656
657
658
		[AC_MSG_RESULT(assuming target platform has compatible version)])
;;
no)
	AC_MSG_RESULT(Skipped OpenSSL version check)
;;
esac

659
660
661
662
663
664
665
666
		AC_MSG_CHECKING(for OpenSSL DSA support)
		if test -f $use_openssl/include/openssl/dsa.h
		then
			AC_DEFINE(HAVE_OPENSSL_DSA)
			AC_MSG_RESULT(yes)
		else
			AC_MSG_RESULT(no)
		fi
667
668
		CFLAGS="$saved_cflags"
		LIBS="$saved_libs"
669
670
		;;
esac
671
672
673
674
675
676

#
# This would include the system openssl path (and linker options to use
# it as needed) if it is found.
#

677
AC_SUBST(USE_OPENSSL)
678
679
AC_SUBST(DST_OPENSSL_INC)
DNS_CRYPTO_LIBS="$DNS_CRYPTO_LIBS $DNS_OPENSSL_LIBS"
680

Francis Dupont's avatar
Francis Dupont committed
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
#
# Use OpenSSL for hash functions
#

AC_ARG_ENABLE(openssl-hash,
	[  --enable-openssl-hash   use OpenSSL for hash functions [[default=no]]],
	want_openssl_hash="$enableval", want_openssl_hash="no")
case $want_openssl_hash in
	yes)
		if test "$USE_OPENSSL" = ""
		then
			AC_MSG_ERROR([No OpenSSL for hash functions])
		fi
		ISC_PLATFORM_OPENSSLHASH="#define ISC_PLATFORM_OPENSSLHASH 1"
		ISC_OPENSSL_INC="$DST_OPENSSL_INC"
		;;
	no)
		ISC_PLATFORM_OPENSSLHASH="#undef ISC_PLATFORM_OPENSSLHASH"
		ISC_OPENSSL_INC=""
		;;
esac
AC_SUBST(ISC_PLATFORM_OPENSSLHASH)
AC_SUBST(ISC_OPENSSL_INC)

Francis Dupont's avatar
Francis Dupont committed
705
706
707
708
709
710
711
712
#
# PKCS11 (aka crypto hardware) support
#
# This works only with the right OpenSSL with PKCS11 engine!
#

AC_MSG_CHECKING(for PKCS11 support)
AC_ARG_WITH(pkcs11,
Francis Dupont's avatar
Francis Dupont committed
713
714
715
[  --with-pkcs11[=PATH]      Build with PKCS11 support [yes|no|path]
                          (PATH is for the PKCS11 provider)],
   use_pkcs11="$withval", use_pkcs11="no")
Francis Dupont's avatar
Francis Dupont committed
716
717

case "$use_pkcs11" in
Francis Dupont's avatar
Francis Dupont committed
718
	no|'')
Francis Dupont's avatar
Francis Dupont committed
719
		AC_MSG_RESULT(disabled)
Francis Dupont's avatar
Francis Dupont committed
720
		USE_PKCS11=''
721
		PKCS11_TOOLS=''
Francis Dupont's avatar
Francis Dupont committed
722
		;;
Francis Dupont's avatar
Francis Dupont committed
723
	yes|*)
Francis Dupont's avatar
Francis Dupont committed
724
725
		AC_MSG_RESULT(using OpenSSL with PKCS11 support)
		USE_PKCS11='-DUSE_PKCS11'
726
		PKCS11_TOOLS=pkcs11
Francis Dupont's avatar
Francis Dupont committed
727
728
729
		;;
esac
AC_SUBST(USE_PKCS11)
730
AC_SUBST(PKCS11_TOOLS)
Francis Dupont's avatar
Francis Dupont committed
731

Francis Dupont's avatar
Francis Dupont committed
732
733
734
735
736
737
738
739
740
741
742
743
744
AC_MSG_CHECKING(for PKCS11 tools)
case "$use_pkcs11" in
	no|yes|'')
		AC_MSG_RESULT(disabled)
		PKCS11_PROVIDER="undefined"
		;;
       *)
		AC_MSG_RESULT(PKCS11 provider is "$use_pkcs11")
		PKCS11_PROVIDER="$use_pkcs11"
		;;
esac
AC_SUBST(PKCS11_PROVIDER)

745
746
AC_MSG_CHECKING(for GSSAPI library)
AC_ARG_WITH(gssapi,
747
[  --with-gssapi=PATH      Specify path for system-supplied GSSAPI],
748
749
750
751
752
753
754
    use_gssapi="$withval", use_gssapi="no")

gssapidirs="/usr/local /usr/pkg /usr/kerberos /usr"
if test "$use_gssapi" = "yes"
then
	for d in $gssapidirs
	do
755
		if test -f $d/include/gssapi/gssapi.h -o -f $d/include/gssapi.h
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
		then
			use_gssapi=$d
			break
		fi
	done
fi

case "$use_gssapi" in
	no)
		AC_MSG_RESULT(disabled)
		USE_GSSAPI=''
		;;
	yes)
		AC_MSG_ERROR([--with-gssapi must specify a path])
		;;
	*)
		AC_MSG_RESULT(looking in $use_gssapi/lib)
		USE_GSSAPI='-DGSSAPI'
		saved_cppflags="$CPPFLAGS"
		CPPFLAGS="-I$use_gssapi/include $CPPFLAGS"
		AC_CHECK_HEADERS(gssapi.h gssapi/gssapi.h,
		    [ISC_PLATFORM_GSSAPIHEADER="#define ISC_PLATFORM_GSSAPIHEADER <$ac_header>"])

		if test "$ISC_PLATFORM_GSSAPIHEADER" = ""; then
		    AC_MSG_ERROR([gssapi.h not found])
		fi

		CPPFLAGS="$saved_cppflags"

		#
		# XXXDCL This probably doesn't work right on all systems.
		# It will need to be worked on as problems become evident.
		#
		# Essentially the problems here relate to two different
		# areas.  The first area is building with either KTH
		# or MIT Kerberos, particularly when both are present on
		# the machine.  The other is static versus dynamic linking.
		#
		# On the KTH vs MIT issue, Both have libkrb5 that can mess
		# up the works if one implementation ends up trying to
		# use the other's krb.  This is unfortunately a situation
		# that very easily arises.
		#
		# Dynamic linking when the dependency information is built
		# into MIT's libgssapi_krb5 or KTH's libgssapi magically makes
		# all such problems go away, but when that setup is not
		# present, because either the dynamic libraries lack
		# dependencies or static linking is being done, then the
		# problems start to show up.
		saved_libs="$LIBS"
		for TRY_LIBS in \
		    "-lgssapi_krb5" \
		    "-lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err" \
		    "-lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -lresolv" \
		    "-lgssapi" \
		    "-lgssapi -lkrb5 -ldes -lcrypt -lasn1 -lroken -lcom_err" \
		    "-lgssapi -lkrb5 -lcrypto -lcrypt -lasn1 -lroken -lcom_err" \
		    "-lgss"
		do
		    # Note that this does not include $saved_libs, because
		    # on FreeBSD machines this configure script has added
		    # -L/usr/local/lib to LIBS, which can make the
		    # -lgssapi_krb5 test succeed with shared libraries even
		    # when you are trying to build with KTH in /usr/lib.
		    LIBS="-L$use_gssapi/lib $TRY_LIBS"
		    AC_MSG_CHECKING(linking as $TRY_LIBS)
		    AC_TRY_LINK( , [gss_acquire_cred();],
				gssapi_linked=yes, gssapi_linked=no)
		    case $gssapi_linked in
		    yes) AC_MSG_RESULT(yes); break ;;
		    no)  AC_MSG_RESULT(no) ;;
		    esac
		done

		case $gssapi_linked in
		no) AC_MSG_ERROR(could not determine proper GSSAPI linkage) ;;
		esac

		#
		# XXXDCL Major kludge.  Tries to cope with KTH in /usr/lib
		# but MIT in /usr/local/lib and trying to build with KTH.
		# /usr/local/lib can end up earlier on the link lines.
		# Like most kludges, this one is not only inelegant it
		# is also likely to be the wrong thing to do at least as
		# many times as it is the right thing.  Something better
		# needs to be done.
		#
		if test "$use_gssapi" = "/usr" -a \
			-f /usr/local/lib/libkrb5.a; then
		    FIX_KTH_VS_MIT=yes
		fi

		case "$FIX_KTH_VS_MIT" in
		yes)
		    case "$enable_static_linking" in
		    yes) gssapi_lib_suffix=".a"  ;;
		    *)   gssapi_lib_suffix=".so" ;;
		    esac

		    for lib in $LIBS; do
			case $lib in
			-L*)
			    ;;
			-l*)
			    new_lib=`echo $lib |
				     sed -e s%^-l%$use_gssapi/lib/lib% \
					 -e s%$%$gssapi_lib_suffix%`
			    NEW_LIBS="$NEW_LIBS $new_lib"
			    ;;
			*)
			   AC_MSG_ERROR([KTH vs MIT Kerberos confusion!])
			    ;;
			esac
		    done
		    LIBS="$NEW_LIBS"
		    ;;
		esac

		DST_GSSAPI_INC="-I$use_gssapi/include"
		DNS_GSSAPI_LIBS="$LIBS"

		AC_MSG_RESULT(using GSSAPI from $use_gssapi/lib and $use_gssapi/include)
		LIBS="$saved_libs"
		;;
esac

AC_SUBST(ISC_PLATFORM_HAVEGSSAPI)
AC_SUBST(ISC_PLATFORM_GSSAPIHEADER)
Brian Wellington's avatar
Brian Wellington committed
884
885
886

AC_SUBST(USE_GSSAPI)
AC_SUBST(DST_GSSAPI_INC)
887
888
AC_SUBST(DNS_GSSAPI_LIBS)
DNS_CRYPTO_LIBS="$DNS_GSSAPI_LIBS $DNS_CRYPTO_LIBS"
889
890
891
892
893
894

#
# Applications linking with libdns also need to link with these libraries.
#

AC_SUBST(DNS_CRYPTO_LIBS)
Brian Wellington's avatar
Brian Wellington committed
895

896
897
898
899
900
#
# was --with-randomdev specified?
#
AC_MSG_CHECKING(for random device)
AC_ARG_WITH(randomdev,
901
[  --with-randomdev=PATH   Specify path for random device],
902
903
904
905
906
907
    use_randomdev="$withval", use_randomdev="unspec")

case "$use_randomdev" in
	unspec)
		case "$host" in
			*-openbsd*)
908
				devrandom=/dev/arandom
909
910
				;;
			*)
911
				devrandom=/dev/random
912
913
				;;
		esac
914
		AC_MSG_RESULT($devrandom)
915
		AC_CHECK_FILE($devrandom,
916
917
			      AC_DEFINE_UNQUOTED(PATH_RANDOMDEV,
						 "$devrandom"),)
918
919
920
921
		;;
	yes)
		AC_MSG_ERROR([--with-randomdev must specify a path])
		;;
922
923
924
	no)
		AC_MSG_RESULT(disabled)
		;;
925
	*)
926
		AC_DEFINE_UNQUOTED(PATH_RANDOMDEV, "$use_randomdev")
927
928
929
930
		AC_MSG_RESULT(using "$use_randomdev")
		;;
esac

931
932
933
934
935
#
# Do we have arc4random() ?
#
AC_CHECK_FUNC(arc4random, AC_DEFINE(HAVE_ARC4RANDOM))

936
sinclude(config.threads.in)dnl
Andreas Gustafsson's avatar
Andreas Gustafsson committed
937

938
939
if $use_threads
then
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
	if test "X$GCC" = "Xyes"; then
		case "$host" in
		*-freebsd*)
			CC="$CC -pthread"
			CCOPT="$CCOPT -pthread"
			STD_CDEFINES="$STD_CDEFINES -D_THREAD_SAFE"
			;;
		*-openbsd*)
			CC="$CC -pthread"
			CCOPT="$CCOPT -pthread"
			;;
		*-solaris*)
			LIBS="$LIBS -lthread"
			;;
		*-ibm-aix*)
			STD_CDEFINES="$STD_CDEFINES -D_THREAD_SAFE"
			;;
		esac
	else
		case $host in
		*-dec-osf*)
			CC="$CC -pthread"
			CCOPT="$CCOPT -pthread"
			;;
		*-solaris*)
			CC="$CC -mt"
			CCOPT="$CCOPT -mt"
			;;
		*-ibm-aix*)
			STD_CDEFINES="$STD_CDEFINES -D_THREAD_SAFE"
			;;
		*-sco-sysv*uw*|*-*-sysv*UnixWare*)
			CC="$CC -Kthread"
			CCOPT="$CCOPT -Kthread"
			;;
		*-*-sysv*OpenUNIX*)
			CC="$CC -Kpthread"
			CCOPT="$CCOPT -Kpthread"
			;;
		esac
	fi
	ALWAYS_DEFINES="-D_REENTRANT"
	ISC_PLATFORM_USETHREADS="#define ISC_PLATFORM_USETHREADS 1"
	thread_dir=pthreads
Brian Wellington's avatar
Brian Wellington committed
984
	#
Andreas Gustafsson's avatar
Andreas Gustafsson committed
985
	# We'd like to use sigwait() too
Brian Wellington's avatar
Brian Wellington committed
986
	#
987
988
989
990
991
992
993
	AC_CHECK_FUNC(sigwait,
		      AC_DEFINE(HAVE_SIGWAIT),
		      AC_CHECK_LIB(c, sigwait,
		      AC_DEFINE(HAVE_SIGWAIT),
		      AC_CHECK_LIB(pthread, sigwait,
				   AC_DEFINE(HAVE_SIGWAIT),
				   AC_CHECK_LIB(pthread, _Psigwait,
994
						AC_DEFINE(HAVE_SIGWAIT),))))
Brian Wellington's avatar
Brian Wellington committed
995

996
997
998
	AC_CHECK_FUNC(pthread_attr_getstacksize,
		      AC_DEFINE(HAVE_PTHREAD_ATTR_GETSTACKSIZE),)

999
1000
1001
	AC_CHECK_FUNC(pthread_attr_setstacksize,
		      AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE),)

Andreas Gustafsson's avatar
Andreas Gustafsson committed
1002
1003
1004
	#
	# Additional OS-specific issues related to pthreads and sigwait.
	#
1005
	case "$host" in
Andreas Gustafsson's avatar
Andreas Gustafsson committed
1006
1007
1008
1009
1010
		#
		# One more place to look for sigwait.
		#
		*-freebsd*)
			AC_CHECK_LIB(c_r, sigwait, AC_DEFINE(HAVE_SIGWAIT),)
1011
			case $host in
1012
1013
1014
1015
1016
			*-freebsd5.[[012]]|*-freebsd5.[[012]].*);;
			*-freebsd5.[[3456789]]|*-freebsd5.[[3456789]].*)
				AC_DEFINE(NEED_PTHREAD_SCOPE_SYSTEM)
				;;
			*-freebsd6.*)
1017
1018
1019
				AC_DEFINE(NEED_PTHREAD_SCOPE_SYSTEM)
				;;
			esac
Andreas Gustafsson's avatar
Andreas Gustafsson committed
1020
1021
			;;
		#
1022
		# BSDI 3.0 through 4.0.1 needs pthread_init() to be
Andreas Gustafsson's avatar
Andreas Gustafsson committed
1023
1024
1025
		# called before certain pthreads calls.	 This is deprecated
		# in BSD/OS 4.1.
		#
1026
		*-bsdi3.*|*-bsdi4.0*)
Andreas Gustafsson's avatar
Andreas Gustafsson committed
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
			AC_DEFINE(NEED_PTHREAD_INIT)
			;;
		#
		# LinuxThreads requires some changes to the way we
		# deal with signals.
		#
		*-linux*)
			AC_DEFINE(HAVE_LINUXTHREADS)
			;;
		#
		# Ensure the right sigwait() semantics on Solaris and make
		# sure we call pthread_setconcurrency.
		#
		*-solaris*)
			AC_DEFINE(_POSIX_PTHREAD_SEMANTICS)
			AC_CHECK_FUNC(pthread_setconcurrency,
				      AC_DEFINE(CALL_PTHREAD_SETCONCURRENCY))
			;;
		#
		# UnixWare does things its own way.
		#
1048
		*-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
1049
1050
			AC_DEFINE(HAVE_UNIXWARE_SIGWAIT)
			;;
1051
	esac
Andreas Gustafsson's avatar
Andreas Gustafsson committed
1052
1053
1054
1055
1056
1057

	#
	# Look for sysconf to allow detection of the number of processors.
	#
	AC_CHECK_FUNC(sysconf, AC_DEFINE(HAVE_SYSCONF),)

1058
else
1059
	ISC_PLATFORM_USETHREADS="#undef ISC_PLATFORM_USETHREADS"
1060
	thread_dir=nothreads
1061
	ALWAYS_DEFINES=""
1062
fi
1063

1064
AC_SUBST(ALWAYS_DEFINES)
1065
AC_SUBST(ISC_PLATFORM_USETHREADS)
1066
1067
1068
ISC_THREAD_DIR=$thread_dir
AC_SUBST(ISC_THREAD_DIR)

1069
1070
1071
1072
1073
#
# was --with-libxml2 specified?
#
AC_MSG_CHECKING(for libxml2 library)
AC_ARG_WITH(libxml2,
1074
[  --with-libxml2[=PATH]     Build with libxml2 library [yes|no|path]],
1075
1076
1077
1078
1079
1080
1081
    use_libxml2="$withval", use_libxml2="auto")

case "$use_libxml2" in
	no)
		DST_LIBXML2_INC=""
		;;
	auto|yes)
Mark Andrews's avatar
Mark Andrews committed
1082
		case X`(xml2-config --version) 2>/dev/null` in
Francis Dupont's avatar
Francis Dupont committed
1083
		X2.[[67]].*)
Mark Andrews's avatar
Mark Andrews committed
1084
1085
1086
1087
1088
1089
1090
1091
			libxml2_libs=`xml2-config --libs`
			libxml2_cflags=`xml2-config --cflags`
			;;
		*)
			libxml2_libs=
			libxml2_cflags=
			;;
		esac
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
		;;
	*)
		if test -f "$use_libxml2/bin/xml2-config" ; then
			libxml2_libs=`$use_libxml2/bin/xml2-config --libs`
			libxml2_cflags=`$use_libxml2/bin/xml2-config --cflags`
		fi
		;;
esac

if test "X$libxml2_libs" != "X"
then
	AC_MSG_RESULT(yes)
	CFLAGS="$CFLAGS $libxml2_cflags"
	LIBS="$LIBS $libxml2_libs"
	AC_DEFINE(HAVE_LIBXML2, 1, [Define if libxml2 was found])
else
	AC_MSG_RESULT(no)
fi

1111
1112
1113
1114
1115
#
# In solaris 10, SMF can manage named service
#
AC_CHECK_LIB(scf, smf_enable_instance)

1116
1117
#
# flockfile is usually provided by pthreads, but we may want to use it
Brian Wellington's avatar
Brian Wellington committed
1118
1119
# even if compiled with --disable-threads.  getc_unlocked might also not
# be defined.
1120
1121
#
AC_CHECK_FUNC(flockfile, AC_DEFINE(HAVE_FLOCKFILE),)
Brian Wellington's avatar
Brian Wellington committed
1122
AC_CHECK_FUNC(getc_unlocked, AC_DEFINE(HAVE_GETCUNLOCKED),)
1123

1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
# 
# Indicate what the final decision was regarding threads.
#
AC_MSG_CHECKING(whether to build with threads)
if $use_threads; then
	AC_MSG_RESULT(yes)
else
	AC_MSG_RESULT(no)
fi

# 
# End of pthreads stuff.
#

Bob Halley's avatar
Bob Halley committed
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
#
# Large File
#
AC_ARG_ENABLE(largefile, [  --enable-largefile	  64-bit file support],
	      want_largefile="yes", want_largefile="no")
case $want_largefile in
	yes)
		ALWAYS_DEFINES="$ALWAYS_DEFINES -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
		;;
	*)
		;;
esac

1151
1152
1153
1154
1155
1156
1157
1158
#
# Additional compiler settings.
#
MKDEPCC="$CC"
MKDEPCFLAGS="-M"
IRIX_DNSSEC_WARNINGS_HACK=""

if test "X$GCC" = "Xyes"; then
1159
1160
1161
1162
1163
1164
1165
	AC_MSG_CHECKING(if "$CC" supports -fno-strict-aliasing)
	SAVE_CFLAGS=$CFLAGS
	CFLAGS=-fno-strict-aliasing
	AC_TRY_COMPILE(,, [FNOSTRICTALIASING=yes],[FNOSTRICTALIASING=no])
	CFLAGS=$SAVE_CFLAGS
	if test "$FNOSTRICTALIASING" = "yes"; then
		AC_MSG_RESULT(yes)
1166
	STD_CWARNINGS="$STD_CWARNINGS -W -Wall -Wmissing-prototypes -Wcast-qual -Wwrite-strings -Wformat -Wpointer-arith -fno-strict-aliasing"
1167
1168
1169
1170
	else
		AC_MSG_RESULT(no)
	STD_CWARNINGS="$STD_CWARNINGS -W -Wall -Wmissing-prototypes -Wcast-qual -Wwrite-strings -Wformat -Wpointer-arith"
	fi
1171
1172
	case "$host" in
	*-hp-hpux*)
1173
		LDFLAGS="-Wl,+vnocompatwarnings $LDFLAGS"
1174
1175
		;;
	esac
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
else
	case $host in
	*-dec-osf*)
		CC="$CC -std"
		CCOPT="$CCOPT -std"
		MKDEPCC="$CC"
		;;
	*-hp-hpux*)
		CC="$CC -Ae -z"
		# The version of the C compiler that constantly warns about
1186
1187
1188
		# 'const' as well as alignment issues is unfortunately not
		# able to be discerned via the version of the operating
		# system, nor does cc have a version flag.
1189
1190
1191
1192
1193
1194
		case "`$CC +W 123 2>&1`" in
		*Unknown?option*)
			STD_CWARNINGS="+w1"
			;;
		*)
			# Turn off the pointlessly noisy warnings.
1195
			STD_CWARNINGS="+w1 +W 474,530,2193,2236"
1196
1197
1198
			;;
		esac
		CCOPT="$CCOPT -Ae -z"
1199
		LDFLAGS="-Wl,+vnocompatwarnings $LDFLAGS"
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
		MKDEPPROG='cc -Ae -E -Wp,-M >/dev/null 2>>$TMP'
		;;
	*-sgi-irix*)
		STD_CWARNINGS="-fullwarn -woff 1209"
		#
		# Silence more than 250 instances of
		#   "prototyped function redeclared without prototype"
		# and 11 instances of
		#   "variable ... was set but never used"
		# from lib/dns/sec/openssl.
		#
		IRIX_DNSSEC_WARNINGS_HACK="-woff 1692,1552"
		;;
	*-solaris*)
		MKDEPCFLAGS="-xM"
		;;
1216
	*-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
1217
		# UnixWare
1218
1219
		CC="$CC -w"
		;;
1220
1221
1222
1223
1224
1225
1226
1227
	esac
fi

AC_SUBST(MKDEPCC)
AC_SUBST(MKDEPCFLAGS)
AC_SUBST(MKDEPPROG)
AC_SUBST(IRIX_DNSSEC_WARNINGS_HACK)

1228
1229
1230
#
# NLS
#
Bob Halley's avatar
Bob Halley committed
1231
1232
AC_CHECK_FUNC(catgets, AC_DEFINE(HAVE_CATGETS),)

1233
1234
1235
1236
1237
1238
1239
1240
1241
#
# -lxnet buys us one big porting headache...  standards, gotta love 'em.
#
# AC_CHECK_LIB(xnet, socket, ,
#    AC_CHECK_LIB(socket, socket)
# )
#
# Use this for now, instead:
#
1242
1243
1244
case "$host" in
	mips-sgi-irix*)
		;;
1245
1246
	*-linux*)
		;;
1247
1248
	*)
		AC_CHECK_LIB(socket, socket)
1249
		AC_CHECK_LIB(nsl, inet_addr)
1250
1251
		;;
esac
Michael Graff's avatar
Michael Graff committed
1252

1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
#
# Work around Solaris's select() limitations.
#
case "$host" in
	*-solaris2.[[89]]|*-solaris2.1?)
	AC_DEFINE(FD_SETSIZE, 65536,
		  [Solaris hack to get select_large_fdset.])
	;;
esac

1263
1264
1265
1266
1267
#
# Purify support
#
AC_MSG_CHECKING(whether to use purify)
AC_ARG_WITH(purify,
1268
	[  --with-purify[=PATH]      use Rational purify],
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
	use_purify="$withval", use_purify="no")

case "$use_purify" in
	no)
		;;
	yes)
		AC_PATH_PROG(purify_path, purify, purify)
		;;
	*)
		purify_path="$use_purify"
		;;
esac

case "$use_purify" in
	no)
		AC_MSG_RESULT(no)
		PURIFY=""
		;;
	*)
		if test -f $purify_path || test $purify_path = purify; then
			AC_MSG_RESULT($purify_path)
			PURIFYFLAGS="`echo $PURIFYOPTIONS`"
			PURIFY="$purify_path $PURIFYFLAGS"
		else
			AC_MSG_ERROR([$purify_path not found.

Please choose the proper path with the following command:

    configure --with-purify=PATH
])
		fi
		;;
esac

AC_SUBST(PURIFY)

1305

Bob Halley's avatar
Bob Halley committed
1306
AC_ARG_WITH(libtool,
1307
	    [  --with-libtool          use GNU libtool],
Bob Halley's avatar
Bob Halley committed
1308
1309
1310
1311
1312
1313
1314
	    use_libtool="$withval", use_libtool="no")

case $use_libtool in
	yes)
		AM_PROG_LIBTOOL
		O=lo
		A=la
1315
		LIBTOOL_MKDEP_SED='s;\.o;\.lo;'
1316
1317
1318
		LIBTOOL_MODE_COMPILE='--mode=compile'
		LIBTOOL_MODE_INSTALL='--mode=install'
		LIBTOOL_MODE_LINK='--mode=link'
1319
1320
1321
		case "$host" in
		*) LIBTOOL_ALLOW_UNDEFINED= ;;
		esac
1322
1323
1324
1325
		case "$host" in
		*-ibm-aix*) LIBTOOL_IN_MAIN="-Wl,-bI:T_testlist.imp" ;;
		*) LIBTOOL_IN_MAIN= ;;
		esac;
Bob Halley's avatar
Bob Halley committed
1326
1327
1328
1329
1330
1331
		;;
	*)
		O=o
		A=a
		LIBTOOL=
		AC_SUBST(LIBTOOL)
1332
		LIBTOOL_MKDEP_SED=
1333
1334
1335
		LIBTOOL_MODE_COMPILE=
		LIBTOOL_MODE_INSTALL=
		LIBTOOL_MODE_LINK=
1336
		LIBTOOL_ALLOW_UNDEFINED=
1337
		LIBTOOL_IN_MAIN=
Bob Halley's avatar
Bob Halley committed
1338
1339
		;;
esac
1340

1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
#
# enable/disable dumping stack backtrace.  Also check if the system supports
# glibc-compatible backtrace() function.
#
AC_ARG_ENABLE(backtrace,
[  --enable-backtrace      log stack backtrace on abort [[default=yes]]],
	      want_backtrace="$enableval",  want_backtrace="yes")
case $want_backtrace in
yes)
	ISC_PLATFORM_USEBACKTRACE="#define ISC_PLATFORM_USEBACKTRACE 1"
	AC_TRY_LINK([#include <execinfo.h>],
	[return (backtrace((void **)0, 0));],
	[AC_DEFINE([HAVE_LIBCTRACE], [], [if system have backtrace function])],)
	;;
*)
	ISC_PLATFORM_USEBACKTRACE="#undef ISC_PLATFORM_USEBACKTRACE"
	;;
esac
AC_SUBST(ISC_PLATFORM_USEBACKTRACE)

AC_ARG_ENABLE(symtable,
[  --enable-symtable       use internal symbol table for backtrace
                          [[all|minimal(default)|none]]],
		want_symtable="$enableval",  want_symtable="minimal")
case $want_symtable in
yes|all|minimal)
	
Mark Andrews's avatar
Mark Andrews committed
1368
	if test "$PERL" = ""
1369
1370
1371
1372
1373
	then
		AC_MSG_ERROR([Internal symbol table requires perl but no perl is found.
Install perl or explicitly disable the feature by --disable-symtable.])
	fi
	if test "$use_libtool" = "yes"; then
1374
		AC_MSG_WARN([Internal symbol table does not work with libtool.  Disabling symbol table.])
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
	else
		MKSYMTBL_PROGRAM="$PERL"
		if test $want_symtable = all; then
			ALWAYS_MAKE_SYMTABLE="yes"
		fi
	fi
	;;
*)
	;;
esac
AC_SUBST(MKSYMTBL_PROGRAM)
AC_SUBST(ALWAYS_MAKE_SYMTABLE)

Andreas Gustafsson's avatar
Andreas Gustafsson committed
1388
#
1389
1390
# File name extension for static archive files, for those few places
# where they are treated differently from dynamic ones.
Andreas Gustafsson's avatar
Andreas Gustafsson committed
1391
#
1392
1393
SA=a

Bob Halley's avatar
Bob Halley committed
1394
1395
AC_SUBST(O)
AC_SUBST(A)
1396
AC_SUBST(SA)
1397
AC_SUBST(LIBTOOL_MKDEP_SED)
1398
1399
1400
AC_SUBST(LIBTOOL_MODE_COMPILE)
AC_SUBST(LIBTOOL_MODE_INSTALL)
AC_SUBST(LIBTOOL_MODE_LINK)
1401
AC_SUBST(LIBTOOL_ALLOW_UNDEFINED)
1402
AC_SUBST(LIBTOOL_IN_MAIN)
Bob Halley's avatar
Bob Halley committed
1403

1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
#
# build exportable DNS library?
#
AC_ARG_ENABLE(exportlib,
	[  --enable-exportlib	build exportable library (GNU make required)
                        [[default=no]]])
case "$enable_exportlib" in
	yes)
		gmake=
		for x in gmake gnumake make; do
			if $x --version 2>/dev/null | grep GNU > /dev/null; then
				gmake=$x
				break;
			fi
		done
		if test -z "$gmake"; then
			AC_MSG_ERROR([exportlib requires GNU make.  Install it or disable the feature.])
		fi
		LIBEXPORT=lib/export
		AC_SUBST(LIBEXPORT)
		BIND9_CO_RULE="%.$O:  \${srcdir}/%.c"
		;;
	no|*)
		BIND9_CO_RULE=".c.$O:"
		;;
esac
AC_SUBST(BIND9_CO_RULE)

AC_ARG_WITH(export-libdir,
	[  --with-export-libdir[=PATH]
                        installation directory for the export library
                        [[EPREFIX/lib/bind9]]],
	export_libdir="$withval",)
if test -z "$export_libdir"; then
	export_libdir="\${exec_prefix}/lib/bind9/"
fi
AC_SUBST(export_libdir)

1442
1443
AC_ARG_WITH(export-includedir,
	[  --with-export-includedir[=PATH]
1444
1445
                        installation directory for the header files of the
                        export library [[PREFIX/include/bind9]]],
1446
	export_includedir="$withval",)
1447
1448
1449
1450
1451
if test -z "$export_includedir"; then
	export_includedir="\${prefix}/include/bind9/"
fi
AC_SUBST(export_includedir)

1452
1453
#
# Here begins a very long section to determine the system's networking
Francis Dupont's avatar
Francis Dupont committed
1454
# capabilities.  The order of the tests is significant.
1455
1456
#

1457
1458
1459
#
# IPv6
#
1460
AC_ARG_ENABLE(ipv6,
1461
	[  --enable-ipv6           use IPv6 [default=autodetect]])
1462

1463
1464
1465
1466
1467
1468
1469
1470
case "$enable_ipv6" in
	yes|''|autodetect)
		AC_DEFINE(WANT_IPV6)
		;;
	no)
		;;
esac

1471
1472
1473
1474
#
# We do the IPv6 compilation checking after libtool so that we can put
# the right suffix on the files.
#
1475
1476
AC_MSG_CHECKING(for IPv6 structures)
AC_TRY_COMPILE([
1477
1478
1479
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>],
1480
1481
1482
1483
1484
[struct sockaddr_in6 sin6; return (0);],
	[AC_MSG_RESULT(yes)
	 found_ipv6=yes],
	[AC_MSG_RESULT(no)
	 found_ipv6=no])
1485

1486
1487
1488
1489
1490
1491
#
# See whether IPv6 support is provided via a Kame add-on.
# This is done before other IPv6 linking tests to LIBS is properly set.
#
AC_MSG_CHECKING(for Kame IPv6 support)
AC_ARG_WITH(kame,
1492
	[  --with-kame[=PATH]	  use Kame IPv6 [default path /usr/local/v6]],
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
	use_kame="$withval", use_kame="no")

case "$use_kame" in
	no)
		;;
	yes)
		kame_path=/usr/local/v6
		;;
	*)
		kame_path="$use_kame"
		;;
esac

case "$use_kame" in
	no)
		AC_MSG_RESULT(no)
		;;
	*)
		if test -f $kame_path/lib/libinet6.a; then
			AC_MSG_RESULT($kame_path/lib/libinet6.a)
			LIBS="-L$kame_path/lib -linet6 $LIBS"
		else
			AC_MSG_ERROR([$kame_path/lib/libinet6.a not found.

Please choose the proper path with the following command:

    configure --with-kame=PATH
])
		fi
		;;
esac

#
# Whether netinet6/in6.h is needed has to be defined in isc/platform.h.
# Including it on Kame-using platforms is very bad, though, because
# Kame uses #error against direct inclusion.   So include it on only
# the platform that is otherwise broken without it -- BSD/OS 4.0 through 4.1.
# This is done before the in6_pktinfo check because that's what
# netinet6/in6.h is needed for.
#
changequote({, })
1534
1535
case "$host" in
*-bsdi4.[01]*)
1536
1537
	ISC_PLATFORM_NEEDNETINET6IN6H="#define ISC_PLATFORM_NEEDNETINET6IN6H 1"
	LWRES_PLATFORM_NEEDNETINET6IN6H="#define LWRES_PLATFORM_NEEDNETINET6IN6H 1"
1538
	isc_netinet6in6_hack="#include <netinet6/in6.h>"
1539
1540
1541
1542
	;;
*)
	ISC_PLATFORM_NEEDNETINET6IN6H="#undef ISC_PLATFORM_NEEDNETINET6IN6H"
	LWRES_PLATFORM_NEEDNETINET6IN6H="#undef LWRES_PLATFORM_NEEDNETINET6IN6H"
1543
	isc_netinet6in6_hack=""
1544
1545
1546
1547
	;;
esac
changequote([, ])

1548
1549
1550
1551
#
# This is similar to the netinet6/in6.h issue.
#
case "$host" in
1552
*-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
1553
	# UnixWare
1554
1555
	ISC_PLATFORM_NEEDNETINETIN6H="#define ISC_PLATFORM_NEEDNETINETIN6H 1"
	LWRES_PLATFORM_NEEDNETINETIN6H="#define LWRES_PLATFORM_NEEDNETINETIN6H 1"
1556
	ISC_PLATFORM_FIXIN6ISADDR="#define ISC_PLATFORM_FIXIN6ISADDR 1"
1557
1558
	isc_netinetin6_hack="#include <netinet/in6.h>"
	;;
1559
1560
1561
*)
	ISC_PLATFORM_NEEDNETINETIN6H="#undef ISC_PLATFORM_NEEDNETINETIN6H"
	LWRES_PLATFORM_NEEDNETINETIN6H="#undef LWRES_PLATFORM_NEEDNETINETIN6H"
1562
	ISC_PLATFORM_FIXIN6ISADDR="#undef ISC_PLATFORM_FIXIN6ISADDR"
1563
1564
1565
1566
	isc_netinetin6_hack=""
	;;
esac

1567
1568
1569
#
# Now delve deeper into the suitability of the IPv6 support.
#
1570
1571
case "$found_ipv6" in
	yes)
1572
1573
		ISC_PLATFORM_HAVEIPV6="#define ISC_PLATFORM_HAVEIPV6 1"
		LWRES_PLATFORM_HAVEIPV6="#define LWRES_PLATFORM_HAVEIPV6 1"
1574

1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
		AC_MSG_CHECKING(for in6_addr)
		AC_TRY_COMPILE([
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
$isc_netinetin6_hack
$isc_netinet6in6_hack
],
[struct in6_addr in6; return (0);],
		[AC_MSG_RESULT(yes)
		 ISC_PLATFORM_HAVEINADDR6="#undef ISC_PLATFORM_HAVEINADDR6"
		 LWRES_PLATFORM_HAVEINADDR6="#undef LWRES_PLATFORM_HAVEINADDR6"
		 isc_in_addr6_hack=""],
		[AC_MSG_RESULT(no)
		 ISC_PLATFORM_HAVEINADDR6="#define ISC_PLATFORM_HAVEINADDR6 1"
		 LWRES_PLATFORM_HAVEINADDR6="#define LWRES_PLATFORM_HAVEINADDR6 1"
		 isc_in_addr6_hack="#define in6_addr in_addr6"])

1593
		AC_MSG_CHECKING(for in6addr_any)
1594
		AC_TRY_LINK([
1595
1596
#include <sys/types.h>
#include <sys/socket.h>
1597
#include <netinet/in.h>
1598
1599
1600
1601
$isc_netinetin6_hack
$isc_netinet6in6_hack
$isc_in_addr6_hack
],
1602
		[struct in6_addr in6; in6 = in6addr_any; return (in6.s6_addr[0]);],
1603
			[AC_MSG_RESULT(yes)
David Lawrence's avatar
David Lawrence committed
1604
1605
			 ISC_PLATFORM_NEEDIN6ADDRANY="#undef ISC_PLATFORM_NEEDIN6ADDRANY"
			 LWRES_PLATFORM_NEEDIN6ADDRANY="#undef LWRES_PLATFORM_NEEDIN6ADDRANY"],
1606
			[AC_MSG_RESULT(no)
David Lawrence's avatar
David Lawrence committed
1607
1608
			 ISC_PLATFORM_NEEDIN6ADDRANY="#define ISC_PLATFORM_NEEDIN6ADDRANY 1"
			 LWRES_PLATFORM_NEEDIN6ADDRANY="#define LWRES_PLATFORM_NEEDIN6ADDRANY 1"])
1609

1610
1611
1612
1613
1614
1615
1616
1617
1618
		AC_MSG_CHECKING(for in6addr_loopback)
		AC_TRY_LINK([
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
$isc_netinetin6_hack
$isc_netinet6in6_hack
$isc_in_addr6_hack
],
1619
		[struct in6_addr in6; in6 = in6addr_loopback; return (in6.s6_addr[0]);],
1620
1621
1622
1623
1624
1625
1626
			[AC_MSG_RESULT(yes)
			 ISC_PLATFORM_NEEDIN6ADDRLOOPBACK="#undef ISC_PLATFORM_NEEDIN6ADDRLOOPBACK"
			 LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK="#undef LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK"],
			[AC_MSG_RESULT(no)
			 ISC_PLATFORM_NEEDIN6ADDRLOOPBACK="#define ISC_PLATFORM_NEEDIN6ADDRLOOPBACK 1"
			 LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK="#define LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK 1"])

1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
		AC_MSG_CHECKING(for sin6_scope_id in struct sockaddr_in6)
		AC_TRY_COMPILE([
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
$isc_netinetin6_hack
$isc_netinet6in6_hack
],
		[struct sockaddr_in6 xyzzy; xyzzy.sin6_scope_id = 0; return (0);],
			[AC_MSG_RESULT(yes)
1637
			 ISC_PLATFORM_HAVESCOPEID="#define ISC_PLATFORM_HAVESCOPEID 1"
1638
1639
			 result="#define LWRES_HAVE_SIN6_SCOPE_ID 1"],
			[AC_MSG_RESULT(no)
1640
			 ISC_PLATFORM_HAVESCOPEID="#undef ISC_PLATFORM_HAVESCOPEID"
1641
1642
1643
			 result="#undef LWRES_HAVE_SIN6_SCOPE_ID"])
		LWRES_HAVE_SIN6_SCOPE_ID="$result"