configure.in revision 153816
1# Copyright (C) 2004, 2005  Internet Systems Consortium, Inc. ("ISC")
2# Copyright (C) 1998-2003  Internet Software Consortium.
3#
4# Permission to use, copy, modify, and distribute this software for any
5# purpose with or without fee is hereby granted, provided that the above
6# copyright notice and this permission notice appear in all copies.
7#
8# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
9# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
10# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
11# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
12# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
13# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14# PERFORMANCE OF THIS SOFTWARE.
15
16dnl
17AC_DIVERT_PUSH(1)dnl
18esyscmd([sed "s/^/# /" COPYRIGHT])dnl
19AC_DIVERT_POP()dnl
20
21AC_REVISION($Revision: 1.294.2.23.2.51 $)
22
23AC_INIT(lib/dns/name.c)
24AC_PREREQ(2.13)
25
26AC_CONFIG_HEADER(config.h)
27AC_CONFIG_SUBDIRS(lib/bind)
28
29AC_CANONICAL_HOST
30
31AC_PROG_MAKE_SET
32AC_PROG_RANLIB
33AC_PROG_INSTALL
34
35AC_SUBST(STD_CINCLUDES)
36AC_SUBST(STD_CDEFINES)
37AC_SUBST(STD_CWARNINGS)
38AC_SUBST(CCOPT)
39
40AC_PATH_PROG(AR, ar)
41ARFLAGS="cruv"
42AC_SUBST(AR)
43AC_SUBST(ARFLAGS)
44
45# The POSIX ln(1) program.  Non-POSIX systems may substitute
46# "copy" or something.
47LN=ln
48AC_SUBST(LN)
49
50case "$AR" in
51	"")
52		AC_MSG_ERROR([
53ar program not found.  Please fix your PATH to include the directory in
54which ar resides, or set AR in the environment with the full path to ar.
55])
56
57		;;
58esac
59
60#
61# Etags.
62#
63AC_PATH_PROGS(ETAGS, etags emacs-etags)
64
65#
66# Some systems, e.g. RH7, have the Exuberant Ctags etags instead of
67# GNU emacs etags, and it requires the -L flag.
68#
69if test "X$ETAGS" != "X"; then
70	AC_MSG_CHECKING(for Exuberant Ctags etags)
71	if $ETAGS --version 2>&1 | grep 'Exuberant Ctags' >/dev/null 2>&1; then
72		AC_MSG_RESULT(yes)
73		ETAGS="$ETAGS -L"
74	else
75		AC_MSG_RESULT(no)
76	fi
77fi
78AC_SUBST(ETAGS)
79
80#
81# Perl is optional; it is used only by some of the system test scripts.
82#
83AC_PATH_PROGS(PERL, perl5 perl)
84AC_SUBST(PERL)
85
86#
87# Special processing of paths depending on whether --prefix,
88# --sysconfdir or --localstatedir arguments were given.  What's
89# desired is some compatibility with the way previous versions
90# of BIND built; they defaulted to /usr/local for most parts of
91# the installation, but named.boot/named.conf was in /etc
92# and named.pid was in /var/run.
93#
94# So ... if none of --prefix, --sysconfdir or --localstatedir are
95# specified, set things up that way.  If --prefix is given, use
96# it for sysconfdir and localstatedir the way configure normally
97# would.  To change the prefix for everything but leave named.conf
98# in /etc or named.pid in /var/run, then do this the usual configure way:
99# ./configure --prefix=/somewhere --sysconfdir=/etc
100# ./configure --prefix=/somewhere --localstatedir=/var
101#
102# To put named.conf and named.pid in /usr/local with everything else,
103# set the prefix explicitly to /usr/local even though that's the default:
104# ./configure --prefix=/usr/local
105#
106case "$prefix" in
107        NONE)
108                case "$sysconfdir" in
109                        '${prefix}/etc')
110                                sysconfdir=/etc
111                                ;;
112                esac
113                case "$localstatedir" in
114                        '${prefix}/var')
115                                localstatedir=/var
116                                ;;
117                esac
118                ;;
119esac
120
121#
122# Make sure INSTALL uses an absolute path, else it will be wrong in all
123# Makefiles, since they use make/rules.in and INSTALL will be adjusted by
124# configure based on the location of the file where it is substituted.
125# Since in BIND9 INSTALL is only substituted into make/rules.in, an immediate
126# subdirectory of install-sh, This relative path will be wrong for all
127# directories more than one level down from install-sh.
128#
129case "$INSTALL" in
130	/*)
131                ;;
132        *)
133                #
134                # Not all systems have dirname.
135                #
136                changequote({, })
137                ac_dir="`echo $INSTALL | sed 's%/[^/]*$%%'`"
138                changequote([, ])
139
140                ac_prog="`echo $INSTALL | sed 's%.*/%%'`"
141                test "$ac_dir" = "$ac_prog" && ac_dir=.
142                test -d "$ac_dir" && ac_dir="`(cd \"$ac_dir\" && pwd)`"
143                INSTALL="$ac_dir/$ac_prog"
144                ;;
145esac
146
147#
148# On these hosts, we really want to use cc, not gcc, even if it is
149# found.  The gcc that these systems have will not correctly handle
150# pthreads.
151#
152# However, if the user sets $CC to be something, let that override
153# our change.
154#
155if test "X$CC" = "X" ; then
156	case "$host" in
157		*-dec-osf*)
158			CC="cc"
159			;;
160		*-solaris*)
161                        # Use Sun's cc if it is available, but watch
162                        # out for /usr/ucb/cc; it will never be the right
163                        # compiler to use.
164                        #
165                        # If setting CC here fails, the AC_PROG_CC done
166                        # below might still find gcc.
167			IFS="${IFS=	}"; ac_save_ifs="$IFS"; IFS=":"
168			for ac_dir in $PATH; do
169				test -z "$ac_dir" && ac_dir=.
170				case "$ac_dir" in
171				/usr/ucb)
172					# exclude
173					;;
174				*)
175					if test -f "$ac_dir/cc"; then
176						CC="$ac_dir/cc"
177						break
178					fi
179					;;
180				esac
181			done
182			IFS="$ac_save_ifs"
183			;;
184		*-hp-hpux*)
185			CC="cc"
186			;;
187		mips-sgi-irix*)
188			CC="cc"
189			;;
190	esac
191fi
192
193AC_PROG_CC
194
195#
196# gcc's optimiser is broken at -02 for ultrasparc
197#
198if test "$ac_env_CFLAGS_set" != set -a "X$GCC" = "Xyes"; then
199	case "$host" in
200	sparc-*)
201		CCFLAGS="-g -O1"
202		;;
203	esac
204fi
205
206#
207# OS dependent CC flags
208#
209case "$host" in
210	# OSF 5.0: recv/send are only avaliable with -D_POSIX_PII_SOCKET or
211	# -D_XOPEN_SOURCE_EXTENDED.
212	*-dec-osf*)
213		STD_CDEFINES="$STD_CDEFINES -D_POSIX_PII_SOCKET"
214		CPPFLAGS="$CPPFLAGS -D_POSIX_PII_SOCKET"
215		;;
216	#HP-UX: need -D_XOPEN_SOURCE_EXTENDED and -lxnet for CMSG macros
217	*-hp-hpux*)
218		STD_CDEFINES="$STD_CDEFINES -D_XOPEN_SOURCE_EXTENDED"
219		CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED"
220		LIBS="-lxnet $LIBS"
221		;;
222	# Solaris: need -D_XPG4_2 and -D__EXTENSIONS__ for CMSG macros
223	*-solaris*)
224		STD_CDEFINES="$STD_CDEFINES -D_XPG4_2 -D__EXTENSIONS__"
225		CPPFLAGS="$CPPFLAGS -D_XPG4_2 -D__EXTENSIONS__"
226		;;
227esac
228
229AC_HEADER_STDC
230
231AC_CHECK_HEADERS(fcntl.h sys/time.h unistd.h sys/sockio.h sys/select.h sys/param.h sys/sysctl.h net/if6.h,,,
232[$ac_includes_default
233#ifdef HAVE_SYS_PARAM_H
234# include <sys/param.h>
235#endif
236])
237
238AC_C_CONST
239AC_C_INLINE
240AC_CHECK_FUNC(sysctlbyname, AC_DEFINE(HAVE_SYSCTLBYNAME))
241
242#
243# UnixWare 7.1.1 with the feature supplement to the UDK compiler
244# is reported to not support "static inline" (RT #1212).
245#
246AC_MSG_CHECKING(for static inline breakage)
247AC_TRY_COMPILE(, [
248		foo1();
249	}
250
251	static inline int foo1() {
252		return 0;
253	}
254
255	static inline int foo2() {
256		return foo1();
257	],
258	[AC_MSG_RESULT(no)],
259	[AC_MSG_RESULT(yes)
260         AC_DEFINE(inline, )])
261
262AC_TYPE_SIZE_T
263AC_CHECK_TYPE(ssize_t, int)
264AC_CHECK_TYPE(uintptr_t,unsigned long)
265AC_CHECK_TYPE(socklen_t,
266[AC_DEFINE(ISC_SOCKADDR_LEN_T, socklen_t)],
267[
268AC_TRY_COMPILE(
269[
270#include <sys/types.h>
271#include <sys/socket.h>
272int getsockname(int, struct sockaddr *, size_t *);
273],[],
274[AC_DEFINE(ISC_SOCKADDR_LEN_T, size_t)],
275[AC_DEFINE(ISC_SOCKADDR_LEN_T, int)])
276],
277[
278#include <sys/types.h>
279#include <sys/socket.h>
280])
281AC_SUBST(ISC_SOCKADDR_LEN_T)
282AC_HEADER_TIME
283AC_MSG_CHECKING(for long long)
284AC_TRY_COMPILE([],[long long i = 0; return (0);],
285	[AC_MSG_RESULT(yes)
286		ISC_PLATFORM_HAVELONGLONG="#define ISC_PLATFORM_HAVELONGLONG 1"],
287	[AC_MSG_RESULT(no)
288		ISC_PLATFORM_HAVELONGLONG="#undef ISC_PLATFORM_HAVELONGLONG"])
289AC_SUBST(ISC_PLATFORM_HAVELONGLONG)
290
291#
292# check if we have lifconf
293#
294AC_MSG_CHECKING(for struct lifconf)
295AC_TRY_COMPILE([
296#include <sys/types.h>
297#include <sys/socket.h>
298#include <net/if.h>
299],
300[
301struct lifconf lifconf;
302lifconf.lifc_len = 0;
303]
304,
305	[AC_MSG_RESULT(yes)
306		ISC_PLATFORM_HAVELIFCONF="#define ISC_PLATFORM_HAVELIFCONF 1"],
307	[AC_MSG_RESULT(no)
308		ISC_PLATFORM_HAVELIFCONF="#undef ISC_PLATFORM_HAVELIFCONF"])
309AC_SUBST(ISC_PLATFORM_HAVELIFCONF)
310
311
312#
313# check if we need to #include sys/select.h explicitly
314#
315case $ac_cv_header_unistd_h in
316yes)
317AC_MSG_CHECKING(if unistd.h or sys/types.h defines fd_set)
318AC_TRY_COMPILE([
319#include <sys/types.h> /* Ultrix */
320#include <unistd.h>],
321[fd_set read_set; return (0);],
322	[AC_MSG_RESULT(yes)
323	 ISC_PLATFORM_NEEDSYSSELECTH="#undef ISC_PLATFORM_NEEDSYSSELECTH"
324	 LWRES_PLATFORM_NEEDSYSSELECTH="#undef LWRES_PLATFORM_NEEDSYSSELECTH"],
325	[AC_MSG_RESULT(no)
326	case $ac_cv_header_sys_select_h in
327	yes)
328         ISC_PLATFORM_NEEDSYSSELECTH="#define ISC_PLATFORM_NEEDSYSSELECTH 1"
329	 LWRES_PLATFORM_NEEDSYSSELECTH="#define LWRES_PLATFORM_NEEDSYSSELECTH 1"
330		;;
331	no)
332		AC_MSG_ERROR([need either working unistd.h or sys/select.h])
333		;;
334	esac
335	])
336	;;
337no)
338	case $ac_cv_header_sys_select_h in
339	yes)
340             ISC_PLATFORM_NEEDSYSSELECTH="#define ISC_PLATFORM_NEEDSYSSELECTH 1"
341	     LWRES_PLATFORM_NEEDSYSSELECTH="#define LWRES_PLATFORM_NEEDSYSSELECTH 1"
342		;;
343	no)
344		AC_MSG_ERROR([need either unistd.h or sys/select.h])
345		;;
346	esac
347	;;
348esac
349AC_SUBST(ISC_PLATFORM_NEEDSYSSELECTH)
350AC_SUBST(LWRES_PLATFORM_NEEDSYSSELECTH)
351
352#
353# Find the machine's endian flavor.
354#
355AC_C_BIGENDIAN
356
357#
358# was --with-openssl specified?
359#
360AC_MSG_CHECKING(for OpenSSL library)
361AC_ARG_WITH(openssl,
362[  --with-openssl[=PATH]   Build with OpenSSL [yes|no|path].
363                          (Required for DNSSEC)],
364    use_openssl="$withval", use_openssl="auto")
365
366openssldirs="/usr /usr/local /usr/local/ssl /usr/pkg"
367if test "$use_openssl" = "auto"
368then
369	for d in $openssldirs
370	do
371		if test -f $d/include/openssl/opensslv.h
372		then
373			use_openssl=$d
374			break
375		fi
376	done
377fi
378case "$use_openssl" in
379	no)
380		AC_MSG_RESULT(no)
381		DST_OPENSSL_INC=""
382		USE_OPENSSL=""
383		;;
384	auto)
385		DST_OPENSSL_INC=""
386		USE_OPENSSL=""
387		AC_MSG_RESULT(not found)
388		;;
389	*)
390		if test "$use_openssl" = "yes"
391		then
392		    	# User did not specify a path - guess it
393			for d in $openssldirs
394			do
395				if test -f $d/include/openssl/opensslv.h
396				then
397				 	use_openssl=$d
398					break
399				fi
400			done
401			if test "$use_openssl" = "yes"
402			then
403			    	AC_MSG_RESULT(not found)
404				AC_MSG_ERROR(
405[OpenSSL was not found in any of $openssldirs; use --with-openssl=/path])
406			fi
407		fi
408		USE_OPENSSL='-DOPENSSL'
409		if test "$use_openssl" = "/usr"
410		then
411			DST_OPENSSL_INC=""
412			DNS_OPENSSL_LIBS="-lcrypto"
413		else
414			DST_OPENSSL_INC="-I$use_openssl/include"
415			case $host in
416			*-solaris*)
417				DNS_OPENSSL_LIBS="-L$use_openssl/lib -R$use_openssl/lib -lcrypto"
418				;;
419			*)
420				DNS_OPENSSL_LIBS="-L$use_openssl/lib -lcrypto"
421				;;
422			esac
423		fi
424		AC_MSG_RESULT(using openssl from $use_openssl/lib and $use_openssl/include)
425
426		saved_cflags="$CFLAGS"
427		saved_libs="$LIBS"
428		CFLAGS="$CFLAGS $DST_OPENSSL_INC"
429		LIBS="$LIBS $DNS_OPENSSL_LIBS"
430		AC_MSG_CHECKING(whether linking with OpenSSL works)
431		AC_TRY_RUN([
432#include <openssl/err.h>
433int main() {
434	ERR_clear_error();
435	return (0);
436}
437],
438	        [AC_MSG_RESULT(yes)],
439		[AC_MSG_RESULT(no)
440		 AC_MSG_ERROR(Could not run test program using OpenSSL from
441$use_openssl/lib and $use_openssl/include.
442Please check the argument to --with-openssl and your
443shared library configuration (e.g., LD_LIBRARY_PATH).)],
444		[AC_MSG_RESULT(assuming it does work on target platform)])
445
446		AC_MSG_CHECKING(whether linking with OpenSSL requires -ldl)
447		AC_TRY_LINK([
448#include <openssl/err.h>],
449[ DSO_METHOD_dlfcn(); ],
450		[AC_MSG_RESULT(no)],
451		[LIBS="$LIBS -ldl"
452		AC_TRY_LINK([
453#include <openssl/err.h>
454],[ DSO_METHOD_dlfcn(); ],
455		[AC_MSG_RESULT(yes)
456		DNS_OPENSSL_LIBS="$DNS_OPENSSL_LIBS -ldl"
457		],
458		 [AC_MSG_RESULT(unknown)
459		 AC_MSG_ERROR(OpenSSL has unsupported dynamic loading)],
460		[AC_MSG_RESULT(assuming it does work on target platform)])
461		],
462		[AC_MSG_RESULT(assuming it does work on target platform)]
463		)
464		 
465#
466#	OpenSSLDie is new with CERT CS-2002-23.  If we see it we have may
467#	have a patched library otherwise check that we are greater than
468#	the fixed versions
469#
470		AC_CHECK_FUNC(OpenSSLDie,
471		AC_MSG_CHECKING(OpenSSL library version)
472		AC_TRY_RUN([
473#include <stdio.h>
474#include <openssl/opensslv.h>
475int main() {
476        if (OPENSSL_VERSION_NUMBER >= 0x0090581fL)
477                return (0);
478	printf("\n\nFound   OPENSSL_VERSION_NUMBER %#010x\n",
479		OPENSSL_VERSION_NUMBER);
480	printf("Require OPENSSL_VERSION_NUMBER 0x0090581f or greater\n\n");
481        return (1);
482}
483],
484	        [AC_MSG_RESULT(ok)],
485		[AC_MSG_RESULT(not compatible)
486		 AC_MSG_ERROR(you need OpenSSL 0.9.5a or newer)],
487		[AC_MSG_RESULT(assuming target platform has compatible version)])
488		,
489	        AC_MSG_RESULT(did not find fixes for CERT CA-2002-23)
490		AC_MSG_CHECKING(OpenSSL library version)
491		AC_TRY_RUN([
492#include <stdio.h>
493#include <openssl/opensslv.h>
494int main() {
495        if ((OPENSSL_VERSION_NUMBER >= 0x0090605fL &&
496	     OPENSSL_VERSION_NUMBER < 0x009070000L) ||
497	     OPENSSL_VERSION_NUMBER >= 0x00907003L)
498                return (0);
499	printf("\n\nFound   OPENSSL_VERSION_NUMBER %#010x\n",
500		OPENSSL_VERSION_NUMBER);
501	printf("Require OPENSSL_VERSION_NUMBER 0x0090605f or greater (0.9.6e)\n"
502	       "Require OPENSSL_VERSION_NUMBER 0x00907003 or greater (0.9.7-beta2)\n\n");
503        return (1);
504}
505],
506	        [AC_MSG_RESULT(ok)],
507		[AC_MSG_RESULT(not compatible)
508		 AC_MSG_ERROR(you need OpenSSL 0.9.6e/0.9.7-beta2 (or newer): CERT CA-2002-23)],
509		[AC_MSG_RESULT(assuming target platform has compatible version)]))
510		AC_MSG_CHECKING(for OpenSSL DSA support)
511		if test -f $use_openssl/include/openssl/dsa.h
512		then
513			AC_DEFINE(HAVE_OPENSSL_DSA)
514			AC_MSG_RESULT(yes)
515		else
516			AC_MSG_RESULT(no)
517		fi
518		CFLAGS="$saved_cflags"
519		LIBS="$saved_libs"
520		;;
521esac
522
523#
524# This would include the system openssl path (and linker options to use
525# it as needed) if it is found.
526#
527
528AC_SUBST(USE_OPENSSL)
529AC_SUBST(DST_OPENSSL_INC)
530DNS_CRYPTO_LIBS="$DNS_CRYPTO_LIBS $DNS_OPENSSL_LIBS"
531
532#
533# was --with-gssapi specified?
534#
535#AC_MSG_CHECKING(for GSSAPI library)
536#AC_ARG_WITH(gssapi,
537#[  --with-gssapi=PATH   Specify path for system-supplied GSSAPI],
538#    use_gssapi="$withval", use_gssapi="no")
539#
540#case "$use_gssapi" in
541#	no)
542#		USE_GSSAPI=''
543#		DST_GSSAPI_INC=''
544#		DNS_GSSAPI_LIBS=''
545#		AC_MSG_RESULT(not specified)
546#		;;
547#	yes)
548#		AC_MSG_ERROR([--with-gssapi must specify a path])
549#		;;
550#	*)
551#		USE_GSSAPI='-DGSSAPI'
552#		DST_GSSAPI_INC="-I$use_gssapi/include"
553#		DNS_GSSAPI_LIBS="-L$use_gssapi/lib -lgssapi_krb5"
554#		AC_MSG_RESULT(using gssapi from $use_gssapi/lib and $use_gssapi/include)
555#		;;
556#esac
557
558USE_GSSAPI=''
559DST_GSSAPI_INC=''
560DNS_GSSAPI_LIBS=''
561
562AC_SUBST(USE_GSSAPI)
563AC_SUBST(DST_GSSAPI_INC)
564DNS_CRYPTO_LIBS="$DNS_CRYPTO_LIBS $DNS_GSSAPI_LIBS"
565
566#
567# Applications linking with libdns also need to link with these libraries.
568#
569
570AC_SUBST(DNS_CRYPTO_LIBS)
571
572#
573# was --with-randomdev specified?
574#
575AC_MSG_CHECKING(for random device)
576AC_ARG_WITH(randomdev,
577[  --with-randomdev=PATH Specify path for random device],
578    use_randomdev="$withval", use_randomdev="unspec")
579
580case "$use_randomdev" in
581	unspec)
582		case "$host" in
583			*-openbsd*)
584				devrandom=/dev/arandom
585				;;
586			*)
587				devrandom=/dev/random
588				;;
589		esac
590		AC_MSG_RESULT($devrandom)
591		AC_CHECK_FILE($devrandom,
592			      AC_DEFINE_UNQUOTED(PATH_RANDOMDEV,
593						 "$devrandom"),)
594		;;
595	yes)
596		AC_MSG_ERROR([--with-randomdev must specify a path])
597		;;
598	no)
599		AC_MSG_RESULT(disabled)
600		;;
601	*)
602		AC_DEFINE_UNQUOTED(PATH_RANDOMDEV, "$use_randomdev")
603		AC_MSG_RESULT(using "$use_randomdev")
604		;;
605esac
606
607#
608# Do we have arc4random() ?
609#
610AC_CHECK_FUNC(arc4random, AC_DEFINE(HAVE_ARC4RANDOM))
611
612sinclude(config.threads.in)dnl
613
614if $use_threads
615then
616	#
617	# We'd like to use sigwait() too
618	#
619	AC_CHECK_LIB(c, sigwait,
620		     AC_DEFINE(HAVE_SIGWAIT),
621		     AC_CHECK_LIB(pthread, sigwait,
622				  AC_DEFINE(HAVE_SIGWAIT),
623				  AC_CHECK_LIB(pthread, _Psigwait,
624					       AC_DEFINE(HAVE_SIGWAIT),))
625	)
626
627	AC_CHECK_FUNC(pthread_attr_getstacksize,
628		      AC_DEFINE(HAVE_PTHREAD_ATTR_GETSTACKSIZE),)
629
630	AC_CHECK_FUNC(pthread_attr_setstacksize,
631		      AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE),)
632
633	#
634	# Additional OS-specific issues related to pthreads and sigwait.
635	#
636	case "$host" in
637		#
638		# One more place to look for sigwait.
639		#
640		*-freebsd*)
641			AC_CHECK_LIB(c_r, sigwait, AC_DEFINE(HAVE_SIGWAIT),)
642			case $host in
643			*-freebsd5.[[012]]|*-freebsd5.[[012]].*);;
644			*-freebsd5.[[3456789]]|*-freebsd5.[[3456789]].*)
645				AC_DEFINE(NEED_PTHREAD_SCOPE_SYSTEM)
646				;;
647			*-freebsd6.*)
648				AC_DEFINE(NEED_PTHREAD_SCOPE_SYSTEM)
649				;;
650			esac
651			;;
652		#
653		# BSDI 3.0 through 4.0.1 needs pthread_init() to be
654		# called before certain pthreads calls.	 This is deprecated
655		# in BSD/OS 4.1.
656		#
657		*-bsdi3.*|*-bsdi4.0*)
658			AC_DEFINE(NEED_PTHREAD_INIT)
659			;;
660		#
661		# LinuxThreads requires some changes to the way we
662		# deal with signals.
663		#
664		*-linux*)
665			AC_DEFINE(HAVE_LINUXTHREADS)
666			;;
667		#
668		# Ensure the right sigwait() semantics on Solaris and make
669		# sure we call pthread_setconcurrency.
670		#
671		*-solaris*)
672			AC_DEFINE(_POSIX_PTHREAD_SEMANTICS)
673			AC_CHECK_FUNC(pthread_setconcurrency,
674				      AC_DEFINE(CALL_PTHREAD_SETCONCURRENCY))
675			;;
676		#
677		# UnixWare does things its own way.
678		#
679		*-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
680			AC_DEFINE(HAVE_UNIXWARE_SIGWAIT)
681			;;
682	esac
683
684	#
685	# Look for sysconf to allow detection of the number of processors.
686	#
687	AC_CHECK_FUNC(sysconf, AC_DEFINE(HAVE_SYSCONF),)
688
689	if test "X$GCC" = "Xyes"; then
690		case "$host" in
691		*-freebsd*)
692			CC="$CC -pthread"
693			CCOPT="$CCOPT -pthread"
694			STD_CDEFINES="$STD_CDEFINES -D_THREAD_SAFE"
695			;;
696		*-openbsd*)
697			CC="$CC -pthread"
698			CCOPT="$CCOPT -pthread"
699			;;
700		*-solaris*)
701			LIBS="$LIBS -lthread"
702			;;
703		*-ibm-aix*)
704			STD_CDEFINES="$STD_CDEFINES -D_THREAD_SAFE"
705			;;
706		esac
707	else
708		case $host in
709		*-dec-osf*)
710			CC="$CC -pthread"
711			CCOPT="$CCOPT -pthread"
712			;;
713		*-solaris*)
714			CC="$CC -mt"
715			CCOPT="$CCOPT -mt"
716			;;
717		*-ibm-aix*)
718			STD_CDEFINES="$STD_CDEFINES -D_THREAD_SAFE"
719			;;
720		*-sco-sysv*uw*|*-*-sysv*UnixWare*)
721			CC="$CC -Kthread"
722			CCOPT="$CCOPT -Kthread"
723			;;
724		*-*-sysv*OpenUNIX*)
725			CC="$CC -Kpthread"
726			CCOPT="$CCOPT -Kpthread"
727			;;
728		esac
729	fi
730	ALWAYS_DEFINES="-D_REENTRANT"
731	ISC_PLATFORM_USETHREADS="#define ISC_PLATFORM_USETHREADS 1"
732	thread_dir=pthreads
733else
734	ISC_PLATFORM_USETHREADS="#undef ISC_PLATFORM_USETHREADS"
735	thread_dir=nothreads
736	ALWAYS_DEFINES=""
737fi
738
739AC_SUBST(ALWAYS_DEFINES)
740AC_SUBST(ISC_PLATFORM_USETHREADS)
741ISC_THREAD_DIR=$thread_dir
742AC_SUBST(ISC_THREAD_DIR)
743
744#
745# In solaris 10, SMF can manage named service
746#
747AC_CHECK_LIB(scf, smf_enable_instance)
748
749#
750# flockfile is usually provided by pthreads, but we may want to use it
751# even if compiled with --disable-threads.  getc_unlocked might also not
752# be defined.
753#
754AC_CHECK_FUNC(flockfile, AC_DEFINE(HAVE_FLOCKFILE),)
755AC_CHECK_FUNC(getc_unlocked, AC_DEFINE(HAVE_GETCUNLOCKED),)
756
757# 
758# Indicate what the final decision was regarding threads.
759#
760AC_MSG_CHECKING(whether to build with threads)
761if $use_threads; then
762	AC_MSG_RESULT(yes)
763else
764	AC_MSG_RESULT(no)
765fi
766
767# 
768# End of pthreads stuff.
769#
770
771#
772# Large File
773#
774AC_ARG_ENABLE(largefile, [  --enable-largefile	  64-bit file support],
775	      want_largefile="yes", want_largefile="no")
776case $want_largefile in
777	yes)
778		ALWAYS_DEFINES="$ALWAYS_DEFINES -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
779		;;
780	*)
781		;;
782esac
783
784#
785# Additional compiler settings.
786#
787MKDEPCC="$CC"
788MKDEPCFLAGS="-M"
789IRIX_DNSSEC_WARNINGS_HACK=""
790
791if test "X$GCC" = "Xyes"; then
792	STD_CWARNINGS="$STD_CWARNINGS -W -Wall -Wmissing-prototypes -Wcast-qual -Wwrite-strings -Wformat"
793	case "$host" in
794	*-hp-hpux*)
795		LDFLAGS="-Wl,+vnocompatwarnings $LDFLAGS"
796		;;
797	esac
798else
799	case $host in
800	*-dec-osf*)
801		CC="$CC -std"
802		CCOPT="$CCOPT -std"
803		MKDEPCC="$CC"
804		;;
805	*-hp-hpux*)
806		CC="$CC -Ae -z"
807		# The version of the C compiler that constantly warns about
808                # 'const' as well as alignment issues is unfortunately not
809                # able to be discerned via the version of the operating
810                # system, nor does cc have a version flag.
811		case "`$CC +W 123 2>&1`" in
812		*Unknown?option*)
813			STD_CWARNINGS="+w1"
814			;;
815		*)
816			# Turn off the pointlessly noisy warnings.
817			STD_CWARNINGS="+w1 +W 474,530,2193,2236"
818			;;
819		esac
820		CCOPT="$CCOPT -Ae -z"
821		LDFLAGS="-Wl,+vnocompatwarnings $LDFLAGS"
822		MKDEPPROG='cc -Ae -E -Wp,-M >/dev/null 2>>$TMP'
823		;;
824	*-sgi-irix*)
825		STD_CWARNINGS="-fullwarn -woff 1209"
826		#
827		# Silence more than 250 instances of
828		#   "prototyped function redeclared without prototype"
829		# and 11 instances of
830		#   "variable ... was set but never used"
831		# from lib/dns/sec/openssl.
832		#
833		IRIX_DNSSEC_WARNINGS_HACK="-woff 1692,1552"
834		;;
835	*-solaris*)
836		MKDEPCFLAGS="-xM"
837		;;
838	*-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
839                # UnixWare
840		CC="$CC -w"
841		;;
842	esac
843fi
844
845AC_SUBST(MKDEPCC)
846AC_SUBST(MKDEPCFLAGS)
847AC_SUBST(MKDEPPROG)
848AC_SUBST(IRIX_DNSSEC_WARNINGS_HACK)
849
850#
851# NLS
852#
853AC_CHECK_FUNC(catgets, AC_DEFINE(HAVE_CATGETS),)
854
855#
856# -lxnet buys us one big porting headache...  standards, gotta love 'em.
857#
858# AC_CHECK_LIB(xnet, socket, ,
859#    AC_CHECK_LIB(socket, socket)
860#    AC_CHECK_LIB(nsl, inet_ntoa)
861# )
862#
863# Use this for now, instead:
864#
865case "$host" in
866	mips-sgi-irix*)
867		;;
868	*)
869		AC_CHECK_LIB(socket, socket)
870		AC_CHECK_LIB(nsl, inet_ntoa)
871		;;
872esac
873
874#
875# Purify support
876#
877AC_MSG_CHECKING(whether to use purify)
878AC_ARG_WITH(purify,
879	[  --with-purify[=PATH]	use Rational purify],
880	use_purify="$withval", use_purify="no")
881
882case "$use_purify" in
883	no)
884		;;
885	yes)
886		AC_PATH_PROG(purify_path, purify, purify)
887		;;
888	*)
889		purify_path="$use_purify"
890		;;
891esac
892
893case "$use_purify" in
894	no)
895		AC_MSG_RESULT(no)
896		PURIFY=""
897		;;
898	*)
899		if test -f $purify_path || test $purify_path = purify; then
900			AC_MSG_RESULT($purify_path)
901			PURIFYFLAGS="`echo $PURIFYOPTIONS`"
902			PURIFY="$purify_path $PURIFYFLAGS"
903		else
904			AC_MSG_ERROR([$purify_path not found.
905
906Please choose the proper path with the following command:
907
908    configure --with-purify=PATH
909])
910		fi
911		;;
912esac
913
914AC_SUBST(PURIFY)
915
916#
917# GNU libtool support
918#
919AC_ARG_WITH(libtool,
920	    [  --with-libtool	use GNU libtool (following indented options supported)],
921	    use_libtool="$withval", use_libtool="no")
922
923case $use_libtool in
924	yes)
925		AM_PROG_LIBTOOL
926		O=lo
927		A=la
928		LIBTOOL_MKDEP_SED='s;\.o;\.lo;'
929		LIBTOOL_MODE_COMPILE='--mode=compile'
930		LIBTOOL_MODE_INSTALL='--mode=install'
931		LIBTOOL_MODE_LINK='--mode=link'
932		case "$host" in
933		*) LIBTOOL_ALLOW_UNDEFINED= ;;
934		esac
935		case "$host" in
936		*-ibm-aix*) LIBTOOL_IN_MAIN="-Wl,-bI:T_testlist.imp" ;;
937		*) LIBTOOL_IN_MAIN= ;;
938		esac;
939		;;
940	*)
941		O=o
942		A=a
943		LIBTOOL=
944		AC_SUBST(LIBTOOL)
945		LIBTOOL_MKDEP_SED=
946		LIBTOOL_MODE_COMPILE=
947		LIBTOOL_MODE_INSTALL=
948		LIBTOOL_MODE_LINK=
949		LIBTOOL_ALLOW_UNDEFINED=
950		LIBTOOL_IN_MAIN=
951		;;
952esac
953
954#
955# File name extension for static archive files, for those few places
956# where they are treated differently from dynamic ones.
957#
958SA=a
959
960AC_SUBST(O)
961AC_SUBST(A)
962AC_SUBST(SA)
963AC_SUBST(LIBTOOL_MKDEP_SED)
964AC_SUBST(LIBTOOL_MODE_COMPILE)
965AC_SUBST(LIBTOOL_MODE_INSTALL)
966AC_SUBST(LIBTOOL_MODE_LINK)
967AC_SUBST(LIBTOOL_ALLOW_UNDEFINED)
968AC_SUBST(LIBTOOL_IN_MAIN)
969
970#
971# build libbind?
972#
973AC_ARG_ENABLE(libbind,
974	[  --enable-libbind		build libbind [default=no]])
975
976case "$enable_libbind" in
977	yes)
978		LIBBIND=lib/bind
979		AC_SUBST(LIBBIND)
980		;;
981	no|'')
982		;;
983esac
984
985#
986# Here begins a very long section to determine the system's networking
987# capabilities.  The order of the tests is signficant.
988#
989
990#
991# IPv6
992#
993AC_ARG_ENABLE(ipv6,
994	[  --enable-ipv6		use IPv6 [default=autodetect]])
995
996case "$enable_ipv6" in
997	yes|''|autodetect)
998		AC_DEFINE(WANT_IPV6)
999		;;
1000	no)
1001		;;
1002esac
1003
1004#
1005# We do the IPv6 compilation checking after libtool so that we can put
1006# the right suffix on the files.
1007#
1008AC_MSG_CHECKING(for IPv6 structures)
1009AC_TRY_COMPILE([
1010#include <sys/types.h>
1011#include <sys/socket.h>
1012#include <netinet/in.h>],
1013[struct sockaddr_in6 sin6; return (0);],
1014	[AC_MSG_RESULT(yes)
1015	 found_ipv6=yes],
1016	[AC_MSG_RESULT(no)
1017	 found_ipv6=no])
1018
1019#
1020# See whether IPv6 support is provided via a Kame add-on.
1021# This is done before other IPv6 linking tests to LIBS is properly set.
1022#
1023AC_MSG_CHECKING(for Kame IPv6 support)
1024AC_ARG_WITH(kame,
1025	[  --with-kame[=PATH]	use Kame IPv6 [default path /usr/local/v6]],
1026	use_kame="$withval", use_kame="no")
1027
1028case "$use_kame" in
1029	no)
1030		;;
1031	yes)
1032		kame_path=/usr/local/v6
1033		;;
1034	*)
1035		kame_path="$use_kame"
1036		;;
1037esac
1038
1039case "$use_kame" in
1040	no)
1041		AC_MSG_RESULT(no)
1042		;;
1043	*)
1044		if test -f $kame_path/lib/libinet6.a; then
1045			AC_MSG_RESULT($kame_path/lib/libinet6.a)
1046			LIBS="-L$kame_path/lib -linet6 $LIBS"
1047		else
1048			AC_MSG_ERROR([$kame_path/lib/libinet6.a not found.
1049
1050Please choose the proper path with the following command:
1051
1052    configure --with-kame=PATH
1053])
1054		fi
1055		;;
1056esac
1057
1058#
1059# Whether netinet6/in6.h is needed has to be defined in isc/platform.h.
1060# Including it on Kame-using platforms is very bad, though, because
1061# Kame uses #error against direct inclusion.   So include it on only
1062# the platform that is otherwise broken without it -- BSD/OS 4.0 through 4.1.
1063# This is done before the in6_pktinfo check because that's what
1064# netinet6/in6.h is needed for.
1065#
1066changequote({, })
1067case "$host" in
1068*-bsdi4.[01]*)
1069	ISC_PLATFORM_NEEDNETINET6IN6H="#define ISC_PLATFORM_NEEDNETINET6IN6H 1"
1070	LWRES_PLATFORM_NEEDNETINET6IN6H="#define LWRES_PLATFORM_NEEDNETINET6IN6H 1"
1071	isc_netinet6in6_hack="#include <netinet6/in6.h>"
1072	;;
1073*)
1074	ISC_PLATFORM_NEEDNETINET6IN6H="#undef ISC_PLATFORM_NEEDNETINET6IN6H"
1075	LWRES_PLATFORM_NEEDNETINET6IN6H="#undef LWRES_PLATFORM_NEEDNETINET6IN6H"
1076	isc_netinet6in6_hack=""
1077	;;
1078esac
1079changequote([, ])
1080
1081#
1082# This is similar to the netinet6/in6.h issue.
1083#
1084case "$host" in
1085*-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
1086        # UnixWare
1087	ISC_PLATFORM_NEEDNETINETIN6H="#define ISC_PLATFORM_NEEDNETINETIN6H 1"
1088	LWRES_PLATFORM_NEEDNETINETIN6H="#define LWRES_PLATFORM_NEEDNETINETIN6H 1"
1089        ISC_PLATFORM_FIXIN6ISADDR="#define ISC_PLATFORM_FIXIN6ISADDR 1"
1090	isc_netinetin6_hack="#include <netinet/in6.h>"
1091	;;
1092*)
1093	ISC_PLATFORM_NEEDNETINETIN6H="#undef ISC_PLATFORM_NEEDNETINETIN6H"
1094	LWRES_PLATFORM_NEEDNETINETIN6H="#undef LWRES_PLATFORM_NEEDNETINETIN6H"
1095        ISC_PLATFORM_FIXIN6ISADDR="#undef ISC_PLATFORM_FIXIN6ISADDR"
1096	isc_netinetin6_hack=""
1097	;;
1098esac
1099
1100#
1101# Now delve deeper into the suitability of the IPv6 support.
1102#
1103case "$found_ipv6" in
1104	yes)
1105		ISC_PLATFORM_HAVEIPV6="#define ISC_PLATFORM_HAVEIPV6 1"
1106		LWRES_PLATFORM_HAVEIPV6="#define LWRES_PLATFORM_HAVEIPV6 1"
1107
1108		AC_MSG_CHECKING(for in6_addr)
1109		AC_TRY_COMPILE([
1110#include <sys/types.h>
1111#include <sys/socket.h>
1112#include <netinet/in.h>
1113$isc_netinetin6_hack
1114$isc_netinet6in6_hack
1115],
1116[struct in6_addr in6; return (0);],
1117		[AC_MSG_RESULT(yes)
1118		 ISC_PLATFORM_HAVEINADDR6="#undef ISC_PLATFORM_HAVEINADDR6"
1119		 LWRES_PLATFORM_HAVEINADDR6="#undef LWRES_PLATFORM_HAVEINADDR6"
1120		 isc_in_addr6_hack=""],
1121		[AC_MSG_RESULT(no)
1122		 ISC_PLATFORM_HAVEINADDR6="#define ISC_PLATFORM_HAVEINADDR6 1"
1123		 LWRES_PLATFORM_HAVEINADDR6="#define LWRES_PLATFORM_HAVEINADDR6 1"
1124		 isc_in_addr6_hack="#define in6_addr in_addr6"])
1125
1126		AC_MSG_CHECKING(for in6addr_any)
1127		AC_TRY_LINK([
1128#include <sys/types.h>
1129#include <sys/socket.h>
1130#include <netinet/in.h>
1131$isc_netinetin6_hack
1132$isc_netinet6in6_hack
1133$isc_in_addr6_hack
1134],
1135		[struct in6_addr in6; in6 = in6addr_any; return (in6.s6_addr[0]);],
1136			[AC_MSG_RESULT(yes)
1137			 ISC_PLATFORM_NEEDIN6ADDRANY="#undef ISC_PLATFORM_NEEDIN6ADDRANY"
1138			 LWRES_PLATFORM_NEEDIN6ADDRANY="#undef LWRES_PLATFORM_NEEDIN6ADDRANY"],
1139			[AC_MSG_RESULT(no)
1140			 ISC_PLATFORM_NEEDIN6ADDRANY="#define ISC_PLATFORM_NEEDIN6ADDRANY 1"
1141			 LWRES_PLATFORM_NEEDIN6ADDRANY="#define LWRES_PLATFORM_NEEDIN6ADDRANY 1"])
1142
1143		AC_MSG_CHECKING(for in6addr_loopback)
1144		AC_TRY_LINK([
1145#include <sys/types.h>
1146#include <sys/socket.h>
1147#include <netinet/in.h>
1148$isc_netinetin6_hack
1149$isc_netinet6in6_hack
1150$isc_in_addr6_hack
1151],
1152		[struct in6_addr in6; in6 = in6addr_loopback; return (in6.s6_addr[0]);],
1153			[AC_MSG_RESULT(yes)
1154			 ISC_PLATFORM_NEEDIN6ADDRLOOPBACK="#undef ISC_PLATFORM_NEEDIN6ADDRLOOPBACK"
1155			 LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK="#undef LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK"],
1156			[AC_MSG_RESULT(no)
1157			 ISC_PLATFORM_NEEDIN6ADDRLOOPBACK="#define ISC_PLATFORM_NEEDIN6ADDRLOOPBACK 1"
1158			 LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK="#define LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK 1"])
1159
1160		AC_MSG_CHECKING(for sin6_scope_id in struct sockaddr_in6)
1161		AC_TRY_COMPILE([
1162#include <sys/types.h>
1163#include <sys/socket.h>
1164#include <netinet/in.h>
1165$isc_netinetin6_hack
1166$isc_netinet6in6_hack
1167],
1168		[struct sockaddr_in6 xyzzy; xyzzy.sin6_scope_id = 0; return (0);],
1169			[AC_MSG_RESULT(yes)
1170			 ISC_PLATFORM_HAVESCOPEID="#define ISC_PLATFORM_HAVESCOPEID 1"
1171			 result="#define LWRES_HAVE_SIN6_SCOPE_ID 1"],
1172			[AC_MSG_RESULT(no)
1173			 ISC_PLATFORM_HAVESCOPEID="#undef ISC_PLATFORM_HAVESCOPEID"
1174			 result="#undef LWRES_HAVE_SIN6_SCOPE_ID"])
1175		LWRES_HAVE_SIN6_SCOPE_ID="$result"
1176
1177		AC_MSG_CHECKING(for in6_pktinfo)
1178		AC_TRY_COMPILE([
1179#include <sys/types.h>
1180#include <sys/socket.h>
1181#include <netinet/in.h>
1182$isc_netinetin6_hack
1183$isc_netinet6in6_hack
1184],
1185		[struct in6_pktinfo xyzzy; return (0);],
1186			[AC_MSG_RESULT(yes)
1187			 ISC_PLATFORM_HAVEIN6PKTINFO="#define ISC_PLATFORM_HAVEIN6PKTINFO 1"],
1188			[AC_MSG_RESULT(no -- disabling runtime ipv6 support)
1189			 ISC_PLATFORM_HAVEIN6PKTINFO="#undef ISC_PLATFORM_HAVEIN6PKTINFO"])
1190		;;
1191	no)
1192		ISC_PLATFORM_HAVEIPV6="#undef ISC_PLATFORM_HAVEIPV6"
1193		LWRES_PLATFORM_HAVEIPV6="#undef LWRES_PLATFORM_HAVEIPV6"
1194		ISC_PLATFORM_NEEDIN6ADDRANY="#undef ISC_PLATFORM_NEEDIN6ADDRANY"
1195		LWRES_PLATFORM_NEEDIN6ADDRANY="#undef LWRES_PLATFORM_NEEDIN6ADDRANY"
1196		ISC_PLATFORM_HAVEIN6PKTINFO="#undef ISC_PLATFORM_HAVEIN6PKTINFO"
1197		LWRES_HAVE_SIN6_SCOPE_ID="#define LWRES_HAVE_SIN6_SCOPE_ID 1"
1198		ISC_PLATFORM_HAVESCOPEID="#define ISC_PLATFORM_HAVESCOPEID 1"
1199		ISC_IPV6_H="ipv6.h"
1200		ISC_IPV6_O="ipv6.$O"
1201		ISC_ISCIPV6_O="unix/ipv6.$O"
1202		ISC_IPV6_C="ipv6.c"
1203		;;
1204esac
1205
1206AC_SUBST(ISC_PLATFORM_HAVEIPV6)
1207AC_SUBST(LWRES_PLATFORM_HAVEIPV6)
1208AC_SUBST(ISC_PLATFORM_NEEDNETINETIN6H)
1209AC_SUBST(LWRES_PLATFORM_NEEDNETINETIN6H)
1210AC_SUBST(ISC_PLATFORM_NEEDNETINET6IN6H)
1211AC_SUBST(LWRES_PLATFORM_NEEDNETINET6IN6H)
1212AC_SUBST(ISC_PLATFORM_HAVEINADDR6)
1213AC_SUBST(LWRES_PLATFORM_HAVEINADDR6)
1214AC_SUBST(ISC_PLATFORM_NEEDIN6ADDRANY)
1215AC_SUBST(LWRES_PLATFORM_NEEDIN6ADDRANY)
1216AC_SUBST(ISC_PLATFORM_NEEDIN6ADDRLOOPBACK)
1217AC_SUBST(LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK)
1218AC_SUBST(ISC_PLATFORM_HAVEIN6PKTINFO)
1219AC_SUBST(ISC_PLATFORM_FIXIN6ISADDR)
1220AC_SUBST(ISC_IPV6_H)
1221AC_SUBST(ISC_IPV6_O)
1222AC_SUBST(ISC_ISCIPV6_O)
1223AC_SUBST(ISC_IPV6_C)
1224AC_SUBST(LWRES_HAVE_SIN6_SCOPE_ID)
1225AC_SUBST(ISC_PLATFORM_HAVESCOPEID)
1226
1227AC_MSG_CHECKING([for struct if_laddrreq])
1228AC_TRY_LINK([
1229#include <sys/types.h>
1230#include <net/if6.h>
1231],[ struct if_laddrreq a; ],
1232	[AC_MSG_RESULT(yes)
1233	ISC_PLATFORM_HAVEIF_LADDRREQ="#define ISC_PLATFORM_HAVEIF_LADDRREQ 1"],
1234	[AC_MSG_RESULT(no)
1235	ISC_PLATFORM_HAVEIF_LADDRREQ="#undef ISC_PLATFORM_HAVEIF_LADDRREQ"])
1236AC_SUBST(ISC_PLATFORM_HAVEIF_LADDRREQ)
1237
1238AC_MSG_CHECKING([for struct if_laddrconf])
1239AC_TRY_LINK([
1240#include <sys/types.h>
1241#include <net/if6.h>
1242],[ struct if_laddrconf a; ],
1243	[AC_MSG_RESULT(yes)
1244	ISC_PLATFORM_HAVEIF_LADDRCONF="#define ISC_PLATFORM_HAVEIF_LADDRCONF 1"],
1245	[AC_MSG_RESULT(no)
1246	ISC_PLATFORM_HAVEIF_LADDRCONF="#undef ISC_PLATFORM_HAVEIF_LADDRCONF"])
1247AC_SUBST(ISC_PLATFORM_HAVEIF_LADDRCONF)
1248
1249#
1250# Check for network functions that are often missing.  We do this
1251# after the libtool checking, so we can put the right suffix on
1252# the files.  It also needs to come after checking for a Kame add-on,
1253# which provides some (all?) of the desired functions.
1254#
1255
1256AC_MSG_CHECKING([for inet_ntop with IPv6 support])
1257AC_TRY_RUN([
1258#include <sys/types.h>
1259#include <sys/socket.h>
1260#include <netinet/in.h>
1261#include <arpa/inet.h>
1262main() {
1263char a[16],b[64]; return(inet_ntop(AF_INET6, a, b, sizeof(b)) == (char*)0);}],
1264        [AC_MSG_RESULT(yes)
1265        ISC_PLATFORM_NEEDNTOP="#undef ISC_PLATFORM_NEEDNTOP"],
1266
1267        [AC_MSG_RESULT(no)
1268        ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS inet_ntop.$O"
1269        ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS inet_ntop.c"
1270        ISC_PLATFORM_NEEDNTOP="#define ISC_PLATFORM_NEEDNTOP 1"],
1271        [AC_MSG_RESULT(assuming inet_ntop needed)
1272        ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS inet_ntop.$O"
1273        ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS inet_ntop.c"
1274        ISC_PLATFORM_NEEDNTOP="#define ISC_PLATFORM_NEEDNTOP 1"])
1275
1276
1277# On NetBSD 1.4.2 and maybe others, inet_pton() incorrectly accepts
1278# addresses with less than four octets, like "1.2.3".  Also leading
1279# zeros should also be rejected.
1280
1281AC_MSG_CHECKING([for working inet_pton with IPv6 support])
1282AC_TRY_RUN([
1283#include <sys/types.h>
1284#include <sys/socket.h>
1285#include <netinet/in.h>
1286#include <arpa/inet.h>
1287main() { char a[16]; return (inet_pton(AF_INET, "1.2.3", a) == 1 ? 1 :
1288			     inet_pton(AF_INET, "1.2.3.04", a) == 1 ? 1 : 
1289			     (inet_pton(AF_INET6, "::1.2.3.4", a) != 1)); }],
1290        [AC_MSG_RESULT(yes)
1291        ISC_PLATFORM_NEEDPTON="#undef ISC_PLATFORM_NEEDPTON"],
1292        [AC_MSG_RESULT(no)
1293        ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS inet_pton.$O"
1294        ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS inet_pton.c"
1295        ISC_PLATFORM_NEEDPTON="#define ISC_PLATFORM_NEEDPTON 1"],
1296	[AC_MSG_RESULT(assuming target platform has working inet_pton)
1297	ISC_PLATFORM_NEEDPTON="#undef ISC_PLATFORM_NEEDPTON"],
1298        [AC_MSG_RESULT(assuming inet_pton needed)
1299        ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS inet_pton.$O"
1300        ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS inet_pton.c"
1301        ISC_PLATFORM_NEEDPTON="#define ISC_PLATFORM_NEEDPTON 1"],
1302        [AC_MSG_RESULT(assuming target platform has working inet_pton)
1303        ISC_PLATFORM_NEEDPTON="#undef ISC_PLATFORM_NEEDPTON"])
1304
1305AC_MSG_CHECKING([for inet_aton])
1306AC_TRY_LINK([
1307#include <sys/types.h>
1308#include <netinet/in.h>
1309#include <arpa/inet.h>],
1310        [struct in_addr in; inet_aton(0, &in); return (0);],
1311        [AC_MSG_RESULT(yes)
1312        ISC_PLATFORM_NEEDATON="#undef ISC_PLATFORM_NEEDATON"],
1313
1314        [AC_MSG_RESULT(no)
1315        ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS inet_aton.$O"
1316        ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS inet_aton.c"
1317        ISC_PLATFORM_NEEDATON="#define ISC_PLATFORM_NEEDATON 1"])
1318
1319AC_SUBST(ISC_PLATFORM_NEEDNTOP)
1320AC_SUBST(ISC_PLATFORM_NEEDPTON)
1321AC_SUBST(ISC_PLATFORM_NEEDATON)
1322
1323#
1324# Look for a 4.4BSD-style sa_len member in struct sockaddr.
1325#
1326case "$host" in
1327	*-dec-osf*)
1328		# Turn on 4.4BSD style sa_len support.
1329		AC_DEFINE(_SOCKADDR_LEN)
1330		;;
1331esac
1332
1333AC_MSG_CHECKING(for sa_len in struct sockaddr)
1334AC_TRY_COMPILE([
1335#include <sys/types.h>
1336#include <sys/socket.h>],
1337[struct sockaddr sa; sa.sa_len = 0; return (0);],
1338	[AC_MSG_RESULT(yes)
1339	ISC_PLATFORM_HAVESALEN="#define ISC_PLATFORM_HAVESALEN 1"
1340	LWRES_PLATFORM_HAVESALEN="#define LWRES_PLATFORM_HAVESALEN 1"],
1341	[AC_MSG_RESULT(no)
1342	ISC_PLATFORM_HAVESALEN="#undef ISC_PLATFORM_HAVESALEN"
1343	LWRES_PLATFORM_HAVESALEN="#undef LWRES_PLATFORM_HAVESALEN"])
1344AC_SUBST(ISC_PLATFORM_HAVESALEN)
1345AC_SUBST(LWRES_PLATFORM_HAVESALEN)
1346
1347#
1348# Look for a 4.4BSD or 4.3BSD struct msghdr
1349#
1350AC_MSG_CHECKING(for struct msghdr flavor)
1351AC_TRY_COMPILE([
1352#include <sys/types.h>
1353#include <sys/socket.h>],
1354[struct msghdr msg; msg.msg_flags = 0; return (0);],
1355	[AC_MSG_RESULT(4.4BSD)
1356	ISC_PLATFORM_MSGHDRFLAVOR="#define ISC_NET_BSD44MSGHDR 1"],
1357	[AC_MSG_RESULT(4.3BSD)
1358	ISC_PLATFORM_MSGHDRFLAVOR="#define ISC_NET_BSD43MSGHDR 1"])
1359AC_SUBST(ISC_PLATFORM_MSGHDRFLAVOR)
1360
1361#
1362# Look for in_port_t.
1363#
1364AC_MSG_CHECKING(for type in_port_t)
1365AC_TRY_COMPILE([
1366#include <sys/types.h>
1367#include <netinet/in.h>],
1368[in_port_t port = 25; return (0);],
1369	[AC_MSG_RESULT(yes)
1370	ISC_PLATFORM_NEEDPORTT="#undef ISC_PLATFORM_NEEDPORTT"],
1371        [AC_MSG_RESULT(no)
1372	ISC_PLATFORM_NEEDPORTT="#define ISC_PLATFORM_NEEDPORTT 1"])
1373AC_SUBST(ISC_PLATFORM_NEEDPORTT)
1374
1375#
1376# Check for addrinfo
1377#
1378AC_MSG_CHECKING(for struct addrinfo)
1379AC_TRY_COMPILE([
1380#include <netdb.h>],
1381[struct addrinfo a; return (0);],
1382	[AC_MSG_RESULT(yes)
1383	ISC_LWRES_NEEDADDRINFO="#undef ISC_LWRES_NEEDADDRINFO"
1384	AC_DEFINE(HAVE_ADDRINFO)],
1385	[AC_MSG_RESULT(no)
1386	ISC_LWRES_NEEDADDRINFO="#define ISC_LWRES_NEEDADDRINFO 1"])
1387AC_SUBST(ISC_LWRES_NEEDADDRINFO)
1388
1389#
1390# Check for rrsetinfo
1391#
1392AC_MSG_CHECKING(for struct rrsetinfo)
1393AC_TRY_COMPILE([
1394#include <netdb.h>],
1395[struct rrsetinfo r; return (0);],
1396	[AC_MSG_RESULT(yes)
1397	ISC_LWRES_NEEDRRSETINFO="#undef ISC_LWRES_NEEDRRSETINFO"],
1398	[AC_MSG_RESULT(no)
1399	ISC_LWRES_NEEDRRSETINFO="#define ISC_LWRES_NEEDRRSETINFO 1"])
1400AC_SUBST(ISC_LWRES_NEEDRRSETINFO)
1401
1402AC_MSG_CHECKING(for int sethostent)
1403AC_TRY_COMPILE([
1404#include <netdb.h>],
1405[int i = sethostent(0); return(0);],
1406	[AC_MSG_RESULT(yes)
1407	ISC_LWRES_SETHOSTENTINT="#define ISC_LWRES_SETHOSTENTINT 1"],
1408	[AC_MSG_RESULT(no)
1409	ISC_LWRES_SETHOSTENTINT="#undef ISC_LWRES_SETHOSTENTINT"])
1410AC_SUBST(ISC_LWRES_SETHOSTENTINT)
1411
1412AC_MSG_CHECKING(for int endhostent)
1413AC_TRY_COMPILE([
1414#include <netdb.h>],
1415[int i = endhostent(); return(0);],
1416	[AC_MSG_RESULT(yes)
1417	ISC_LWRES_ENDHOSTENTINT="#define ISC_LWRES_ENDHOSTENTINT 1"],
1418	[AC_MSG_RESULT(no)
1419	ISC_LWRES_ENDHOSTENTINT="#undef ISC_LWRES_ENDHOSTENTINT"])
1420AC_SUBST(ISC_LWRES_ENDHOSTENTINT)
1421
1422AC_MSG_CHECKING(for getnetbyaddr(in_addr_t, ...))
1423AC_TRY_COMPILE([
1424#include <netdb.h>
1425struct netent *getnetbyaddr(in_addr_t, int);],
1426[],
1427	[AC_MSG_RESULT(yes)
1428	ISC_LWRES_GETNETBYADDRINADDR="#define ISC_LWRES_GETNETBYADDRINADDR 1"],
1429	[AC_MSG_RESULT(no)
1430	ISC_LWRES_GETNETBYADDRINADDR="#undef ISC_LWRES_GETNETBYADDRINADDR"])
1431AC_SUBST(ISC_LWRES_GETNETBYADDRINADDR)
1432
1433AC_MSG_CHECKING(for int setnetent)
1434AC_TRY_COMPILE([
1435#include <netdb.h>],
1436[int i = setnetent(0); return(0);],
1437	[AC_MSG_RESULT(yes)
1438	ISC_LWRES_SETNETENTINT="#define ISC_LWRES_SETNETENTINT 1"],
1439	[AC_MSG_RESULT(no)
1440	ISC_LWRES_SETNETENTINT="#undef ISC_LWRES_SETNETENTINT"])
1441AC_SUBST(ISC_LWRES_SETNETENTINT)
1442
1443AC_MSG_CHECKING(for int endnetent)
1444AC_TRY_COMPILE([
1445#include <netdb.h>],
1446[int i = endnetent(); return(0);],
1447	[AC_MSG_RESULT(yes)
1448	ISC_LWRES_ENDNETENTINT="#define ISC_LWRES_ENDNETENTINT 1"],
1449	[AC_MSG_RESULT(no)
1450	ISC_LWRES_ENDNETENTINT="#undef ISC_LWRES_ENDNETENTINT"])
1451AC_SUBST(ISC_LWRES_ENDNETENTINT)
1452
1453AC_MSG_CHECKING(for gethostbyaddr(const void *, size_t, ...))
1454AC_TRY_COMPILE([
1455#include <netdb.h>
1456struct hostent *gethostbyaddr(const void *, size_t, int);],
1457[return(0);],
1458	[AC_MSG_RESULT(yes)
1459	ISC_LWRES_GETHOSTBYADDRVOID="#define ISC_LWRES_GETHOSTBYADDRVOID 1"],
1460	[AC_MSG_RESULT(no)
1461	ISC_LWRES_GETHOSTBYADDRVOID="#undef ISC_LWRES_GETHOSTBYADDRVOID"])
1462AC_SUBST(ISC_LWRES_GETHOSTBYADDRVOID)
1463
1464AC_MSG_CHECKING(for h_errno in netdb.h)
1465AC_TRY_COMPILE([
1466#include <netdb.h>],
1467[h_errno = 1; return(0);],
1468	[AC_MSG_RESULT(yes)
1469	ISC_LWRES_NEEDHERRNO="#undef ISC_LWRES_NEEDHERRNO"],
1470	[AC_MSG_RESULT(no)
1471	ISC_LWRES_NEEDHERRNO="#define ISC_LWRES_NEEDHERRNO 1"])
1472AC_SUBST(ISC_LWRES_NEEDHERRNO)
1473
1474AC_CHECK_FUNC(getipnodebyname,
1475        [ISC_LWRES_GETIPNODEPROTO="#undef ISC_LWRES_GETIPNODEPROTO"],
1476        [ISC_LWRES_GETIPNODEPROTO="#define ISC_LWRES_GETIPNODEPROTO 1"])
1477AC_CHECK_FUNC(getnameinfo,
1478        [ISC_LWRES_GETNAMEINFOPROTO="#undef ISC_LWRES_GETNAMEINFOPROTO"],
1479        [ISC_LWRES_GETNAMEINFOPROTO="#define ISC_LWRES_GETNAMEINFOPROTO 1"])
1480AC_CHECK_FUNC(getaddrinfo,
1481        [ISC_LWRES_GETADDRINFOPROTO="#undef ISC_LWRES_GETADDRINFOPROTO"
1482	AC_DEFINE(HAVE_GETADDRINFO)],
1483        [ISC_LWRES_GETADDRINFOPROTO="#define ISC_LWRES_GETADDRINFOPROTO 1"])
1484AC_CHECK_FUNC(gai_strerror, AC_DEFINE(HAVE_GAISTRERROR))
1485AC_SUBST(ISC_LWRES_GETIPNODEPROTO)
1486AC_SUBST(ISC_LWRES_GETADDRINFOPROTO)
1487AC_SUBST(ISC_LWRES_GETNAMEINFOPROTO)
1488
1489AC_ARG_ENABLE(getifaddrs,
1490[  --enable-getifaddrs    Enable the use of getifaddrs() [[yes|no|glibc]].
1491             glibc: Use getifaddrs() in glibc if you know it supports IPv6.],
1492    want_getifaddrs="$enableval",  want_getifaddrs="yes")
1493
1494case $want_getifaddrs in
1495yes|glibc)
1496#
1497# Do we have getifaddrs() ?
1498#
1499case $host in
1500*-linux*)
1501	# Some recent versions of glibc support getifaddrs() which does not
1502	# provide AF_INET6 addresses while the function provided by the USAGI
1503	# project handles the AF_INET6 case correctly.  We need to avoid
1504	# using the former but prefer the latter unless overridden by
1505	# --enable-getifaddrs=glibc.
1506	if test $want_getifaddrs = glibc
1507	then
1508		AC_CHECK_FUNC(getifaddrs, AC_DEFINE(HAVE_GETIFADDRS))
1509	else
1510		save_LIBS="$LIBS"
1511		LIBS="-L/usr/local/v6/lib $LIBS"
1512		AC_CHECK_LIB(inet6, getifaddrs,
1513			LIBS="$LIBS -linet6"
1514			AC_DEFINE(HAVE_GETIFADDRS),
1515			LIBS=${save_LIBS})
1516	fi
1517	;;
1518*)
1519	AC_CHECK_FUNC(getifaddrs, AC_DEFINE(HAVE_GETIFADDRS))
1520	;;
1521esac
1522;;
1523no)
1524;;
1525esac
1526
1527#
1528# Look for a sysctl call to get the list of network interfaces.
1529#
1530case $ac_cv_header_sys_sysctl_h in
1531yes)
1532AC_MSG_CHECKING(for interface list sysctl)
1533AC_EGREP_CPP(found_rt_iflist, [
1534#include <sys/param.h>
1535#include <sys/sysctl.h>
1536#include <sys/socket.h>
1537#ifdef NET_RT_IFLIST
1538found_rt_iflist
1539#endif
1540],
1541	[AC_MSG_RESULT(yes)
1542	 AC_DEFINE(HAVE_IFLIST_SYSCTL)],
1543	[AC_MSG_RESULT(no)])
1544;;
1545esac
1546
1547#
1548# Check for some other useful functions that are not ever-present.
1549#
1550
1551# We test for strsep() using AC_TRY_LINK instead of AC_CHECK_FUNC
1552# because AIX 4.3.3 with patches for bos.adt.include to version 4.3.3.77
1553# reportedly defines strsep() without declaring it in <string.h> when
1554# -D_LINUX_SOURCE_COMPAT is not defined [RT #2190], and
1555# AC_CHECK_FUNC() incorrectly succeeds because it declares
1556# the function itself.
1557AC_MSG_CHECKING(for correctly declared strsep())
1558AC_TRY_LINK([#include <string.h>], [char *sp; char *foo = strsep(&sp, ".");],
1559	[AC_MSG_RESULT(yes); ISC_PLATFORM_NEEDSTRSEP="#undef ISC_PLATFORM_NEEDSTRSEP"],
1560	[AC_MSG_RESULT(no); ISC_PLATFORM_NEEDSTRSEP="#define ISC_PLATFORM_NEEDSTRSEP 1"])
1561AC_SUBST(ISC_PLATFORM_NEEDSTRSEP)
1562
1563AC_CHECK_FUNC(memmove,
1564	[ISC_PLATFORM_NEEDMEMMOVE="#undef ISC_PLATFORM_NEEDMEMMOVE"],
1565	[ISC_PLATFORM_NEEDMEMMOVE="#define ISC_PLATFORM_NEEDMEMMOVE 1"])
1566AC_SUBST(ISC_PLATFORM_NEEDMEMMOVE)
1567
1568AC_CHECK_FUNC(strtoul,
1569	[ISC_PLATFORM_NEEDSTRTOUL="#undef ISC_PLATFORM_NEEDSTRTOUL"
1570	 LWRES_PLATFORM_NEEDSTRTOUL="#undef ISC_PLATFORM_NEEDSTRTOUL"
1571	 GENRANDOMLIB=""],
1572	[ISC_PLATFORM_NEEDSTRTOUL="#define ISC_PLATFORM_NEEDSTRTOUL 1"
1573	 LWRES_PLATFORM_NEEDSTRTOUL="#define ISC_PLATFORM_NEEDSTRTOUL 1"
1574	 "GENRANDOMLIB=${ISCLIBS}"])
1575AC_SUBST(ISC_PLATFORM_NEEDSTRTOUL)
1576AC_SUBST(LWRES_PLATFORM_NEEDSTRTOUL)
1577AC_SUBST(GENRANDOMLIB)
1578
1579AC_CHECK_FUNC(strlcpy,
1580	[ISC_PLATFORM_NEEDSTRLCPY="#undef ISC_PLATFORM_NEEDSTRLCPY"],
1581	[ISC_PLATFORM_NEEDSTRLCPY="#define ISC_PLATFORM_NEEDSTRLCPY 1"])
1582AC_SUBST(ISC_PLATFORM_NEEDSTRLCPY)
1583
1584AC_CHECK_FUNC(strlcat,
1585	[ISC_PLATFORM_NEEDSTRLCAT="#undef ISC_PLATFORM_NEEDSTRLCAT"],
1586	[ISC_PLATFORM_NEEDSTRLCAT="#define ISC_PLATFORM_NEEDSTRLCAT 1"])
1587AC_SUBST(ISC_PLATFORM_NEEDSTRLCAT)
1588
1589ISC_PRINT_OBJS=
1590ISC_PRINT_SRCS=
1591AC_MSG_CHECKING(sprintf)
1592AC_TRY_COMPILE([
1593#include <stdio.h>
1594],
1595[ char buf[2]; return(*sprintf(buf,"x"));],
1596[
1597ISC_PRINT_OBJS="print.$O"
1598ISC_PRINT_SRCS="print.c"
1599ISC_PLATFORM_NEEDSPRINTF="#define ISC_PLATFORM_NEEDSPRINTF"
1600LWRES_PLATFORM_NEEDSPRINTF="#define LWRES_PLATFORM_NEEDSPRINTF"
1601],
1602[ISC_PLATFORM_NEEDSPRINTF="#undef ISC_PLATFORM_NEEDSPRINTF"
1603 LWRES_PLATFORM_NEEDSPRINTF="#undef LWRES_PLATFORM_NEEDSPRINTF"]
1604)
1605AC_SUBST(ISC_PLATFORM_NEEDSPRINTF)
1606AC_SUBST(LWRES_PLATFORM_NEEDSPRINTF)
1607
1608AC_CHECK_FUNC(vsnprintf,
1609	[ISC_PLATFORM_NEEDVSNPRINTF="#undef ISC_PLATFORM_NEEDVSNPRINTF"
1610	 LWRES_PLATFORM_NEEDVSNPRINTF="#undef LWRES_PLATFORM_NEEDVSNPRINTF"],
1611	[ISC_PRINT_OBJS="print.$O"
1612	 ISC_PRINT_SRCS="print.c"
1613	 ISC_PLATFORM_NEEDVSNPRINTF="#define ISC_PLATFORM_NEEDVSNPRINTF 1"
1614	 LWRES_PLATFORM_NEEDVSNPRINTF="#define LWRES_PLATFORM_NEEDVSNPRINTF 1"])
1615AC_SUBST(ISC_PLATFORM_NEEDVSNPRINTF)
1616AC_SUBST(LWRES_PLATFORM_NEEDVSNPRINTF)
1617ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS $ISC_PRINT_OBJS"
1618ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS $ISC_PRINT_SRCS"
1619
1620AC_CHECK_FUNC(strerror, AC_DEFINE(HAVE_STRERROR))
1621
1622AC_SUBST(ISC_EXTRA_OBJS)
1623AC_SUBST(ISC_EXTRA_SRCS)
1624
1625# Determine the printf format characters to use when printing
1626# values of type isc_int64_t. This will normally be "ll", but where
1627# the compiler treats "long long" as a alias for "long" and printf
1628# doesn't know about "long long" use "l".  Hopefully the sprintf
1629# will produce a inconsistant result in the later case.  If the compiler
1630# fails due to seeing "%lld" we fall back to "l".
1631#
1632# Digital Unix 4.0 (gcc?) (long long) is 64 bits as is its long. It uses
1633# %ld even for (long long)/
1634#
1635# Win32 uses "%I64d", but that's defined elsewhere since we don't use
1636# configure on Win32.
1637#
1638AC_MSG_CHECKING(printf format modifier for 64-bit integers)
1639AC_TRY_RUN([
1640#include <stdio.h>
1641main() {
1642	long long int j = 0;
1643	char buf[100];
1644	buf[0] = 0;
1645	sprintf(buf, "%lld", j);
1646	exit((sizeof(long long int) != sizeof(long int))? 0 :
1647	     (strcmp(buf, "0") != 0));
1648} 
1649],
1650	[AC_MSG_RESULT(ll)
1651	ISC_PLATFORM_QUADFORMAT='#define ISC_PLATFORM_QUADFORMAT "ll"'
1652	LWRES_PLATFORM_QUADFORMAT='#define LWRES_PLATFORM_QUADFORMAT "ll"'],
1653	[AC_MSG_RESULT(l)
1654	ISC_PLATFORM_QUADFORMAT='#define ISC_PLATFORM_QUADFORMAT "l"'
1655	LWRES_PLATFORM_QUADFORMAT='#define LWRES_PLATFORM_QUADFORMAT "l"'],
1656	[AC_MSG_RESULT(assuming target platform uses ll)
1657	ISC_PLATFORM_QUADFORMAT='#define ISC_PLATFORM_QUADFORMAT "ll"'
1658	LWRES_PLATFORM_QUADFORMAT='#define LWRES_PLATFORM_QUADFORMAT "ll"'])
1659AC_SUBST(ISC_PLATFORM_QUADFORMAT)
1660AC_SUBST(LWRES_PLATFORM_QUADFORMAT)
1661
1662#
1663# Security Stuff
1664#
1665AC_CHECK_FUNC(chroot, AC_DEFINE(HAVE_CHROOT))
1666AC_ARG_ENABLE(linux-caps,
1667	[  --disable-linux-caps	disable linux capabilities])
1668case "$enable_linux_caps" in
1669	yes|'')
1670		AC_CHECK_HEADERS(linux/capability.h)
1671		;;
1672	no)
1673		;;
1674esac
1675AC_CHECK_HEADERS(sys/prctl.h)
1676
1677#
1678# Time Zone Stuff
1679#
1680AC_CHECK_FUNC(tzset, AC_DEFINE(HAVE_TZSET))
1681
1682AC_MSG_CHECKING(for optarg decarartion)
1683AC_TRY_COMPILE([
1684#include <unistd.h>
1685],
1686[optarg = 0;],
1687[AC_MSG_RESULT(yes)],
1688[AC_MSG_RESULT(no)
1689AC_DEFINE(NEED_OPTARG, 1, [Defined if extern char *optarg is not declared.])])
1690
1691#
1692# BSD/OS, and perhaps some others, don't define rlim_t.
1693#
1694AC_MSG_CHECKING(for type rlim_t)
1695AC_TRY_COMPILE([
1696#include <sys/types.h>
1697#include <sys/time.h>
1698#include <sys/resource.h>],
1699[rlim_t rl = 19671212; return (0);],
1700[AC_MSG_RESULT(yes)
1701 ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE rlim_t"],
1702[AC_MSG_RESULT(no)
1703
1704AC_MSG_CHECKING(type of rlim_cur)
1705AC_TRY_RUN([
1706#include <sys/types.h>
1707#include <sys/time.h>
1708#include <sys/resource.h>
1709main() { struct rlimit r; exit(!(sizeof(r.rlim_cur) == sizeof(int)));}],
1710[AC_MSG_RESULT(int)
1711ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE int"],
1712[
1713AC_TRY_RUN([
1714#include <sys/types.h>
1715#include <sys/time.h>
1716#include <sys/resource.h>
1717main() { struct rlimit r; exit(!(sizeof(r.rlim_cur) == sizeof(long int)));}],
1718[AC_MSG_RESULT(long int)
1719ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE long int"],
1720[
1721AC_TRY_RUN([
1722#include <sys/types.h>
1723#include <sys/time.h>
1724#include <sys/resource.h>
1725main() { struct rlimit r; exit((!sizeof(r.rlim_cur) == sizeof(long long int)));}],
1726[AC_MSG_RESULT(long long int)
1727ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE long long int"],
1728[AC_MSG_ERROR([unable to determine sizeof rlim_cur])
1729],[AC_MSG_ERROR(this cannot happen)])
1730],[AC_MSG_ERROR(this cannot happen)])
1731],[
1732ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE long long int"
1733AC_MSG_RESULT(cannot determine type of rlim_cur when cross compiling - assuming long long int)])
1734])
1735AC_SUBST(ISC_PLATFORM_RLIMITTYPE)
1736
1737#
1738# Compaq TruCluster requires more code for handling cluster IP aliases
1739#
1740case "$host" in
1741	*-dec-osf*)
1742		AC_CHECK_LIB(clua, clua_getaliasaddress, LIBS="-lclua $LIBS")
1743		AC_CHECK_FUNC(clua_getaliasaddress,
1744				AC_DEFINE(HAVE_TRUCLUSTER, 1,
1745					[Define if running under Compaq TruCluster]))
1746		;;
1747	*)
1748		;;
1749esac
1750
1751#
1752# Microsoft has their own way of handling shared libraries that requires
1753# additional qualifiers on extern variables.  Unix systems don't need it.
1754#
1755AC_SUBST(ISC_PLATFORM_USEDECLSPEC)
1756ISC_PLATFORM_USEDECLSPEC="#undef ISC_PLATFORM_USEDECLSPEC"
1757AC_SUBST(LWRES_PLATFORM_USEDECLSPEC)
1758LWRES_PLATFORM_USEDECLSPEC="#undef LWRES_PLATFORM_USEDECLSPEC"
1759
1760#
1761# Random remaining OS-specific issues involving compiler warnings.
1762# XXXDCL print messages to indicate some compensation is being done?
1763#
1764AC_SUBST(ISC_PLATFORM_BRACEPTHREADONCEINIT)
1765ISC_PLATFORM_BRACEPTHREADONCEINIT="#undef ISC_PLATFORM_BRACEPTHREADONCEINIT"
1766
1767case "$host" in
1768	*-aix5.1.*)
1769		hack_shutup_pthreadonceinit=yes
1770		;;
1771	*-bsdi3.1*)
1772		hack_shutup_sputaux=yes
1773		;;
1774	*-bsdi4.0*)
1775		hack_shutup_sigwait=yes
1776		hack_shutup_sputaux=yes
1777		;;
1778	[*-bsdi4.[12]*])
1779		hack_shutup_stdargcast=yes
1780		;;
1781	[*-solaris2.[89]])
1782		hack_shutup_pthreadonceinit=yes
1783		;;
1784esac
1785
1786case "$hack_shutup_pthreadonceinit" in
1787	yes)
1788		#
1789		# Shut up PTHREAD_ONCE_INIT unbraced initializer warnings.
1790		#
1791		ISC_PLATFORM_BRACEPTHREADONCEINIT="#define ISC_PLATFORM_BRACEPTHREADONCEINIT 1"
1792		;;
1793esac
1794
1795case "$hack_shutup_sigwait" in
1796	yes)
1797		#
1798		# Shut up a -Wmissing-prototypes warning for sigwait().
1799		#
1800		AC_DEFINE(SHUTUP_SIGWAIT)
1801		;;
1802esac
1803
1804case "$hack_shutup_sputaux" in
1805	yes)
1806		#
1807		# Shut up a -Wmissing-prototypes warning from <stdio.h>.
1808		#
1809		AC_DEFINE(SHUTUP_SPUTAUX)
1810		;;
1811esac
1812
1813case "$hack_shutup_stdargcast" in
1814	yes)
1815		#
1816		# Shut up a -Wcast-qual warning from va_start().
1817		#
1818		AC_DEFINE(SHUTUP_STDARG_CAST)
1819		;;
1820esac
1821
1822#
1823# Check for if_nametoindex() for IPv6 scoped addresses support
1824#
1825AC_CHECK_FUNC(if_nametoindex, ac_cv_have_if_nametoindex=yes,
1826		ac_cv_have_if_nametoindex=no)
1827case $ac_cv_have_if_nametoindex in
1828no)
1829	case "$host" in
1830  	*-hp-hpux*)
1831  		AC_CHECK_LIB(ipv6, if_nametoindex,
1832				ac_cv_have_if_nametoindex=yes
1833				LIBS="-lipv6 $LIBS",)
1834  	;;
1835	esac
1836esac
1837case $ac_cv_have_if_nametoindex in
1838yes)
1839	ISC_PLATFORM_HAVEIFNAMETOINDEX="#define ISC_PLATFORM_HAVEIFNAMETOINDEX 1"
1840	;;
1841*)
1842	ISC_PLATFORM_HAVEIFNAMETOINDEX="#undef ISC_PLATFORM_HAVEIFNAMETOINDEX"
1843	;;
1844esac
1845AC_SUBST(ISC_PLATFORM_HAVEIFNAMETOINDEX)
1846
1847#
1848#  The following sets up how non-blocking i/o is established.
1849#  Sunos, cygwin and solaris 2.x (x<5) require special handling.
1850#
1851case "$host" in
1852*-sunos*) AC_DEFINE(PORT_NONBLOCK, O_NDELAY);;
1853*-cygwin*) AC_DEFINE(PORT_NONBLOCK, O_NDELAY);;
1854*-solaris2.[[01234]])
1855	AC_DEFINE(PORT_NONBLOCK, O_NONBLOCK)
1856	AC_DEFINE(USE_FIONBIO_IOCTL, 1,
1857		  [Defined if you need to use ioctl(FIONBIO) instead a fcntl call to make non-blocking.])
1858	;;
1859*) AC_DEFINE(PORT_NONBLOCK, O_NONBLOCK,
1860	     [Sets which flag to pass to open/fcntl to make non-blocking (O_NDELAY/O_NONBLOCK).])
1861	;;
1862esac
1863#
1864# The following sections deal with tools used for formatting
1865# the documentation.  They are all optional, unless you are
1866# a developer editing the documentation source.
1867#
1868
1869#
1870# Look for TeX.
1871#
1872
1873AC_PATH_PROGS(LATEX, latex, latex)
1874AC_SUBST(LATEX)
1875
1876AC_PATH_PROGS(PDFLATEX, pdflatex, pdflatex)
1877AC_SUBST(PDFLATEX)
1878
1879#
1880# Look for xsltproc (libxslt)
1881#
1882
1883AC_PATH_PROG(XSLTPROC, xsltproc, xsltproc)
1884AC_SUBST(XSLTPROC)
1885
1886#
1887# Look for xmllint (libxml2)
1888#
1889
1890AC_PATH_PROG(XMLLINT, xmllint, xmllint)
1891AC_SUBST(XMLLINT)
1892
1893#
1894# Subroutine for searching for an ordinary file (e.g., a stylesheet)
1895# in a number of directories:
1896#
1897#   NOM_PATH_FILE(VARIABLE, FILENAME, DIRECTORIES)
1898#
1899# If the file FILENAME is found in one of the DIRECTORIES, the shell
1900# variable VARIABLE is defined to its absolute pathname.  Otherwise, 
1901# it is set to FILENAME, with no directory prefix (that's not terribly
1902# useful, but looks less confusing in substitutions than leaving it
1903# empty).  The variable VARIABLE will be substituted into output files.
1904# 
1905
1906AC_DEFUN(NOM_PATH_FILE, [
1907$1=""
1908AC_MSG_CHECKING(for $2)
1909for d in $3
1910do
1911	f=$d/$2
1912	if test -f $f
1913	then
1914		$1=$f
1915		AC_MSG_RESULT($f)
1916		break
1917	fi
1918done
1919if test "X[$]$1" = "X"
1920then
1921	AC_MSG_RESULT("not found");
1922	$1=$2
1923fi
1924AC_SUBST($1)
1925])
1926
1927#
1928# Look for Docbook-XSL stylesheets.  Location probably varies by
1929# system.  Guessing where it might be found, based on where SGML stuff
1930# lives on some systems.  FreeBSD is the only one I'm sure of at the
1931# moment.
1932#
1933
1934docbook_xsl_trees="/usr/pkg/share/xsl /usr/local/share/xsl /usr/share/xsl"
1935
1936#
1937# Look for stylesheets we need.
1938#
1939
1940NOM_PATH_FILE(XSLT_DOCBOOK_STYLE_HTML, docbook/html/docbook.xsl, $docbook_xsl_trees)
1941NOM_PATH_FILE(XSLT_DOCBOOK_STYLE_XHTML, docbook/xhtml/docbook.xsl, $docbook_xsl_trees)
1942NOM_PATH_FILE(XSLT_DOCBOOK_STYLE_MAN, docbook/manpages/docbook.xsl, $docbook_xsl_trees)
1943NOM_PATH_FILE(XSLT_DOCBOOK_CHUNK_HTML, docbook/html/chunk.xsl, $docbook_xsl_trees)
1944NOM_PATH_FILE(XSLT_DOCBOOK_CHUNK_XHTML, docbook/xhtml/chunk.xsl, $docbook_xsl_trees)
1945
1946#
1947# Same dance for db2latex
1948#
1949# No idea where this lives except on FreeBSD.
1950#
1951
1952db2latex_xsl_trees="/usr/local/share"
1953
1954#
1955# Look for stylesheets we need.
1956#
1957
1958NOM_PATH_FILE(XSLT_DB2LATEX_STYLE, db2latex/xsl/docbook.xsl, $db2latex_xsl_trees)
1959
1960#
1961# Look for "admonition" image directory.  Can't use NOM_PATH_FILE()
1962# because it's a directory, so just do the same things, inline.
1963#
1964
1965AC_MSG_CHECKING(for db2latex/xsl/figures)
1966for d in $db2latex_xsl_trees
1967do
1968	dd=$d/db2latex/xsl/figures
1969	if test -d $dd
1970	then
1971		XSLT_DB2LATEX_ADMONITIONS=$dd
1972		AC_MSG_RESULT($dd)
1973		break
1974	fi
1975done
1976if test "X$XSLT_DB2LATEX_ADMONITIONS" = "X"
1977then
1978	AC_MSG_RESULT(not found)
1979	XSLT_DB2LATEX_ADMONITIONS=db2latex/xsl/figures
1980fi
1981AC_SUBST(XSLT_DB2LATEX_ADMONITIONS)
1982
1983#
1984# Substitutions
1985#
1986AC_SUBST(BIND9_TOP_BUILDDIR)
1987BIND9_TOP_BUILDDIR=`pwd`
1988
1989AC_SUBST(BIND9_ISC_BUILDINCLUDE)
1990AC_SUBST(BIND9_ISCCC_BUILDINCLUDE)
1991AC_SUBST(BIND9_ISCCFG_BUILDINCLUDE)
1992AC_SUBST(BIND9_DNS_BUILDINCLUDE)
1993AC_SUBST(BIND9_LWRES_BUILDINCLUDE)
1994AC_SUBST(BIND9_BIND9_BUILDINCLUDE)
1995if test "X$srcdir" != "X"; then
1996	BIND9_ISC_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/isc/include"
1997	BIND9_ISCCC_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/isccc/include"
1998	BIND9_ISCCFG_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/isccfg/include"
1999	BIND9_DNS_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/dns/include"
2000	BIND9_LWRES_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/lwres/include"
2001	BIND9_BIND9_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/bind9/include"
2002else
2003	BIND9_ISC_BUILDINCLUDE=""
2004	BIND9_ISCCC_BUILDINCLUDE=""
2005	BIND9_ISCCFG_BUILDINCLUDE=""
2006	BIND9_DNS_BUILDINCLUDE=""
2007	BIND9_LWRES_BUILDINCLUDE=""
2008	BIND9_BIND9_BUILDINCLUDE=""
2009fi
2010
2011AC_SUBST_FILE(BIND9_MAKE_INCLUDES)
2012BIND9_MAKE_INCLUDES=$BIND9_TOP_BUILDDIR/make/includes
2013
2014AC_SUBST_FILE(BIND9_MAKE_RULES)
2015BIND9_MAKE_RULES=$BIND9_TOP_BUILDDIR/make/rules
2016
2017. $srcdir/version
2018BIND9_VERSION="VERSION=${MAJORVER}.${MINORVER}.${PATCHVER}${RELEASETYPE}${RELEASEVER}"
2019AC_SUBST(BIND9_VERSION)
2020
2021AC_SUBST_FILE(LIBISC_API)
2022LIBISC_API=$srcdir/lib/isc/api
2023
2024AC_SUBST_FILE(LIBISCCC_API)
2025LIBISCCC_API=$srcdir/lib/isccc/api
2026
2027AC_SUBST_FILE(LIBISCCFG_API)
2028LIBISCCFG_API=$srcdir/lib/isccfg/api
2029
2030AC_SUBST_FILE(LIBDNS_API)
2031LIBDNS_API=$srcdir/lib/dns/api
2032
2033AC_SUBST_FILE(LIBBIND9_API)
2034LIBBIND9_API=$srcdir/lib/bind9/api
2035
2036AC_SUBST_FILE(LIBLWRES_API)
2037LIBLWRES_API=$srcdir/lib/lwres/api
2038
2039AC_OUTPUT(
2040	make/rules
2041	make/includes
2042	Makefile
2043	make/Makefile
2044	make/mkdep
2045	lib/Makefile
2046	lib/isc/Makefile
2047	lib/isc/include/Makefile
2048	lib/isc/include/isc/Makefile
2049	lib/isc/include/isc/platform.h
2050	lib/isc/unix/Makefile
2051	lib/isc/unix/include/Makefile
2052	lib/isc/unix/include/isc/Makefile
2053	lib/isc/nls/Makefile
2054	lib/isc/$thread_dir/Makefile
2055	lib/isc/$thread_dir/include/Makefile
2056	lib/isc/$thread_dir/include/isc/Makefile
2057	lib/isccc/Makefile
2058	lib/isccc/include/Makefile
2059	lib/isccc/include/isccc/Makefile
2060	lib/isccfg/Makefile
2061	lib/isccfg/include/Makefile
2062	lib/isccfg/include/isccfg/Makefile
2063	lib/dns/Makefile
2064	lib/dns/include/Makefile
2065	lib/dns/include/dns/Makefile
2066	lib/dns/include/dst/Makefile
2067	lib/bind9/Makefile
2068	lib/bind9/include/Makefile
2069	lib/bind9/include/bind9/Makefile
2070	lib/lwres/Makefile
2071	lib/lwres/include/Makefile
2072	lib/lwres/include/lwres/Makefile
2073	lib/lwres/include/lwres/netdb.h
2074	lib/lwres/include/lwres/platform.h
2075	lib/lwres/man/Makefile
2076	lib/lwres/unix/Makefile
2077	lib/lwres/unix/include/Makefile
2078	lib/lwres/unix/include/lwres/Makefile
2079	lib/tests/Makefile
2080	lib/tests/include/Makefile
2081	lib/tests/include/tests/Makefile
2082	bin/Makefile
2083	bin/check/Makefile
2084	bin/named/Makefile
2085	bin/named/unix/Makefile
2086	bin/rndc/Makefile
2087	bin/rndc/unix/Makefile
2088	bin/dig/Makefile
2089	bin/nsupdate/Makefile
2090	bin/tests/Makefile
2091	bin/tests/names/Makefile
2092	bin/tests/master/Makefile
2093	bin/tests/rbt/Makefile
2094	bin/tests/db/Makefile
2095	bin/tests/tasks/Makefile
2096	bin/tests/timers/Makefile
2097	bin/tests/dst/Makefile
2098	bin/tests/mem/Makefile
2099	bin/tests/net/Makefile
2100	bin/tests/sockaddr/Makefile
2101	bin/tests/system/Makefile
2102	bin/tests/system/conf.sh
2103	bin/tests/system/lwresd/Makefile
2104	bin/tests/system/tkey/Makefile
2105	bin/tests/headerdep_test.sh
2106	bin/dnssec/Makefile
2107	doc/Makefile
2108	doc/arm/Makefile
2109	doc/misc/Makefile
2110	doc/xsl/Makefile
2111	isc-config.sh
2112	doc/xsl/isc-docbook-chunk.xsl
2113	doc/xsl/isc-docbook-html.xsl
2114	doc/xsl/isc-docbook-latex.xsl
2115	doc/xsl/isc-manpage.xsl
2116)
2117chmod a+x isc-config.sh
2118
2119# Tell Emacs to edit this file in shell mode.
2120# Local Variables:
2121# mode: sh
2122# End:
2123