configure.in revision 186462
1# Copyright (C) 2004-2008  Internet Systems Consortium, Inc. ("ISC")
2# Copyright (C) 1998-2003  Internet Software Consortium.
3#
4# Permission to use, copy, modify, and/or 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.355.18.85 $)
22
23AC_INIT(lib/dns/name.c)
24AC_PREREQ(2.59)
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
34AC_PROG_LN_S
35
36AC_SUBST(STD_CINCLUDES)
37AC_SUBST(STD_CDEFINES)
38AC_SUBST(STD_CWARNINGS)
39AC_SUBST(CCOPT)
40
41#
42# Make very sure that these are the first files processed by
43# config.status, since we use the processed output as the input for
44# AC_SUBST_FILE() subsitutions in other files.
45#
46AC_CONFIG_FILES([make/rules make/includes])
47
48AC_PATH_PROG(AR, ar)
49ARFLAGS="cruv"
50AC_SUBST(AR)
51AC_SUBST(ARFLAGS)
52
53# The POSIX ln(1) program.  Non-POSIX systems may substitute
54# "copy" or something.
55LN=ln
56AC_SUBST(LN)
57
58case "$AR" in
59	"")
60		AC_MSG_ERROR([
61ar program not found.  Please fix your PATH to include the directory in
62which ar resides, or set AR in the environment with the full path to ar.
63])
64
65		;;
66esac
67
68#
69# Etags.
70#
71AC_PATH_PROGS(ETAGS, etags emacs-etags)
72
73#
74# Some systems, e.g. RH7, have the Exuberant Ctags etags instead of
75# GNU emacs etags, and it requires the -L flag.
76#
77if test "X$ETAGS" != "X"; then
78	AC_MSG_CHECKING(for Exuberant Ctags etags)
79	if $ETAGS --version 2>&1 | grep 'Exuberant Ctags' >/dev/null 2>&1; then
80		AC_MSG_RESULT(yes)
81		ETAGS="$ETAGS -L"
82	else
83		AC_MSG_RESULT(no)
84	fi
85fi
86AC_SUBST(ETAGS)
87
88#
89# Perl is optional; it is used only by some of the system test scripts.
90#
91AC_PATH_PROGS(PERL, perl5 perl)
92AC_SUBST(PERL)
93
94#
95# Special processing of paths depending on whether --prefix,
96# --sysconfdir or --localstatedir arguments were given.  What's
97# desired is some compatibility with the way previous versions
98# of BIND built; they defaulted to /usr/local for most parts of
99# the installation, but named.boot/named.conf was in /etc
100# and named.pid was in /var/run.
101#
102# So ... if none of --prefix, --sysconfdir or --localstatedir are
103# specified, set things up that way.  If --prefix is given, use
104# it for sysconfdir and localstatedir the way configure normally
105# would.  To change the prefix for everything but leave named.conf
106# in /etc or named.pid in /var/run, then do this the usual configure way:
107# ./configure --prefix=/somewhere --sysconfdir=/etc
108# ./configure --prefix=/somewhere --localstatedir=/var
109#
110# To put named.conf and named.pid in /usr/local with everything else,
111# set the prefix explicitly to /usr/local even though that's the default:
112# ./configure --prefix=/usr/local
113#
114case "$prefix" in
115        NONE)
116                case "$sysconfdir" in
117                        '${prefix}/etc')
118                                sysconfdir=/etc
119                                ;;
120                esac
121                case "$localstatedir" in
122                        '${prefix}/var')
123                                localstatedir=/var
124                                ;;
125                esac
126                ;;
127esac
128
129#
130# Make sure INSTALL uses an absolute path, else it will be wrong in all
131# Makefiles, since they use make/rules.in and INSTALL will be adjusted by
132# configure based on the location of the file where it is substituted.
133# Since in BIND9 INSTALL is only substituted into make/rules.in, an immediate
134# subdirectory of install-sh, This relative path will be wrong for all
135# directories more than one level down from install-sh.
136#
137case "$INSTALL" in
138	/*)
139                ;;
140        *)
141                #
142                # Not all systems have dirname.
143                #
144                changequote({, })
145                ac_dir="`echo $INSTALL | sed 's%/[^/]*$%%'`"
146                changequote([, ])
147
148                ac_prog="`echo $INSTALL | sed 's%.*/%%'`"
149                test "$ac_dir" = "$ac_prog" && ac_dir=.
150                test -d "$ac_dir" && ac_dir="`(cd \"$ac_dir\" && pwd)`"
151                INSTALL="$ac_dir/$ac_prog"
152                ;;
153esac
154
155#
156# On these hosts, we really want to use cc, not gcc, even if it is
157# found.  The gcc that these systems have will not correctly handle
158# pthreads.
159#
160# However, if the user sets $CC to be something, let that override
161# our change.
162#
163if test "X$CC" = "X" ; then
164	case "$host" in
165		*-dec-osf*)
166			CC="cc"
167			;;
168		*-solaris*)
169                        # Use Sun's cc if it is available, but watch
170                        # out for /usr/ucb/cc; it will never be the right
171                        # compiler to use.
172                        #
173                        # If setting CC here fails, the AC_PROG_CC done
174                        # below might still find gcc.
175			IFS="${IFS=	}"; ac_save_ifs="$IFS"; IFS=":"
176			for ac_dir in $PATH; do
177				test -z "$ac_dir" && ac_dir=.
178				case "$ac_dir" in
179				/usr/ucb)
180					# exclude
181					;;
182				*)
183					if test -f "$ac_dir/cc"; then
184						CC="$ac_dir/cc"
185						break
186					fi
187					;;
188				esac
189			done
190			IFS="$ac_save_ifs"
191			;;
192		*-hp-hpux*)
193			CC="cc"
194			;;
195		mips-sgi-irix*)
196			CC="cc"
197			;;
198	esac
199fi
200
201AC_PROG_CC
202
203#
204# gcc's optimiser is broken at -02 for ultrasparc
205#
206if test "$ac_env_CFLAGS_set" != set -a "X$GCC" = "Xyes"; then
207	case "$host" in
208	sparc-*)
209		CCFLAGS="-g -O1"
210		;;
211	esac
212fi
213
214#
215# OS dependent CC flags
216#
217case "$host" in
218	# OSF 5.0: recv/send are only avaliable with -D_POSIX_PII_SOCKET or
219	# -D_XOPEN_SOURCE_EXTENDED.
220	*-dec-osf*)
221		STD_CDEFINES="$STD_CDEFINES -D_POSIX_PII_SOCKET"
222		CPPFLAGS="$CPPFLAGS -D_POSIX_PII_SOCKET"
223		;;
224	#HP-UX: need -D_XOPEN_SOURCE_EXTENDED and -lxnet for CMSG macros
225	*-hp-hpux*)
226		STD_CDEFINES="$STD_CDEFINES -D_XOPEN_SOURCE_EXTENDED"
227		CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED"
228		LIBS="-lxnet $LIBS"
229		;;
230	# Solaris: need -D_XPG4_2 and -D__EXTENSIONS__ for CMSG macros
231	*-solaris*)
232		STD_CDEFINES="$STD_CDEFINES -D_XPG4_2 -D__EXTENSIONS__"
233		CPPFLAGS="$CPPFLAGS -D_XPG4_2 -D__EXTENSIONS__"
234		;;
235	# POSIX doesn't include the IPv6 Advanced Socket API and glibc hides
236	# parts of the IPv6 Advanced Socket API as a result.  This is stupid
237	# as it breaks how the two halves (Basic and Advanced) of the IPv6
238	# Socket API were designed to be used but we have to live with it.
239	# Define _GNU_SOURCE to pull in the IPv6 Advanced Socket API.
240	*-linux*)
241		STD_CDEFINES="$STD_CDEFINES -D_GNU_SOURCE"
242		CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
243		;;
244esac
245
246AC_HEADER_STDC
247
248AC_CHECK_HEADERS(fcntl.h sys/time.h unistd.h sys/sockio.h sys/select.h sys/param.h sys/sysctl.h net/if6.h,,,
249[$ac_includes_default
250#ifdef HAVE_SYS_PARAM_H
251# include <sys/param.h>
252#endif
253])
254
255AC_C_CONST
256AC_C_INLINE
257AC_C_VOLATILE
258AC_CHECK_FUNC(sysctlbyname, AC_DEFINE(HAVE_SYSCTLBYNAME))
259
260#
261# UnixWare 7.1.1 with the feature supplement to the UDK compiler
262# is reported to not support "static inline" (RT #1212).
263#
264AC_MSG_CHECKING(for static inline breakage)
265AC_TRY_COMPILE(, [
266		foo1();
267	}
268
269	static inline int foo1() {
270		return 0;
271	}
272
273	static inline int foo2() {
274		return foo1();
275	],
276	[AC_MSG_RESULT(no)],
277	[AC_MSG_RESULT(yes)
278         AC_DEFINE(inline, )])
279
280AC_TYPE_SIZE_T
281AC_CHECK_TYPE(ssize_t, int)
282AC_CHECK_TYPE(uintptr_t,unsigned long)
283AC_CHECK_TYPE(socklen_t,
284[AC_DEFINE(ISC_SOCKADDR_LEN_T, socklen_t)],
285[
286AC_TRY_COMPILE(
287[
288#include <sys/types.h>
289#include <sys/socket.h>
290int getsockname(int, struct sockaddr *, size_t *);
291],[],
292[AC_DEFINE(ISC_SOCKADDR_LEN_T, size_t)],
293[AC_DEFINE(ISC_SOCKADDR_LEN_T, int)])
294],
295[
296#include <sys/types.h>
297#include <sys/socket.h>
298])
299AC_SUBST(ISC_SOCKADDR_LEN_T)
300AC_HEADER_TIME
301AC_MSG_CHECKING(for long long)
302AC_TRY_COMPILE([],[long long i = 0; return (0);],
303	[AC_MSG_RESULT(yes)
304		ISC_PLATFORM_HAVELONGLONG="#define ISC_PLATFORM_HAVELONGLONG 1"],
305	[AC_MSG_RESULT(no)
306		ISC_PLATFORM_HAVELONGLONG="#undef ISC_PLATFORM_HAVELONGLONG"])
307AC_SUBST(ISC_PLATFORM_HAVELONGLONG)
308
309#
310# check if we have lifconf
311#
312AC_MSG_CHECKING(for struct lifconf)
313AC_TRY_COMPILE([
314#include <sys/types.h>
315#include <sys/socket.h>
316#include <net/if.h>
317],
318[
319struct lifconf lifconf;
320lifconf.lifc_len = 0;
321]
322,
323	[AC_MSG_RESULT(yes)
324		ISC_PLATFORM_HAVELIFCONF="#define ISC_PLATFORM_HAVELIFCONF 1"],
325	[AC_MSG_RESULT(no)
326		ISC_PLATFORM_HAVELIFCONF="#undef ISC_PLATFORM_HAVELIFCONF"])
327AC_SUBST(ISC_PLATFORM_HAVELIFCONF)
328
329#
330# check if we have kqueue
331#
332AC_ARG_ENABLE(kqueue,
333	[  --enable-kqueue         use BSD kqueue when available [[default=yes]]],
334	      want_kqueue="$enableval",  want_kqueue="yes")
335case $want_kqueue in
336yes)
337	AC_CHECK_FUNC(kqueue, ac_cv_have_kqueue=yes, ac_cv_have_kqueue=no)
338	case $ac_cv_have_kqueue in
339	yes)
340		ISC_PLATFORM_HAVEKQUEUE="#define ISC_PLATFORM_HAVEKQUEUE 1"
341		;;
342	*)
343		ISC_PLATFORM_HAVEKQUEUE="#undef ISC_PLATFORM_HAVEKQUEUE"
344		;;
345	esac
346	;;
347*)
348	ISC_PLATFORM_HAVEKQUEUE="#undef ISC_PLATFORM_HAVEKQUEUE"
349	;;
350esac
351AC_SUBST(ISC_PLATFORM_HAVEKQUEUE)
352
353#
354# check if we have epoll.  Linux kernel 2.4 has epoll_create() which fails,
355# so we need to try running the code, not just test its existence.
356#
357AC_ARG_ENABLE(epoll,
358	[  --enable-epoll          use Linux epoll when available [[default=yes]]],
359	      want_epoll="$enableval",  want_epoll="yes")
360case $want_epoll in
361yes)
362	AC_MSG_CHECKING(epoll support)
363	AC_TRY_RUN([
364#include <sys/epoll.h>
365int main() {
366	if (epoll_create(1) < 0)
367		return (1);
368	return (0);
369}
370],
371	[AC_MSG_RESULT(yes)
372	ISC_PLATFORM_HAVEEPOLL="#define ISC_PLATFORM_HAVEEPOLL 1"],
373	[AC_MSG_RESULT(no)
374	ISC_PLATFORM_HAVEEPOLL="#undef ISC_PLATFORM_HAVEEPOLL"])
375	;;
376*)
377	ISC_PLATFORM_HAVEEPOLL="#undef ISC_PLATFORM_HAVEEPOLL"
378	;;
379esac
380AC_SUBST(ISC_PLATFORM_HAVEEPOLL)
381
382#
383# check if we support /dev/poll
384#
385AC_ARG_ENABLE(devpoll,
386	[  --enable-devpoll        use /dev/poll when available [[default=yes]]],
387	      want_devpoll="$enableval",  want_devpoll="yes")
388case $want_devpoll in
389yes)
390	AC_CHECK_HEADERS(sys/devpoll.h,
391	ISC_PLATFORM_HAVEDEVPOLL="#define ISC_PLATFORM_HAVEDEVPOLL 1"
392	,
393	ISC_PLATFORM_HAVEDEVPOLL="#undef ISC_PLATFORM_HAVEDEVPOLL"
394	)
395	;;
396*)
397	ISC_PLATFORM_HAVEDEVPOLL="#undef ISC_PLATFORM_HAVEDEVPOLL"
398	;;
399esac
400AC_SUBST(ISC_PLATFORM_HAVEDEVPOLL)
401
402#
403# check if we need to #include sys/select.h explicitly
404#
405case $ac_cv_header_unistd_h in
406yes)
407AC_MSG_CHECKING(if unistd.h or sys/types.h defines fd_set)
408AC_TRY_COMPILE([
409#include <sys/types.h> /* Ultrix */
410#include <unistd.h>],
411[fd_set read_set; return (0);],
412	[AC_MSG_RESULT(yes)
413	 ISC_PLATFORM_NEEDSYSSELECTH="#undef ISC_PLATFORM_NEEDSYSSELECTH"
414	 LWRES_PLATFORM_NEEDSYSSELECTH="#undef LWRES_PLATFORM_NEEDSYSSELECTH"],
415	[AC_MSG_RESULT(no)
416	case $ac_cv_header_sys_select_h in
417	yes)
418         ISC_PLATFORM_NEEDSYSSELECTH="#define ISC_PLATFORM_NEEDSYSSELECTH 1"
419	 LWRES_PLATFORM_NEEDSYSSELECTH="#define LWRES_PLATFORM_NEEDSYSSELECTH 1"
420		;;
421	no)
422		AC_MSG_ERROR([need either working unistd.h or sys/select.h])
423		;;
424	esac
425	])
426	;;
427no)
428	case $ac_cv_header_sys_select_h in
429	yes)
430             ISC_PLATFORM_NEEDSYSSELECTH="#define ISC_PLATFORM_NEEDSYSSELECTH 1"
431	     LWRES_PLATFORM_NEEDSYSSELECTH="#define LWRES_PLATFORM_NEEDSYSSELECTH 1"
432		;;
433	no)
434		AC_MSG_ERROR([need either unistd.h or sys/select.h])
435		;;
436	esac
437	;;
438esac
439AC_SUBST(ISC_PLATFORM_NEEDSYSSELECTH)
440AC_SUBST(LWRES_PLATFORM_NEEDSYSSELECTH)
441
442#
443# Find the machine's endian flavor.
444#
445AC_C_BIGENDIAN
446
447
448#
449# was --with-openssl specified?
450#
451OPENSSL_WARNING=
452AC_MSG_CHECKING(for OpenSSL library)
453AC_ARG_WITH(openssl,
454[  --with-openssl[=PATH]   Build with OpenSSL [yes|no|path].
455                          (Required for DNSSEC)],
456    use_openssl="$withval", use_openssl="auto")
457
458openssldirs="/usr /usr/local /usr/local/ssl /usr/pkg /usr/sfw"
459if test "$use_openssl" = "auto"
460then
461	for d in $openssldirs
462	do
463		if test -f $d/include/openssl/opensslv.h
464		then
465			use_openssl=$d
466			break
467		fi
468	done
469fi
470case "$use_openssl" in
471	no)
472		AC_MSG_RESULT(no)
473		DST_OPENSSL_INC=""
474		USE_OPENSSL=""
475		;;
476	auto)
477		DST_OPENSSL_INC=""
478		USE_OPENSSL=""
479		AC_MSG_RESULT(not found)
480		;;
481	*)
482		if test "$use_openssl" = "yes"
483		then
484		    	# User did not specify a path - guess it
485			for d in $openssldirs
486			do
487				if test -f $d/include/openssl/opensslv.h
488				then
489				 	use_openssl=$d
490					break
491				fi
492			done
493			if test "$use_openssl" = "yes"
494			then
495			    	AC_MSG_RESULT(not found)
496				AC_MSG_ERROR(
497[OpenSSL was not found in any of $openssldirs; use --with-openssl=/path])
498			fi
499		fi
500		USE_OPENSSL='-DOPENSSL'
501		if test "$use_openssl" = "/usr"
502		then
503			DST_OPENSSL_INC=""
504			DNS_OPENSSL_LIBS="-lcrypto"
505		else
506			DST_OPENSSL_INC="-I$use_openssl/include"
507			case $host in
508			*-solaris*)
509				DNS_OPENSSL_LIBS="-L$use_openssl/lib -R$use_openssl/lib -lcrypto"
510				;;
511			*-hp-hpux*)
512				DNS_OPENSSL_LIBS="-L$use_openssl/lib -Wl,+b: -lcrypto"
513				;;
514			*-apple-darwin*)
515				#
516				# Apple's ld seaches for serially for dynamic
517				# then static libraries.  This means you can't
518				# use -L to override dynamic system libraries
519				# with static ones when linking.  Instead
520				# we specify a absolute path.
521				#
522				if test -f "$use_openssl/lib/libcrypto.dylib"
523				then
524					DNS_OPENSSL_LIBS="-L$use_openssl/lib -lcrypto"
525				else
526					DNS_OPENSSL_LIBS="$use_openssl/lib/libcrypto.a"
527				fi
528				;;
529			*)
530				DNS_OPENSSL_LIBS="-L$use_openssl/lib -lcrypto"
531				;;
532			esac
533		fi
534		AC_MSG_RESULT(using openssl from $use_openssl/lib and $use_openssl/include)
535
536		saved_cflags="$CFLAGS"
537		saved_libs="$LIBS"
538		CFLAGS="$CFLAGS $DST_OPENSSL_INC"
539		LIBS="$LIBS $DNS_OPENSSL_LIBS"
540		AC_MSG_CHECKING(whether linking with OpenSSL works)
541		AC_TRY_RUN([
542#include <openssl/err.h>
543int main() {
544	ERR_clear_error();
545	return (0);
546}
547],
548	        [AC_MSG_RESULT(yes)],
549		[AC_MSG_RESULT(no)
550		 AC_MSG_ERROR(Could not run test program using OpenSSL from
551$use_openssl/lib and $use_openssl/include.
552Please check the argument to --with-openssl and your
553shared library configuration (e.g., LD_LIBRARY_PATH).)],
554		[AC_MSG_RESULT(assuming it does work on target platform)])
555
556		AC_MSG_CHECKING(whether linking with OpenSSL requires -ldl)
557		AC_TRY_LINK([
558#include <openssl/err.h>],
559[ DSO_METHOD_dlfcn(); ],
560		[AC_MSG_RESULT(no)],
561		[LIBS="$LIBS -ldl"
562		AC_TRY_LINK([
563#include <openssl/err.h>
564],[ DSO_METHOD_dlfcn(); ],
565		[AC_MSG_RESULT(yes)
566		DNS_OPENSSL_LIBS="$DNS_OPENSSL_LIBS -ldl"
567		],
568		 [AC_MSG_RESULT(unknown)
569		 AC_MSG_ERROR(OpenSSL has unsupported dynamic loading)],
570		[AC_MSG_RESULT(assuming it does work on target platform)])
571		],
572		[AC_MSG_RESULT(assuming it does work on target platform)]
573		)
574		 
575AC_ARG_ENABLE(openssl-version-check,
576[AC_HELP_STRING([--enable-openssl-version-check],
577        [Check OpenSSL Version @<:@default=yes@:>@])])
578case "$enable_openssl_version_check" in
579yes|'')
580		AC_MSG_CHECKING(OpenSSL library version)
581		AC_TRY_RUN([
582#include <stdio.h>
583#include <openssl/opensslv.h>
584int main() {
585        if ((OPENSSL_VERSION_NUMBER >= 0x009070cfL &&
586	     OPENSSL_VERSION_NUMBER < 0x00908000L) ||
587	     OPENSSL_VERSION_NUMBER >= 0x0090804fL)
588                return (0);
589	printf("\n\nFound   OPENSSL_VERSION_NUMBER %#010x\n",
590		OPENSSL_VERSION_NUMBER);
591	printf("Require OPENSSL_VERSION_NUMBER 0x009070cf or greater (0.9.7l)\n"
592	       "Require OPENSSL_VERSION_NUMBER 0x0090804f or greater (0.9.8d)\n\n");
593        return (1);
594}
595		],
596	        [AC_MSG_RESULT(ok)],
597		[AC_MSG_RESULT(not compatible)
598                 OPENSSL_WARNING=yes
599		],
600		[AC_MSG_RESULT(assuming target platform has compatible version)])
601;;
602no)
603	AC_MSG_RESULT(Skipped OpenSSL version check)
604;;
605esac
606
607		AC_MSG_CHECKING(for OpenSSL DSA support)
608		if test -f $use_openssl/include/openssl/dsa.h
609		then
610			AC_DEFINE(HAVE_OPENSSL_DSA)
611			AC_MSG_RESULT(yes)
612		else
613			AC_MSG_RESULT(no)
614		fi
615		CFLAGS="$saved_cflags"
616		LIBS="$saved_libs"
617		;;
618esac
619
620#
621# This would include the system openssl path (and linker options to use
622# it as needed) if it is found.
623#
624
625AC_SUBST(USE_OPENSSL)
626AC_SUBST(DST_OPENSSL_INC)
627DNS_CRYPTO_LIBS="$DNS_CRYPTO_LIBS $DNS_OPENSSL_LIBS"
628
629#
630# was --with-gssapi specified?
631#
632#AC_MSG_CHECKING(for GSSAPI library)
633#AC_ARG_WITH(gssapi,
634#[  --with-gssapi=PATH   Specify path for system-supplied GSSAPI],
635#    use_gssapi="$withval", use_gssapi="no")
636#
637#case "$use_gssapi" in
638#	no)
639#		USE_GSSAPI=''
640#		DST_GSSAPI_INC=''
641#		DNS_GSSAPI_LIBS=''
642#		AC_MSG_RESULT(not specified)
643#		;;
644#	yes)
645#		AC_MSG_ERROR([--with-gssapi must specify a path])
646#		;;
647#	*)
648#		USE_GSSAPI='-DGSSAPI'
649#		DST_GSSAPI_INC="-I$use_gssapi/include"
650#		DNS_GSSAPI_LIBS="-L$use_gssapi/lib -lgssapi_krb5"
651#		AC_MSG_RESULT(using gssapi from $use_gssapi/lib and $use_gssapi/include)
652#		;;
653#esac
654
655USE_GSSAPI=''
656DST_GSSAPI_INC=''
657DNS_GSSAPI_LIBS=''
658
659AC_SUBST(USE_GSSAPI)
660AC_SUBST(DST_GSSAPI_INC)
661DNS_CRYPTO_LIBS="$DNS_CRYPTO_LIBS $DNS_GSSAPI_LIBS"
662
663#
664# Applications linking with libdns also need to link with these libraries.
665#
666
667AC_SUBST(DNS_CRYPTO_LIBS)
668
669#
670# was --with-randomdev specified?
671#
672AC_MSG_CHECKING(for random device)
673AC_ARG_WITH(randomdev,
674[  --with-randomdev=PATH Specify path for random device],
675    use_randomdev="$withval", use_randomdev="unspec")
676
677case "$use_randomdev" in
678	unspec)
679		case "$host" in
680			*-openbsd*)
681				devrandom=/dev/arandom
682				;;
683			*)
684				devrandom=/dev/random
685				;;
686		esac
687		AC_MSG_RESULT($devrandom)
688		AC_CHECK_FILE($devrandom,
689			      AC_DEFINE_UNQUOTED(PATH_RANDOMDEV,
690						 "$devrandom"),)
691		;;
692	yes)
693		AC_MSG_ERROR([--with-randomdev must specify a path])
694		;;
695	no)
696		AC_MSG_RESULT(disabled)
697		;;
698	*)
699		AC_DEFINE_UNQUOTED(PATH_RANDOMDEV, "$use_randomdev")
700		AC_MSG_RESULT(using "$use_randomdev")
701		;;
702esac
703
704#
705# Do we have arc4random() ?
706#
707AC_CHECK_FUNC(arc4random, AC_DEFINE(HAVE_ARC4RANDOM))
708
709sinclude(config.threads.in)dnl
710
711if $use_threads
712then
713	if test "X$GCC" = "Xyes"; then
714		case "$host" in
715		*-freebsd*)
716			CC="$CC -pthread"
717			CCOPT="$CCOPT -pthread"
718			STD_CDEFINES="$STD_CDEFINES -D_THREAD_SAFE"
719			;;
720		*-openbsd*)
721			CC="$CC -pthread"
722			CCOPT="$CCOPT -pthread"
723			;;
724		*-solaris*)
725			LIBS="$LIBS -lthread"
726			;;
727		*-ibm-aix*)
728			STD_CDEFINES="$STD_CDEFINES -D_THREAD_SAFE"
729			;;
730		esac
731	else
732		case $host in
733		*-dec-osf*)
734			CC="$CC -pthread"
735			CCOPT="$CCOPT -pthread"
736			;;
737		*-solaris*)
738			CC="$CC -mt"
739			CCOPT="$CCOPT -mt"
740			;;
741		*-ibm-aix*)
742			STD_CDEFINES="$STD_CDEFINES -D_THREAD_SAFE"
743			;;
744		*-sco-sysv*uw*|*-*-sysv*UnixWare*)
745			CC="$CC -Kthread"
746			CCOPT="$CCOPT -Kthread"
747			;;
748		*-*-sysv*OpenUNIX*)
749			CC="$CC -Kpthread"
750			CCOPT="$CCOPT -Kpthread"
751			;;
752		esac
753	fi
754	ALWAYS_DEFINES="-D_REENTRANT"
755	ISC_PLATFORM_USETHREADS="#define ISC_PLATFORM_USETHREADS 1"
756	thread_dir=pthreads
757	#
758	# We'd like to use sigwait() too
759	#
760	AC_CHECK_FUNC(sigwait,
761		      AC_DEFINE(HAVE_SIGWAIT),
762		      AC_CHECK_LIB(c, sigwait,
763		      AC_DEFINE(HAVE_SIGWAIT),
764		      AC_CHECK_LIB(pthread, sigwait,
765				   AC_DEFINE(HAVE_SIGWAIT),
766				   AC_CHECK_LIB(pthread, _Psigwait,
767					        AC_DEFINE(HAVE_SIGWAIT),))))
768
769	AC_CHECK_FUNC(pthread_attr_getstacksize,
770		      AC_DEFINE(HAVE_PTHREAD_ATTR_GETSTACKSIZE),)
771
772	AC_CHECK_FUNC(pthread_attr_setstacksize,
773		      AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE),)
774
775	#
776	# Additional OS-specific issues related to pthreads and sigwait.
777	#
778	case "$host" in
779		#
780		# One more place to look for sigwait.
781		#
782		*-freebsd*)
783			AC_CHECK_LIB(c_r, sigwait, AC_DEFINE(HAVE_SIGWAIT),)
784			case $host in
785			*-freebsd5.[[012]]|*-freebsd5.[[012]].*);;
786			*-freebsd5.[[3456789]]|*-freebsd5.[[3456789]].*)
787				AC_DEFINE(NEED_PTHREAD_SCOPE_SYSTEM)
788				;;
789			*-freebsd6.*)
790				AC_DEFINE(NEED_PTHREAD_SCOPE_SYSTEM)
791				;;
792			esac
793			;;
794		#
795		# BSDI 3.0 through 4.0.1 needs pthread_init() to be
796		# called before certain pthreads calls.	 This is deprecated
797		# in BSD/OS 4.1.
798		#
799		*-bsdi3.*|*-bsdi4.0*)
800			AC_DEFINE(NEED_PTHREAD_INIT)
801			;;
802		#
803		# LinuxThreads requires some changes to the way we
804		# deal with signals.
805		#
806		*-linux*)
807			AC_DEFINE(HAVE_LINUXTHREADS)
808			;;
809		#
810		# Ensure the right sigwait() semantics on Solaris and make
811		# sure we call pthread_setconcurrency.
812		#
813		*-solaris*)
814			AC_DEFINE(_POSIX_PTHREAD_SEMANTICS)
815			AC_CHECK_FUNC(pthread_setconcurrency,
816				      AC_DEFINE(CALL_PTHREAD_SETCONCURRENCY))
817			;;
818		#
819		# UnixWare does things its own way.
820		#
821		*-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
822			AC_DEFINE(HAVE_UNIXWARE_SIGWAIT)
823			;;
824	esac
825
826	#
827	# Look for sysconf to allow detection of the number of processors.
828	#
829	AC_CHECK_FUNC(sysconf, AC_DEFINE(HAVE_SYSCONF),)
830
831else
832	ISC_PLATFORM_USETHREADS="#undef ISC_PLATFORM_USETHREADS"
833	thread_dir=nothreads
834	ALWAYS_DEFINES=""
835fi
836
837AC_SUBST(ALWAYS_DEFINES)
838AC_SUBST(ISC_PLATFORM_USETHREADS)
839ISC_THREAD_DIR=$thread_dir
840AC_SUBST(ISC_THREAD_DIR)
841
842#
843# In solaris 10, SMF can manage named service
844#
845AC_CHECK_LIB(scf, smf_enable_instance)
846
847#
848# flockfile is usually provided by pthreads, but we may want to use it
849# even if compiled with --disable-threads.  getc_unlocked might also not
850# be defined.
851#
852AC_CHECK_FUNC(flockfile, AC_DEFINE(HAVE_FLOCKFILE),)
853AC_CHECK_FUNC(getc_unlocked, AC_DEFINE(HAVE_GETCUNLOCKED),)
854
855# 
856# Indicate what the final decision was regarding threads.
857#
858AC_MSG_CHECKING(whether to build with threads)
859if $use_threads; then
860	AC_MSG_RESULT(yes)
861else
862	AC_MSG_RESULT(no)
863fi
864
865# 
866# End of pthreads stuff.
867#
868
869#
870# Large File
871#
872AC_ARG_ENABLE(largefile, [  --enable-largefile	  64-bit file support],
873	      want_largefile="yes", want_largefile="no")
874case $want_largefile in
875	yes)
876		ALWAYS_DEFINES="$ALWAYS_DEFINES -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
877		;;
878	*)
879		;;
880esac
881
882#
883# Additional compiler settings.
884#
885MKDEPCC="$CC"
886MKDEPCFLAGS="-M"
887IRIX_DNSSEC_WARNINGS_HACK=""
888
889if test "X$GCC" = "Xyes"; then
890	AC_MSG_CHECKING(if "$CC" supports -fno-strict-aliasing)
891	SAVE_CFLAGS=$CFLAGS
892	CFLAGS=-fno-strict-aliasing
893	AC_TRY_COMPILE(,, [FNOSTRICTALIASING=yes],[FNOSTRICTALIASING=no])
894	CFLAGS=$SAVE_CFLAGS
895	if test "$FNOSTRICTALIASING" = "yes"; then
896		AC_MSG_RESULT(yes)
897	STD_CWARNINGS="$STD_CWARNINGS -W -Wall -Wmissing-prototypes -Wcast-qual -Wwrite-strings -Wformat -Wpointer-arith -fno-strict-aliasing"
898	else
899		AC_MSG_RESULT(no)
900	STD_CWARNINGS="$STD_CWARNINGS -W -Wall -Wmissing-prototypes -Wcast-qual -Wwrite-strings -Wformat -Wpointer-arith"
901	fi
902	case "$host" in
903	*-hp-hpux*)
904		LDFLAGS="-Wl,+vnocompatwarnings $LDFLAGS"
905		;;
906	esac
907else
908	case $host in
909	*-dec-osf*)
910		CC="$CC -std"
911		CCOPT="$CCOPT -std"
912		MKDEPCC="$CC"
913		;;
914	*-hp-hpux*)
915		CC="$CC -Ae -z"
916		# The version of the C compiler that constantly warns about
917                # 'const' as well as alignment issues is unfortunately not
918                # able to be discerned via the version of the operating
919                # system, nor does cc have a version flag.
920		case "`$CC +W 123 2>&1`" in
921		*Unknown?option*)
922			STD_CWARNINGS="+w1"
923			;;
924		*)
925			# Turn off the pointlessly noisy warnings.
926			STD_CWARNINGS="+w1 +W 474,530,2193,2236"
927			;;
928		esac
929		CCOPT="$CCOPT -Ae -z"
930		LDFLAGS="-Wl,+vnocompatwarnings $LDFLAGS"
931		MKDEPPROG='cc -Ae -E -Wp,-M >/dev/null 2>>$TMP'
932		;;
933	*-sgi-irix*)
934		STD_CWARNINGS="-fullwarn -woff 1209"
935		#
936		# Silence more than 250 instances of
937		#   "prototyped function redeclared without prototype"
938		# and 11 instances of
939		#   "variable ... was set but never used"
940		# from lib/dns/sec/openssl.
941		#
942		IRIX_DNSSEC_WARNINGS_HACK="-woff 1692,1552"
943		;;
944	*-solaris*)
945		MKDEPCFLAGS="-xM"
946		;;
947	*-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
948                # UnixWare
949		CC="$CC -w"
950		;;
951	esac
952fi
953
954AC_SUBST(MKDEPCC)
955AC_SUBST(MKDEPCFLAGS)
956AC_SUBST(MKDEPPROG)
957AC_SUBST(IRIX_DNSSEC_WARNINGS_HACK)
958
959#
960# NLS
961#
962AC_CHECK_FUNC(catgets, AC_DEFINE(HAVE_CATGETS),)
963
964#
965# -lxnet buys us one big porting headache...  standards, gotta love 'em.
966#
967# AC_CHECK_LIB(xnet, socket, ,
968#    AC_CHECK_LIB(socket, socket)
969#    AC_CHECK_LIB(nsl, inet_ntoa)
970# )
971#
972# Use this for now, instead:
973#
974case "$host" in
975	mips-sgi-irix*)
976		;;
977	*)
978		AC_CHECK_LIB(socket, socket)
979		AC_CHECK_LIB(nsl, inet_ntoa)
980		;;
981esac
982
983#
984# Work around Solaris's select() limitations.
985#
986case "$host" in
987	*-solaris2.[[89]]|*-solaris2.1?)
988	AC_DEFINE(FD_SETSIZE, 65536,
989		  [Solaris hack to get select_large_fdset.])
990	;;
991esac
992
993#
994# Purify support
995#
996AC_MSG_CHECKING(whether to use purify)
997AC_ARG_WITH(purify,
998	[  --with-purify[=PATH]	use Rational purify],
999	use_purify="$withval", use_purify="no")
1000
1001case "$use_purify" in
1002	no)
1003		;;
1004	yes)
1005		AC_PATH_PROG(purify_path, purify, purify)
1006		;;
1007	*)
1008		purify_path="$use_purify"
1009		;;
1010esac
1011
1012case "$use_purify" in
1013	no)
1014		AC_MSG_RESULT(no)
1015		PURIFY=""
1016		;;
1017	*)
1018		if test -f $purify_path || test $purify_path = purify; then
1019			AC_MSG_RESULT($purify_path)
1020			PURIFYFLAGS="`echo $PURIFYOPTIONS`"
1021			PURIFY="$purify_path $PURIFYFLAGS"
1022		else
1023			AC_MSG_ERROR([$purify_path not found.
1024
1025Please choose the proper path with the following command:
1026
1027    configure --with-purify=PATH
1028])
1029		fi
1030		;;
1031esac
1032
1033AC_SUBST(PURIFY)
1034
1035#
1036# GNU libtool support
1037#
1038case $build_os in
1039sunos*)
1040    # Just set the maximum command line length for sunos as it otherwise
1041    # takes a exceptionally long time to work it out. Required for libtool.
1042    lt_cv_sys_max_cmd_len=4096;
1043    ;;
1044esac
1045
1046AC_ARG_WITH(libtool,
1047	    [  --with-libtool	use GNU libtool (following indented options supported)],
1048	    use_libtool="$withval", use_libtool="no")
1049
1050case $use_libtool in
1051	yes)
1052		AM_PROG_LIBTOOL
1053		O=lo
1054		A=la
1055		LIBTOOL_MKDEP_SED='s;\.o;\.lo;'
1056		LIBTOOL_MODE_COMPILE='--mode=compile'
1057		LIBTOOL_MODE_INSTALL='--mode=install'
1058		LIBTOOL_MODE_LINK='--mode=link'
1059		case "$host" in
1060		*) LIBTOOL_ALLOW_UNDEFINED= ;;
1061		esac
1062		case "$host" in
1063		*-ibm-aix*) LIBTOOL_IN_MAIN="-Wl,-bI:T_testlist.imp" ;;
1064		*) LIBTOOL_IN_MAIN= ;;
1065		esac;
1066		;;
1067	*)
1068		O=o
1069		A=a
1070		LIBTOOL=
1071		AC_SUBST(LIBTOOL)
1072		LIBTOOL_MKDEP_SED=
1073		LIBTOOL_MODE_COMPILE=
1074		LIBTOOL_MODE_INSTALL=
1075		LIBTOOL_MODE_LINK=
1076		LIBTOOL_ALLOW_UNDEFINED=
1077		LIBTOOL_IN_MAIN=
1078		;;
1079esac
1080
1081#
1082# File name extension for static archive files, for those few places
1083# where they are treated differently from dynamic ones.
1084#
1085SA=a
1086
1087AC_SUBST(O)
1088AC_SUBST(A)
1089AC_SUBST(SA)
1090AC_SUBST(LIBTOOL_MKDEP_SED)
1091AC_SUBST(LIBTOOL_MODE_COMPILE)
1092AC_SUBST(LIBTOOL_MODE_INSTALL)
1093AC_SUBST(LIBTOOL_MODE_LINK)
1094AC_SUBST(LIBTOOL_ALLOW_UNDEFINED)
1095AC_SUBST(LIBTOOL_IN_MAIN)
1096
1097#
1098# build libbind?
1099#
1100AC_ARG_ENABLE(libbind,
1101	[  --enable-libbind		build libbind [default=no]])
1102
1103case "$enable_libbind" in
1104	yes)
1105		LIBBIND=lib/bind
1106		AC_SUBST(LIBBIND)
1107		;;
1108	no|'')
1109		;;
1110esac
1111
1112
1113#
1114# Here begins a very long section to determine the system's networking
1115# capabilities.  The order of the tests is signficant.
1116#
1117
1118#
1119# IPv6
1120#
1121AC_ARG_ENABLE(ipv6,
1122	[  --enable-ipv6		use IPv6 [default=autodetect]])
1123
1124case "$enable_ipv6" in
1125	yes|''|autodetect)
1126		AC_DEFINE(WANT_IPV6)
1127		;;
1128	no)
1129		;;
1130esac
1131
1132#
1133# We do the IPv6 compilation checking after libtool so that we can put
1134# the right suffix on the files.
1135#
1136AC_MSG_CHECKING(for IPv6 structures)
1137AC_TRY_COMPILE([
1138#include <sys/types.h>
1139#include <sys/socket.h>
1140#include <netinet/in.h>],
1141[struct sockaddr_in6 sin6; return (0);],
1142	[AC_MSG_RESULT(yes)
1143	 found_ipv6=yes],
1144	[AC_MSG_RESULT(no)
1145	 found_ipv6=no])
1146
1147#
1148# See whether IPv6 support is provided via a Kame add-on.
1149# This is done before other IPv6 linking tests to LIBS is properly set.
1150#
1151AC_MSG_CHECKING(for Kame IPv6 support)
1152AC_ARG_WITH(kame,
1153	[  --with-kame[=PATH]	use Kame IPv6 [default path /usr/local/v6]],
1154	use_kame="$withval", use_kame="no")
1155
1156case "$use_kame" in
1157	no)
1158		;;
1159	yes)
1160		kame_path=/usr/local/v6
1161		;;
1162	*)
1163		kame_path="$use_kame"
1164		;;
1165esac
1166
1167case "$use_kame" in
1168	no)
1169		AC_MSG_RESULT(no)
1170		;;
1171	*)
1172		if test -f $kame_path/lib/libinet6.a; then
1173			AC_MSG_RESULT($kame_path/lib/libinet6.a)
1174			LIBS="-L$kame_path/lib -linet6 $LIBS"
1175		else
1176			AC_MSG_ERROR([$kame_path/lib/libinet6.a not found.
1177
1178Please choose the proper path with the following command:
1179
1180    configure --with-kame=PATH
1181])
1182		fi
1183		;;
1184esac
1185
1186#
1187# Whether netinet6/in6.h is needed has to be defined in isc/platform.h.
1188# Including it on Kame-using platforms is very bad, though, because
1189# Kame uses #error against direct inclusion.   So include it on only
1190# the platform that is otherwise broken without it -- BSD/OS 4.0 through 4.1.
1191# This is done before the in6_pktinfo check because that's what
1192# netinet6/in6.h is needed for.
1193#
1194changequote({, })
1195case "$host" in
1196*-bsdi4.[01]*)
1197	ISC_PLATFORM_NEEDNETINET6IN6H="#define ISC_PLATFORM_NEEDNETINET6IN6H 1"
1198	LWRES_PLATFORM_NEEDNETINET6IN6H="#define LWRES_PLATFORM_NEEDNETINET6IN6H 1"
1199	isc_netinet6in6_hack="#include <netinet6/in6.h>"
1200	;;
1201*)
1202	ISC_PLATFORM_NEEDNETINET6IN6H="#undef ISC_PLATFORM_NEEDNETINET6IN6H"
1203	LWRES_PLATFORM_NEEDNETINET6IN6H="#undef LWRES_PLATFORM_NEEDNETINET6IN6H"
1204	isc_netinet6in6_hack=""
1205	;;
1206esac
1207changequote([, ])
1208
1209#
1210# This is similar to the netinet6/in6.h issue.
1211#
1212case "$host" in
1213*-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
1214        # UnixWare
1215	ISC_PLATFORM_NEEDNETINETIN6H="#define ISC_PLATFORM_NEEDNETINETIN6H 1"
1216	LWRES_PLATFORM_NEEDNETINETIN6H="#define LWRES_PLATFORM_NEEDNETINETIN6H 1"
1217        ISC_PLATFORM_FIXIN6ISADDR="#define ISC_PLATFORM_FIXIN6ISADDR 1"
1218	isc_netinetin6_hack="#include <netinet/in6.h>"
1219	;;
1220*)
1221	ISC_PLATFORM_NEEDNETINETIN6H="#undef ISC_PLATFORM_NEEDNETINETIN6H"
1222	LWRES_PLATFORM_NEEDNETINETIN6H="#undef LWRES_PLATFORM_NEEDNETINETIN6H"
1223        ISC_PLATFORM_FIXIN6ISADDR="#undef ISC_PLATFORM_FIXIN6ISADDR"
1224	isc_netinetin6_hack=""
1225	;;
1226esac
1227
1228#
1229# Now delve deeper into the suitability of the IPv6 support.
1230#
1231case "$found_ipv6" in
1232	yes)
1233		ISC_PLATFORM_HAVEIPV6="#define ISC_PLATFORM_HAVEIPV6 1"
1234		LWRES_PLATFORM_HAVEIPV6="#define LWRES_PLATFORM_HAVEIPV6 1"
1235
1236		AC_MSG_CHECKING(for in6_addr)
1237		AC_TRY_COMPILE([
1238#include <sys/types.h>
1239#include <sys/socket.h>
1240#include <netinet/in.h>
1241$isc_netinetin6_hack
1242$isc_netinet6in6_hack
1243],
1244[struct in6_addr in6; return (0);],
1245		[AC_MSG_RESULT(yes)
1246		 ISC_PLATFORM_HAVEINADDR6="#undef ISC_PLATFORM_HAVEINADDR6"
1247		 LWRES_PLATFORM_HAVEINADDR6="#undef LWRES_PLATFORM_HAVEINADDR6"
1248		 isc_in_addr6_hack=""],
1249		[AC_MSG_RESULT(no)
1250		 ISC_PLATFORM_HAVEINADDR6="#define ISC_PLATFORM_HAVEINADDR6 1"
1251		 LWRES_PLATFORM_HAVEINADDR6="#define LWRES_PLATFORM_HAVEINADDR6 1"
1252		 isc_in_addr6_hack="#define in6_addr in_addr6"])
1253
1254		AC_MSG_CHECKING(for in6addr_any)
1255		AC_TRY_LINK([
1256#include <sys/types.h>
1257#include <sys/socket.h>
1258#include <netinet/in.h>
1259$isc_netinetin6_hack
1260$isc_netinet6in6_hack
1261$isc_in_addr6_hack
1262],
1263		[struct in6_addr in6; in6 = in6addr_any; return (in6.s6_addr[0]);],
1264			[AC_MSG_RESULT(yes)
1265			 ISC_PLATFORM_NEEDIN6ADDRANY="#undef ISC_PLATFORM_NEEDIN6ADDRANY"
1266			 LWRES_PLATFORM_NEEDIN6ADDRANY="#undef LWRES_PLATFORM_NEEDIN6ADDRANY"],
1267			[AC_MSG_RESULT(no)
1268			 ISC_PLATFORM_NEEDIN6ADDRANY="#define ISC_PLATFORM_NEEDIN6ADDRANY 1"
1269			 LWRES_PLATFORM_NEEDIN6ADDRANY="#define LWRES_PLATFORM_NEEDIN6ADDRANY 1"])
1270
1271		AC_MSG_CHECKING(for in6addr_loopback)
1272		AC_TRY_LINK([
1273#include <sys/types.h>
1274#include <sys/socket.h>
1275#include <netinet/in.h>
1276$isc_netinetin6_hack
1277$isc_netinet6in6_hack
1278$isc_in_addr6_hack
1279],
1280		[struct in6_addr in6; in6 = in6addr_loopback; return (in6.s6_addr[0]);],
1281			[AC_MSG_RESULT(yes)
1282			 ISC_PLATFORM_NEEDIN6ADDRLOOPBACK="#undef ISC_PLATFORM_NEEDIN6ADDRLOOPBACK"
1283			 LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK="#undef LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK"],
1284			[AC_MSG_RESULT(no)
1285			 ISC_PLATFORM_NEEDIN6ADDRLOOPBACK="#define ISC_PLATFORM_NEEDIN6ADDRLOOPBACK 1"
1286			 LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK="#define LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK 1"])
1287
1288		AC_MSG_CHECKING(for sin6_scope_id in struct sockaddr_in6)
1289		AC_TRY_COMPILE([
1290#include <sys/types.h>
1291#include <sys/socket.h>
1292#include <netinet/in.h>
1293$isc_netinetin6_hack
1294$isc_netinet6in6_hack
1295],
1296		[struct sockaddr_in6 xyzzy; xyzzy.sin6_scope_id = 0; return (0);],
1297			[AC_MSG_RESULT(yes)
1298			 ISC_PLATFORM_HAVESCOPEID="#define ISC_PLATFORM_HAVESCOPEID 1"
1299			 result="#define LWRES_HAVE_SIN6_SCOPE_ID 1"],
1300			[AC_MSG_RESULT(no)
1301			 ISC_PLATFORM_HAVESCOPEID="#undef ISC_PLATFORM_HAVESCOPEID"
1302			 result="#undef LWRES_HAVE_SIN6_SCOPE_ID"])
1303		LWRES_HAVE_SIN6_SCOPE_ID="$result"
1304
1305		AC_MSG_CHECKING(for in6_pktinfo)
1306		AC_TRY_COMPILE([
1307#include <sys/types.h>
1308#include <sys/socket.h>
1309#include <netinet/in.h>
1310$isc_netinetin6_hack
1311$isc_netinet6in6_hack
1312],
1313		[struct in6_pktinfo xyzzy; return (0);],
1314			[AC_MSG_RESULT(yes)
1315			 ISC_PLATFORM_HAVEIN6PKTINFO="#define ISC_PLATFORM_HAVEIN6PKTINFO 1"],
1316			[AC_MSG_RESULT(no -- disabling runtime ipv6 support)
1317			 ISC_PLATFORM_HAVEIN6PKTINFO="#undef ISC_PLATFORM_HAVEIN6PKTINFO"])
1318		;;
1319	no)
1320		ISC_PLATFORM_HAVEIPV6="#undef ISC_PLATFORM_HAVEIPV6"
1321		LWRES_PLATFORM_HAVEIPV6="#undef LWRES_PLATFORM_HAVEIPV6"
1322		ISC_PLATFORM_NEEDIN6ADDRANY="#undef ISC_PLATFORM_NEEDIN6ADDRANY"
1323		LWRES_PLATFORM_NEEDIN6ADDRANY="#undef LWRES_PLATFORM_NEEDIN6ADDRANY"
1324		ISC_PLATFORM_HAVEIN6PKTINFO="#undef ISC_PLATFORM_HAVEIN6PKTINFO"
1325		LWRES_HAVE_SIN6_SCOPE_ID="#define LWRES_HAVE_SIN6_SCOPE_ID 1"
1326		ISC_PLATFORM_HAVESCOPEID="#define ISC_PLATFORM_HAVESCOPEID 1"
1327		ISC_IPV6_H="ipv6.h"
1328		ISC_IPV6_O="ipv6.$O"
1329		ISC_ISCIPV6_O="unix/ipv6.$O"
1330		ISC_IPV6_C="ipv6.c"
1331		;;
1332esac
1333
1334AC_SUBST(ISC_PLATFORM_HAVEIPV6)
1335AC_SUBST(LWRES_PLATFORM_HAVEIPV6)
1336AC_SUBST(ISC_PLATFORM_NEEDNETINETIN6H)
1337AC_SUBST(LWRES_PLATFORM_NEEDNETINETIN6H)
1338AC_SUBST(ISC_PLATFORM_NEEDNETINET6IN6H)
1339AC_SUBST(LWRES_PLATFORM_NEEDNETINET6IN6H)
1340AC_SUBST(ISC_PLATFORM_HAVEINADDR6)
1341AC_SUBST(LWRES_PLATFORM_HAVEINADDR6)
1342AC_SUBST(ISC_PLATFORM_NEEDIN6ADDRANY)
1343AC_SUBST(LWRES_PLATFORM_NEEDIN6ADDRANY)
1344AC_SUBST(ISC_PLATFORM_NEEDIN6ADDRLOOPBACK)
1345AC_SUBST(LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK)
1346AC_SUBST(ISC_PLATFORM_HAVEIN6PKTINFO)
1347AC_SUBST(ISC_PLATFORM_FIXIN6ISADDR)
1348AC_SUBST(ISC_IPV6_H)
1349AC_SUBST(ISC_IPV6_O)
1350AC_SUBST(ISC_ISCIPV6_O)
1351AC_SUBST(ISC_IPV6_C)
1352AC_SUBST(LWRES_HAVE_SIN6_SCOPE_ID)
1353AC_SUBST(ISC_PLATFORM_HAVESCOPEID)
1354
1355AC_MSG_CHECKING([for struct if_laddrreq])
1356AC_TRY_LINK([
1357#include <sys/types.h>
1358#include <net/if6.h>
1359],[ struct if_laddrreq a; ],
1360	[AC_MSG_RESULT(yes)
1361	ISC_PLATFORM_HAVEIF_LADDRREQ="#define ISC_PLATFORM_HAVEIF_LADDRREQ 1"],
1362	[AC_MSG_RESULT(no)
1363	ISC_PLATFORM_HAVEIF_LADDRREQ="#undef ISC_PLATFORM_HAVEIF_LADDRREQ"])
1364AC_SUBST(ISC_PLATFORM_HAVEIF_LADDRREQ)
1365
1366AC_MSG_CHECKING([for struct if_laddrconf])
1367AC_TRY_LINK([
1368#include <sys/types.h>
1369#include <net/if6.h>
1370],[ struct if_laddrconf a; ],
1371	[AC_MSG_RESULT(yes)
1372	ISC_PLATFORM_HAVEIF_LADDRCONF="#define ISC_PLATFORM_HAVEIF_LADDRCONF 1"],
1373	[AC_MSG_RESULT(no)
1374	ISC_PLATFORM_HAVEIF_LADDRCONF="#undef ISC_PLATFORM_HAVEIF_LADDRCONF"])
1375AC_SUBST(ISC_PLATFORM_HAVEIF_LADDRCONF)
1376
1377#
1378# Check for network functions that are often missing.  We do this
1379# after the libtool checking, so we can put the right suffix on
1380# the files.  It also needs to come after checking for a Kame add-on,
1381# which provides some (all?) of the desired functions.
1382#
1383
1384AC_MSG_CHECKING([for inet_ntop with IPv6 support])
1385AC_TRY_RUN([
1386#include <sys/types.h>
1387#include <sys/socket.h>
1388#include <netinet/in.h>
1389#include <arpa/inet.h>
1390main() {
1391char a[16],b[64]; return(inet_ntop(AF_INET6, a, b, sizeof(b)) == (char*)0);}],
1392        [AC_MSG_RESULT(yes)
1393        ISC_PLATFORM_NEEDNTOP="#undef ISC_PLATFORM_NEEDNTOP"],
1394
1395        [AC_MSG_RESULT(no)
1396        ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS inet_ntop.$O"
1397        ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS inet_ntop.c"
1398        ISC_PLATFORM_NEEDNTOP="#define ISC_PLATFORM_NEEDNTOP 1"],
1399        [AC_MSG_RESULT(assuming inet_ntop needed)
1400        ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS inet_ntop.$O"
1401        ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS inet_ntop.c"
1402        ISC_PLATFORM_NEEDNTOP="#define ISC_PLATFORM_NEEDNTOP 1"])
1403
1404
1405# On NetBSD 1.4.2 and maybe others, inet_pton() incorrectly accepts
1406# addresses with less than four octets, like "1.2.3".  Also leading
1407# zeros should also be rejected.
1408
1409AC_MSG_CHECKING([for working inet_pton with IPv6 support])
1410AC_TRY_RUN([
1411#include <sys/types.h>
1412#include <sys/socket.h>
1413#include <netinet/in.h>
1414#include <arpa/inet.h>
1415main() { char a[16]; return (inet_pton(AF_INET, "1.2.3", a) == 1 ? 1 :
1416			     inet_pton(AF_INET, "1.2.3.04", a) == 1 ? 1 : 
1417			     (inet_pton(AF_INET6, "::1.2.3.4", a) != 1)); }],
1418        [AC_MSG_RESULT(yes)
1419        ISC_PLATFORM_NEEDPTON="#undef ISC_PLATFORM_NEEDPTON"],
1420        [AC_MSG_RESULT(no)
1421        ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS inet_pton.$O"
1422        ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS inet_pton.c"
1423        ISC_PLATFORM_NEEDPTON="#define ISC_PLATFORM_NEEDPTON 1"],
1424	[AC_MSG_RESULT(assuming target platform has working inet_pton)
1425	ISC_PLATFORM_NEEDPTON="#undef ISC_PLATFORM_NEEDPTON"],
1426        [AC_MSG_RESULT(assuming inet_pton needed)
1427        ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS inet_pton.$O"
1428        ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS inet_pton.c"
1429        ISC_PLATFORM_NEEDPTON="#define ISC_PLATFORM_NEEDPTON 1"],
1430        [AC_MSG_RESULT(assuming target platform has working inet_pton)
1431        ISC_PLATFORM_NEEDPTON="#undef ISC_PLATFORM_NEEDPTON"])
1432
1433AC_MSG_CHECKING([for inet_aton])
1434AC_TRY_LINK([
1435#include <sys/types.h>
1436#include <netinet/in.h>
1437#include <arpa/inet.h>],
1438        [struct in_addr in; inet_aton(0, &in); return (0);],
1439        [AC_MSG_RESULT(yes)
1440        ISC_PLATFORM_NEEDATON="#undef ISC_PLATFORM_NEEDATON"],
1441
1442        [AC_MSG_RESULT(no)
1443        ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS inet_aton.$O"
1444        ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS inet_aton.c"
1445        ISC_PLATFORM_NEEDATON="#define ISC_PLATFORM_NEEDATON 1"])
1446
1447AC_SUBST(ISC_PLATFORM_NEEDNTOP)
1448AC_SUBST(ISC_PLATFORM_NEEDPTON)
1449AC_SUBST(ISC_PLATFORM_NEEDATON)
1450
1451#
1452# Look for a 4.4BSD-style sa_len member in struct sockaddr.
1453#
1454case "$host" in
1455	*-dec-osf*)
1456		# Turn on 4.4BSD style sa_len support.
1457		AC_DEFINE(_SOCKADDR_LEN)
1458		;;
1459esac
1460
1461AC_MSG_CHECKING(for sa_len in struct sockaddr)
1462AC_TRY_COMPILE([
1463#include <sys/types.h>
1464#include <sys/socket.h>],
1465[struct sockaddr sa; sa.sa_len = 0; return (0);],
1466	[AC_MSG_RESULT(yes)
1467	ISC_PLATFORM_HAVESALEN="#define ISC_PLATFORM_HAVESALEN 1"
1468	LWRES_PLATFORM_HAVESALEN="#define LWRES_PLATFORM_HAVESALEN 1"],
1469	[AC_MSG_RESULT(no)
1470	ISC_PLATFORM_HAVESALEN="#undef ISC_PLATFORM_HAVESALEN"
1471	LWRES_PLATFORM_HAVESALEN="#undef LWRES_PLATFORM_HAVESALEN"])
1472AC_SUBST(ISC_PLATFORM_HAVESALEN)
1473AC_SUBST(LWRES_PLATFORM_HAVESALEN)
1474
1475#
1476# Look for a 4.4BSD or 4.3BSD struct msghdr
1477#
1478AC_MSG_CHECKING(for struct msghdr flavor)
1479AC_TRY_COMPILE([
1480#include <sys/types.h>
1481#include <sys/socket.h>],
1482[struct msghdr msg; msg.msg_flags = 0; return (0);],
1483	[AC_MSG_RESULT(4.4BSD)
1484	ISC_PLATFORM_MSGHDRFLAVOR="#define ISC_NET_BSD44MSGHDR 1"],
1485	[AC_MSG_RESULT(4.3BSD)
1486	ISC_PLATFORM_MSGHDRFLAVOR="#define ISC_NET_BSD43MSGHDR 1"])
1487AC_SUBST(ISC_PLATFORM_MSGHDRFLAVOR)
1488
1489#
1490# Look for in_port_t.
1491#
1492AC_MSG_CHECKING(for type in_port_t)
1493AC_TRY_COMPILE([
1494#include <sys/types.h>
1495#include <netinet/in.h>],
1496[in_port_t port = 25; return (0);],
1497	[AC_MSG_RESULT(yes)
1498	ISC_PLATFORM_NEEDPORTT="#undef ISC_PLATFORM_NEEDPORTT"],
1499        [AC_MSG_RESULT(no)
1500	ISC_PLATFORM_NEEDPORTT="#define ISC_PLATFORM_NEEDPORTT 1"])
1501AC_SUBST(ISC_PLATFORM_NEEDPORTT)
1502
1503#
1504# Check for addrinfo
1505#
1506AC_MSG_CHECKING(for struct addrinfo)
1507AC_TRY_COMPILE([
1508#include <netdb.h>],
1509[struct addrinfo a; return (0);],
1510	[AC_MSG_RESULT(yes)
1511	ISC_LWRES_NEEDADDRINFO="#undef ISC_LWRES_NEEDADDRINFO"
1512	AC_DEFINE(HAVE_ADDRINFO)],
1513	[AC_MSG_RESULT(no)
1514	ISC_LWRES_NEEDADDRINFO="#define ISC_LWRES_NEEDADDRINFO 1"])
1515AC_SUBST(ISC_LWRES_NEEDADDRINFO)
1516
1517#
1518# Check for rrsetinfo
1519#
1520AC_MSG_CHECKING(for struct rrsetinfo)
1521AC_TRY_COMPILE([
1522#include <netdb.h>],
1523[struct rrsetinfo r; return (0);],
1524	[AC_MSG_RESULT(yes)
1525	ISC_LWRES_NEEDRRSETINFO="#undef ISC_LWRES_NEEDRRSETINFO"],
1526	[AC_MSG_RESULT(no)
1527	ISC_LWRES_NEEDRRSETINFO="#define ISC_LWRES_NEEDRRSETINFO 1"])
1528AC_SUBST(ISC_LWRES_NEEDRRSETINFO)
1529
1530AC_MSG_CHECKING(for int sethostent)
1531AC_TRY_COMPILE([
1532#include <netdb.h>],
1533[int i = sethostent(0); return(0);],
1534	[AC_MSG_RESULT(yes)
1535	ISC_LWRES_SETHOSTENTINT="#define ISC_LWRES_SETHOSTENTINT 1"],
1536	[AC_MSG_RESULT(no)
1537	ISC_LWRES_SETHOSTENTINT="#undef ISC_LWRES_SETHOSTENTINT"])
1538AC_SUBST(ISC_LWRES_SETHOSTENTINT)
1539
1540AC_MSG_CHECKING(for int endhostent)
1541AC_TRY_COMPILE([
1542#include <netdb.h>],
1543[int i = endhostent(); return(0);],
1544	[AC_MSG_RESULT(yes)
1545	ISC_LWRES_ENDHOSTENTINT="#define ISC_LWRES_ENDHOSTENTINT 1"],
1546	[AC_MSG_RESULT(no)
1547	ISC_LWRES_ENDHOSTENTINT="#undef ISC_LWRES_ENDHOSTENTINT"])
1548AC_SUBST(ISC_LWRES_ENDHOSTENTINT)
1549
1550AC_MSG_CHECKING(for getnetbyaddr(in_addr_t, ...))
1551AC_TRY_COMPILE([
1552#include <netdb.h>
1553struct netent *getnetbyaddr(in_addr_t, int);],
1554[],
1555	[AC_MSG_RESULT(yes)
1556	ISC_LWRES_GETNETBYADDRINADDR="#define ISC_LWRES_GETNETBYADDRINADDR 1"],
1557	[AC_MSG_RESULT(no)
1558	ISC_LWRES_GETNETBYADDRINADDR="#undef ISC_LWRES_GETNETBYADDRINADDR"])
1559AC_SUBST(ISC_LWRES_GETNETBYADDRINADDR)
1560
1561AC_MSG_CHECKING(for int setnetent)
1562AC_TRY_COMPILE([
1563#include <netdb.h>],
1564[int i = setnetent(0); return(0);],
1565	[AC_MSG_RESULT(yes)
1566	ISC_LWRES_SETNETENTINT="#define ISC_LWRES_SETNETENTINT 1"],
1567	[AC_MSG_RESULT(no)
1568	ISC_LWRES_SETNETENTINT="#undef ISC_LWRES_SETNETENTINT"])
1569AC_SUBST(ISC_LWRES_SETNETENTINT)
1570
1571AC_MSG_CHECKING(for int endnetent)
1572AC_TRY_COMPILE([
1573#include <netdb.h>],
1574[int i = endnetent(); return(0);],
1575	[AC_MSG_RESULT(yes)
1576	ISC_LWRES_ENDNETENTINT="#define ISC_LWRES_ENDNETENTINT 1"],
1577	[AC_MSG_RESULT(no)
1578	ISC_LWRES_ENDNETENTINT="#undef ISC_LWRES_ENDNETENTINT"])
1579AC_SUBST(ISC_LWRES_ENDNETENTINT)
1580
1581AC_MSG_CHECKING(for gethostbyaddr(const void *, size_t, ...))
1582AC_TRY_COMPILE([
1583#include <netdb.h>
1584struct hostent *gethostbyaddr(const void *, size_t, int);],
1585[return(0);],
1586	[AC_MSG_RESULT(yes)
1587	ISC_LWRES_GETHOSTBYADDRVOID="#define ISC_LWRES_GETHOSTBYADDRVOID 1"],
1588	[AC_MSG_RESULT(no)
1589	ISC_LWRES_GETHOSTBYADDRVOID="#undef ISC_LWRES_GETHOSTBYADDRVOID"])
1590AC_SUBST(ISC_LWRES_GETHOSTBYADDRVOID)
1591
1592AC_MSG_CHECKING(for h_errno in netdb.h)
1593AC_TRY_COMPILE([
1594#include <netdb.h>],
1595[h_errno = 1; return(0);],
1596	[AC_MSG_RESULT(yes)
1597	ISC_LWRES_NEEDHERRNO="#undef ISC_LWRES_NEEDHERRNO"],
1598	[AC_MSG_RESULT(no)
1599	ISC_LWRES_NEEDHERRNO="#define ISC_LWRES_NEEDHERRNO 1"])
1600AC_SUBST(ISC_LWRES_NEEDHERRNO)
1601
1602AC_CHECK_FUNC(getipnodebyname,
1603        [ISC_LWRES_GETIPNODEPROTO="#undef ISC_LWRES_GETIPNODEPROTO"],
1604        [ISC_LWRES_GETIPNODEPROTO="#define ISC_LWRES_GETIPNODEPROTO 1"])
1605AC_CHECK_FUNC(getnameinfo,
1606        [ISC_LWRES_GETNAMEINFOPROTO="#undef ISC_LWRES_GETNAMEINFOPROTO"],
1607        [ISC_LWRES_GETNAMEINFOPROTO="#define ISC_LWRES_GETNAMEINFOPROTO 1"])
1608AC_CHECK_FUNC(getaddrinfo,
1609        [ISC_LWRES_GETADDRINFOPROTO="#undef ISC_LWRES_GETADDRINFOPROTO"
1610	AC_DEFINE(HAVE_GETADDRINFO)],
1611        [ISC_LWRES_GETADDRINFOPROTO="#define ISC_LWRES_GETADDRINFOPROTO 1"])
1612AC_CHECK_FUNC(gai_strerror, AC_DEFINE(HAVE_GAISTRERROR))
1613AC_SUBST(ISC_LWRES_GETIPNODEPROTO)
1614AC_SUBST(ISC_LWRES_GETADDRINFOPROTO)
1615AC_SUBST(ISC_LWRES_GETNAMEINFOPROTO)
1616
1617AC_ARG_ENABLE(getifaddrs,
1618[  --enable-getifaddrs    Enable the use of getifaddrs() [[yes|no|glibc]].
1619             glibc: Use getifaddrs() in glibc if you know it supports IPv6.],
1620    want_getifaddrs="$enableval",  want_getifaddrs="yes")
1621
1622case $want_getifaddrs in
1623yes|glibc)
1624#
1625# Do we have getifaddrs() ?
1626#
1627case $host in
1628*-linux*)
1629	# Some recent versions of glibc support getifaddrs() which does not
1630	# provide AF_INET6 addresses while the function provided by the USAGI
1631	# project handles the AF_INET6 case correctly.  We need to avoid
1632	# using the former but prefer the latter unless overridden by
1633	# --enable-getifaddrs=glibc.
1634	if test $want_getifaddrs = glibc
1635	then
1636		AC_CHECK_FUNC(getifaddrs, AC_DEFINE(HAVE_GETIFADDRS))
1637	else
1638		save_LIBS="$LIBS"
1639		LIBS="-L/usr/local/v6/lib $LIBS"
1640		AC_CHECK_LIB(inet6, getifaddrs,
1641			LIBS="$LIBS -linet6"
1642			AC_DEFINE(HAVE_GETIFADDRS),
1643			LIBS=${save_LIBS})
1644	fi
1645	;;
1646*)
1647	AC_CHECK_FUNC(getifaddrs, AC_DEFINE(HAVE_GETIFADDRS))
1648	;;
1649esac
1650;;
1651no)
1652;;
1653esac
1654
1655#
1656# Look for a sysctl call to get the list of network interfaces.
1657#
1658case $ac_cv_header_sys_sysctl_h in
1659yes)
1660AC_MSG_CHECKING(for interface list sysctl)
1661AC_EGREP_CPP(found_rt_iflist, [
1662#include <sys/param.h>
1663#include <sys/sysctl.h>
1664#include <sys/socket.h>
1665#ifdef NET_RT_IFLIST
1666found_rt_iflist
1667#endif
1668],
1669	[AC_MSG_RESULT(yes)
1670	 AC_DEFINE(HAVE_IFLIST_SYSCTL)],
1671	[AC_MSG_RESULT(no)])
1672;;
1673esac
1674
1675#
1676# Check for some other useful functions that are not ever-present.
1677#
1678
1679# We test for strsep() using AC_TRY_LINK instead of AC_CHECK_FUNC
1680# because AIX 4.3.3 with patches for bos.adt.include to version 4.3.3.77
1681# reportedly defines strsep() without declaring it in <string.h> when
1682# -D_LINUX_SOURCE_COMPAT is not defined [RT #2190], and
1683# AC_CHECK_FUNC() incorrectly succeeds because it declares
1684# the function itself.
1685AC_MSG_CHECKING(for correctly declared strsep())
1686AC_TRY_LINK([#include <string.h>], [char *sp; char *foo = strsep(&sp, ".");],
1687	[AC_MSG_RESULT(yes); ISC_PLATFORM_NEEDSTRSEP="#undef ISC_PLATFORM_NEEDSTRSEP"],
1688	[AC_MSG_RESULT(no); ISC_PLATFORM_NEEDSTRSEP="#define ISC_PLATFORM_NEEDSTRSEP 1"])
1689AC_SUBST(ISC_PLATFORM_NEEDSTRSEP)
1690
1691AC_CHECK_FUNC(memmove,
1692	[ISC_PLATFORM_NEEDMEMMOVE="#undef ISC_PLATFORM_NEEDMEMMOVE"],
1693	[ISC_PLATFORM_NEEDMEMMOVE="#define ISC_PLATFORM_NEEDMEMMOVE 1"])
1694AC_SUBST(ISC_PLATFORM_NEEDMEMMOVE)
1695
1696AC_CHECK_FUNC(strtoul,
1697	[ISC_PLATFORM_NEEDSTRTOUL="#undef ISC_PLATFORM_NEEDSTRTOUL"
1698	 LWRES_PLATFORM_NEEDSTRTOUL="#undef LWRES_PLATFORM_NEEDSTRTOUL"
1699	 GENRANDOMLIB=""],
1700	[ISC_PLATFORM_NEEDSTRTOUL="#define ISC_PLATFORM_NEEDSTRTOUL 1"
1701	 LWRES_PLATFORM_NEEDSTRTOUL="#define LWRES_PLATFORM_NEEDSTRTOUL 1"
1702	 GENRANDOMLIB='${ISCLIBS}'])
1703AC_SUBST(ISC_PLATFORM_NEEDSTRTOUL)
1704AC_SUBST(LWRES_PLATFORM_NEEDSTRTOUL)
1705AC_SUBST(GENRANDOMLIB)
1706
1707AC_CHECK_FUNC(strlcpy,
1708	[ISC_PLATFORM_NEEDSTRLCPY="#undef ISC_PLATFORM_NEEDSTRLCPY"],
1709	[ISC_PLATFORM_NEEDSTRLCPY="#define ISC_PLATFORM_NEEDSTRLCPY 1"])
1710AC_SUBST(ISC_PLATFORM_NEEDSTRLCPY)
1711
1712AC_CHECK_FUNC(strlcat,
1713	[ISC_PLATFORM_NEEDSTRLCAT="#undef ISC_PLATFORM_NEEDSTRLCAT"],
1714	[ISC_PLATFORM_NEEDSTRLCAT="#define ISC_PLATFORM_NEEDSTRLCAT 1"])
1715AC_SUBST(ISC_PLATFORM_NEEDSTRLCAT)
1716
1717ISC_PRINT_OBJS=
1718ISC_PRINT_SRCS=
1719AC_MSG_CHECKING(sprintf)
1720AC_TRY_COMPILE([
1721#include <stdio.h>
1722],
1723[ char buf[2]; return(*sprintf(buf,"x"));],
1724[
1725ISC_PRINT_OBJS="print.$O"
1726ISC_PRINT_SRCS="print.c"
1727ISC_PLATFORM_NEEDSPRINTF="#define ISC_PLATFORM_NEEDSPRINTF"
1728LWRES_PLATFORM_NEEDSPRINTF="#define LWRES_PLATFORM_NEEDSPRINTF"
1729],
1730[ISC_PLATFORM_NEEDSPRINTF="#undef ISC_PLATFORM_NEEDSPRINTF"
1731 LWRES_PLATFORM_NEEDSPRINTF="#undef LWRES_PLATFORM_NEEDSPRINTF"]
1732)
1733AC_SUBST(ISC_PLATFORM_NEEDSPRINTF)
1734AC_SUBST(LWRES_PLATFORM_NEEDSPRINTF)
1735
1736AC_CHECK_FUNC(vsnprintf,
1737	[ISC_PLATFORM_NEEDVSNPRINTF="#undef ISC_PLATFORM_NEEDVSNPRINTF"
1738	 LWRES_PLATFORM_NEEDVSNPRINTF="#undef LWRES_PLATFORM_NEEDVSNPRINTF"],
1739	[ISC_PRINT_OBJS="print.$O"
1740	 ISC_PRINT_SRCS="print.c"
1741	 ISC_PLATFORM_NEEDVSNPRINTF="#define ISC_PLATFORM_NEEDVSNPRINTF 1"
1742	 LWRES_PLATFORM_NEEDVSNPRINTF="#define LWRES_PLATFORM_NEEDVSNPRINTF 1"])
1743AC_SUBST(ISC_PLATFORM_NEEDVSNPRINTF)
1744AC_SUBST(LWRES_PLATFORM_NEEDVSNPRINTF)
1745ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS $ISC_PRINT_OBJS"
1746ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS $ISC_PRINT_SRCS"
1747
1748AC_CHECK_FUNC(strerror, AC_DEFINE(HAVE_STRERROR))
1749
1750AC_SUBST(ISC_EXTRA_OBJS)
1751AC_SUBST(ISC_EXTRA_SRCS)
1752
1753# Determine the printf format characters to use when printing
1754# values of type isc_int64_t. This will normally be "ll", but where
1755# the compiler treats "long long" as a alias for "long" and printf
1756# doesn't know about "long long" use "l".  Hopefully the sprintf
1757# will produce a inconsistant result in the later case.  If the compiler
1758# fails due to seeing "%lld" we fall back to "l".
1759#
1760# Digital Unix 4.0 (gcc?) (long long) is 64 bits as is its long. It uses
1761# %ld even for (long long)/
1762#
1763# Win32 uses "%I64d", but that's defined elsewhere since we don't use
1764# configure on Win32.
1765#
1766AC_MSG_CHECKING(printf format modifier for 64-bit integers)
1767AC_TRY_RUN([
1768#include <stdio.h>
1769main() {
1770	long long int j = 0;
1771	char buf[100];
1772	buf[0] = 0;
1773	sprintf(buf, "%lld", j);
1774	exit((sizeof(long long int) != sizeof(long int))? 0 :
1775	     (strcmp(buf, "0") != 0));
1776} 
1777],
1778	[AC_MSG_RESULT(ll)
1779	ISC_PLATFORM_QUADFORMAT='#define ISC_PLATFORM_QUADFORMAT "ll"'
1780	LWRES_PLATFORM_QUADFORMAT='#define LWRES_PLATFORM_QUADFORMAT "ll"'],
1781	[AC_MSG_RESULT(l)
1782	ISC_PLATFORM_QUADFORMAT='#define ISC_PLATFORM_QUADFORMAT "l"'
1783	LWRES_PLATFORM_QUADFORMAT='#define LWRES_PLATFORM_QUADFORMAT "l"'],
1784	[AC_MSG_RESULT(assuming target platform uses ll)
1785	ISC_PLATFORM_QUADFORMAT='#define ISC_PLATFORM_QUADFORMAT "ll"'
1786	LWRES_PLATFORM_QUADFORMAT='#define LWRES_PLATFORM_QUADFORMAT "ll"'])
1787AC_SUBST(ISC_PLATFORM_QUADFORMAT)
1788AC_SUBST(LWRES_PLATFORM_QUADFORMAT)
1789
1790#
1791# Security Stuff
1792#
1793AC_CHECK_FUNC(chroot, AC_DEFINE(HAVE_CHROOT))
1794AC_ARG_ENABLE(linux-caps,
1795	[  --disable-linux-caps	disable linux capabilities])
1796case "$enable_linux_caps" in
1797	yes|'')
1798		AC_CHECK_HEADERS(linux/capability.h sys/capability.h)
1799		AC_CHECK_FUNCS(capset)
1800		;;
1801	no)
1802		;;
1803esac
1804AC_CHECK_HEADERS(sys/prctl.h)
1805
1806AC_CHECK_HEADERS(sys/un.h,
1807ISC_PLATFORM_HAVESYSUNH="#define ISC_PLATFORM_HAVESYSUNH 1"
1808,
1809ISC_PLATFORM_HAVESYSUNH="#undef ISC_PLATFORM_HAVESYSUNH"
1810)
1811AC_SUBST(ISC_PLATFORM_HAVESYSUNH)
1812
1813case "$host" in
1814*-solaris*)
1815	AC_DEFINE(NEED_SECURE_DIRECTORY, 1,
1816		  [Define if connect does not honour the permission on the UNIX domain socket.])
1817	;;
1818*-sunos*)
1819	AC_DEFINE(NEED_SECURE_DIRECTORY, 1,
1820		  [Define if connect does not honour the permission on the UNIX domain socket.])
1821	;;
1822esac
1823
1824#
1825# Time Zone Stuff
1826#
1827AC_CHECK_FUNC(tzset, AC_DEFINE(HAVE_TZSET))
1828
1829AC_MSG_CHECKING(for optarg decarartion)
1830AC_TRY_COMPILE([
1831#include <unistd.h>
1832],
1833[optarg = 0;],
1834[AC_MSG_RESULT(yes)],
1835[AC_MSG_RESULT(no)
1836GEN_NEED_OPTARG="-DNEED_OPTARG=1"
1837AC_DEFINE(NEED_OPTARG, 1, [Defined if extern char *optarg is not declared.])])
1838
1839#
1840# BSD/OS, and perhaps some others, don't define rlim_t.
1841#
1842AC_MSG_CHECKING(for type rlim_t)
1843AC_TRY_COMPILE([
1844#include <sys/types.h>
1845#include <sys/time.h>
1846#include <sys/resource.h>],
1847[rlim_t rl = 19671212; return (0);],
1848[AC_MSG_RESULT(yes)
1849 ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE rlim_t"],
1850[AC_MSG_RESULT(no)
1851
1852AC_MSG_CHECKING(type of rlim_cur)
1853AC_TRY_RUN([
1854#include <sys/types.h>
1855#include <sys/time.h>
1856#include <sys/resource.h>
1857main() { struct rlimit r; exit(!(sizeof(r.rlim_cur) == sizeof(int)));}],
1858[AC_MSG_RESULT(int)
1859ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE int"],
1860[
1861AC_TRY_RUN([
1862#include <sys/types.h>
1863#include <sys/time.h>
1864#include <sys/resource.h>
1865main() { struct rlimit r; exit(!(sizeof(r.rlim_cur) == sizeof(long int)));}],
1866[AC_MSG_RESULT(long int)
1867ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE long int"],
1868[
1869AC_TRY_RUN([
1870#include <sys/types.h>
1871#include <sys/time.h>
1872#include <sys/resource.h>
1873main() { struct rlimit r; exit((!sizeof(r.rlim_cur) == sizeof(long long int)));}],
1874[AC_MSG_RESULT(long long int)
1875ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE long long int"],
1876[AC_MSG_ERROR([unable to determine sizeof rlim_cur])
1877],[AC_MSG_ERROR(this cannot happen)])
1878],[AC_MSG_ERROR(this cannot happen)])
1879],[
1880ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE long long int"
1881AC_MSG_RESULT(cannot determine type of rlim_cur when cross compiling - assuming long long int)])
1882])
1883AC_SUBST(ISC_PLATFORM_RLIMITTYPE)
1884
1885#
1886# Older HP-UX doesn't have gettune
1887#
1888case "$host" in
1889  	*-hp-hpux*)
1890		AC_CHECK_HEADERS(sys/dyntune.h)
1891		;;
1892	*)
1893		;;
1894esac
1895
1896
1897#
1898# Compaq TruCluster requires more code for handling cluster IP aliases
1899#
1900case "$host" in
1901	*-dec-osf*)
1902		AC_CHECK_LIB(clua, clua_getaliasaddress, LIBS="-lclua $LIBS")
1903		AC_CHECK_FUNC(clua_getaliasaddress,
1904				AC_DEFINE(HAVE_TRUCLUSTER, 1,
1905					[Define if running under Compaq TruCluster]))
1906		;;
1907	*)
1908		;;
1909esac
1910
1911#
1912# Some hosts need msg_namelen to match the size of the socket structure.
1913# Some hosts don't set msg_namelen appropriately on return from recvmsg().
1914#
1915case $host in
1916*os2*|*hp-mpeix*)
1917	AC_DEFINE(BROKEN_RECVMSG, 1,
1918		  [Define if recvmsg() does not meet all of the BSD socket API specifications.])
1919	;;
1920esac
1921
1922#
1923# Microsoft has their own way of handling shared libraries that requires
1924# additional qualifiers on extern variables.  Unix systems don't need it.
1925#
1926AC_SUBST(ISC_PLATFORM_USEDECLSPEC)
1927ISC_PLATFORM_USEDECLSPEC="#undef ISC_PLATFORM_USEDECLSPEC"
1928AC_SUBST(LWRES_PLATFORM_USEDECLSPEC)
1929LWRES_PLATFORM_USEDECLSPEC="#undef LWRES_PLATFORM_USEDECLSPEC"
1930
1931#
1932# Random remaining OS-specific issues involving compiler warnings.
1933# XXXDCL print messages to indicate some compensation is being done?
1934#
1935AC_SUBST(ISC_PLATFORM_BRACEPTHREADONCEINIT)
1936ISC_PLATFORM_BRACEPTHREADONCEINIT="#undef ISC_PLATFORM_BRACEPTHREADONCEINIT"
1937
1938case "$host" in
1939	*-aix5.[[123]].*)
1940		hack_shutup_pthreadonceinit=yes
1941		;;
1942	*-bsdi3.1*)
1943		hack_shutup_sputaux=yes
1944		;;
1945	*-bsdi4.0*)
1946		hack_shutup_sigwait=yes
1947		hack_shutup_sputaux=yes
1948		;;
1949	[*-bsdi4.[12]*])
1950		hack_shutup_stdargcast=yes
1951		;;
1952	[*-solaris2.[89]])
1953		hack_shutup_pthreadonceinit=yes
1954		;;
1955	*-solaris2.1[[0-9]])
1956		hack_shutup_pthreadonceinit=yes
1957		;;
1958esac
1959
1960case "$hack_shutup_pthreadonceinit" in
1961	yes)
1962		#
1963		# Shut up PTHREAD_ONCE_INIT unbraced initializer warnings.
1964		#
1965		ISC_PLATFORM_BRACEPTHREADONCEINIT="#define ISC_PLATFORM_BRACEPTHREADONCEINIT 1"
1966		;;
1967esac
1968
1969case "$hack_shutup_sigwait" in
1970	yes)
1971		#
1972		# Shut up a -Wmissing-prototypes warning for sigwait().
1973		#
1974		AC_DEFINE(SHUTUP_SIGWAIT)
1975		;;
1976esac
1977
1978case "$hack_shutup_sputaux" in
1979	yes)
1980		#
1981		# Shut up a -Wmissing-prototypes warning from <stdio.h>.
1982		#
1983		AC_DEFINE(SHUTUP_SPUTAUX)
1984		;;
1985esac
1986
1987case "$hack_shutup_stdargcast" in
1988	yes)
1989		#
1990		# Shut up a -Wcast-qual warning from va_start().
1991		#
1992		AC_DEFINE(SHUTUP_STDARG_CAST)
1993		;;
1994esac
1995
1996AC_CHECK_HEADERS(strings.h,
1997  ISC_PLATFORM_HAVESTRINGSH="#define ISC_PLATFORM_HAVESTRINGSH 1"
1998,
1999  ISC_PLATFORM_HAVESTRINGSH="#undef ISC_PLATFORM_HAVESTRINGSH"
2000)
2001AC_SUBST(ISC_PLATFORM_HAVESTRINGSH)
2002
2003#
2004# Check for if_nametoindex() for IPv6 scoped addresses support
2005#
2006AC_CHECK_FUNC(if_nametoindex, ac_cv_have_if_nametoindex=yes,
2007		ac_cv_have_if_nametoindex=no)
2008case $ac_cv_have_if_nametoindex in
2009no)
2010	case "$host" in
2011  	*-hp-hpux*)
2012  		AC_CHECK_LIB(ipv6, if_nametoindex,
2013				ac_cv_have_if_nametoindex=yes
2014				LIBS="-lipv6 $LIBS",)
2015  	;;
2016	esac
2017esac
2018case $ac_cv_have_if_nametoindex in
2019yes)
2020	ISC_PLATFORM_HAVEIFNAMETOINDEX="#define ISC_PLATFORM_HAVEIFNAMETOINDEX 1"
2021	;;
2022*)
2023	ISC_PLATFORM_HAVEIFNAMETOINDEX="#undef ISC_PLATFORM_HAVEIFNAMETOINDEX"
2024	;;
2025esac
2026AC_SUBST(ISC_PLATFORM_HAVEIFNAMETOINDEX)
2027
2028#
2029# Machine architecture dependent features
2030#
2031AC_ARG_ENABLE(atomic,
2032	[  --enable-atomic	enable machine specific atomic operations
2033                        [[default=autodetect]]],
2034			enable_atomic="$enableval",
2035			enable_atomic="autodetect")
2036case "$enable_atomic" in
2037	yes|''|autodetect)
2038		use_atomic=yes
2039		;;
2040	no)
2041		use_atomic=no
2042		arch=noatomic
2043		;;
2044esac
2045
2046ISC_PLATFORM_USEOSFASM="#undef ISC_PLATFORM_USEOSFASM"
2047if test "$use_atomic" = "yes"; then
2048	AC_MSG_CHECKING([architecture type for atomic operations])
2049	have_atomic=yes		# set default
2050	case "$host" in
2051	[i[3456]86-*])
2052		# XXX: some old x86 architectures actually do not support
2053		#      (some of) these operations.  Do we need stricter checks?
2054AC_TRY_RUN([
2055main() {
2056	exit((sizeof(void *) == 8) ? 0 : 1);
2057}
2058],
2059		[arch=x86_64],
2060		[arch=x86_32],
2061	        [arch=x86_32])
2062	;;
2063	x86_64-*)
2064		arch=x86_64
2065	;;
2066	alpha*-*)
2067		arch=alpha
2068	;;
2069	powerpc-*)
2070		arch=powerpc
2071	;;
2072	mips-*|mipsel-*|mips64-*|mips64el-*)
2073		arch=mips
2074	;;
2075	ia64-*)
2076		arch=ia64
2077	;;
2078	*)
2079		have_atomic=no
2080		arch=noatomic
2081	;;
2082	esac
2083	AC_MSG_RESULT($arch)
2084fi
2085
2086if test "$have_atomic" = "yes"; then
2087	AC_MSG_CHECKING([compiler support for inline assembly code])
2088
2089	compiler=generic
2090	# Check whether the compiler supports the assembly syntax we provide.
2091	if test "X$GCC" = "Xyes"; then
2092		# GCC's ASM extension always works
2093		compiler=gcc
2094		if test $arch = "x86_64"; then
2095			# We can share the same code for gcc with x86_32
2096			arch=x86_32
2097		fi
2098		if test $arch = "powerpc"; then
2099			#
2100			# The MacOS (and maybe others) uses "r0" for register
2101			# zero. Under linux/ibm it is "0" for register 0.
2102			# Probe to see if we have a MacOS style assembler.
2103			#
2104			AC_MSG_CHECKING([Checking for MacOS style assembler syntax])
2105			AC_TRY_COMPILE(, [
2106			__asm__ volatile ("li r0, 0x0\n"::);
2107			], [
2108			AC_MSG_RESULT(yes)
2109			compiler="mac"
2110			ISC_PLATFORM_USEMACASM="#define ISC_PLATFORM_USEMACASM 1"
2111			], [AC_MSG_RESULT(no)])
2112		fi
2113	else
2114		case "$host" in
2115		alpha*-dec-osf*)
2116			# Tru64 compiler has its own syntax for inline 
2117			# assembly.
2118			AC_TRY_COMPILE(, [
2119#ifndef __DECC
2120#error "unexpected compiler"
2121#endif
2122				return (0);],
2123				[compiler=osf],)
2124		;;
2125		powerpc-ibm-aix*)
2126			compiler=aix
2127		;;
2128		esac
2129	fi
2130	case "$compiler" in
2131	gcc)
2132		ISC_PLATFORM_USEGCCASM="#define ISC_PLATFORM_USEGCCASM 1"
2133		;;
2134	osf)
2135		ISC_PLATFORM_USEOSFASM="#define ISC_PLATFORM_USEOSFASM 1"
2136		;;
2137	aix)
2138		;;
2139	mac)
2140		;;
2141	*)
2142		# See if the generic __asm function works.  If not,
2143		# we need to disable the atomic operations.
2144		AC_TRY_LINK(, [
2145					__asm("nop")
2146				],
2147		[compiler="standard"
2148		ISC_PLATFORM_USESTDASM="#define ISC_PLATFORM_USESTDASM 1"],
2149		[compiler="not supported (atomic operations disabled)"
2150		have_atomic=no
2151		arch=noatomic ]);
2152		;;
2153	esac
2154
2155	AC_MSG_RESULT($compiler)
2156fi
2157
2158if test "$have_atomic" = "yes"; then
2159	ISC_PLATFORM_HAVEXADD="#define ISC_PLATFORM_HAVEXADD 1"
2160	ISC_PLATFORM_HAVECMPXCHG="#define ISC_PLATFORM_HAVECMPXCHG 1"
2161	ISC_PLATFORM_HAVEATOMICSTORE="#define ISC_PLATFORM_HAVEATOMICSTORE 1"
2162else
2163	ISC_PLATFORM_HAVEXADD="#undef ISC_PLATFORM_HAVEXADD"
2164	ISC_PLATFORM_HAVECMPXCHG="#undef ISC_PLATFORM_HAVECMPXCHG"
2165	ISC_PLATFORM_HAVEATOMICSTORE="#undef ISC_PLATFORM_HAVEATOMICSTORE"
2166fi
2167
2168AC_SUBST(ISC_PLATFORM_HAVEXADD)
2169AC_SUBST(ISC_PLATFORM_HAVECMPXCHG)
2170AC_SUBST(ISC_PLATFORM_HAVEATOMICSTORE)
2171
2172AC_SUBST(ISC_PLATFORM_USEGCCASM)
2173AC_SUBST(ISC_PLATFORM_USEOSFASM)
2174AC_SUBST(ISC_PLATFORM_USESTDASM)
2175AC_SUBST(ISC_PLATFORM_USEMACASM)
2176
2177ISC_ARCH_DIR=$arch
2178AC_SUBST(ISC_ARCH_DIR)
2179
2180#
2181#  The following sets up how non-blocking i/o is established.
2182#  Sunos, cygwin and solaris 2.x (x<5) require special handling.
2183#
2184case "$host" in
2185*-sunos*) AC_DEFINE(PORT_NONBLOCK, O_NDELAY);;
2186*-cygwin*) AC_DEFINE(PORT_NONBLOCK, O_NDELAY);;
2187*-solaris2.[[01234]])
2188	AC_DEFINE(PORT_NONBLOCK, O_NONBLOCK)
2189	AC_DEFINE(USE_FIONBIO_IOCTL, 1,
2190		  [Defined if you need to use ioctl(FIONBIO) instead a fcntl call to make non-blocking.])
2191	;;
2192*) AC_DEFINE(PORT_NONBLOCK, O_NONBLOCK,
2193	     [Sets which flag to pass to open/fcntl to make non-blocking (O_NDELAY/O_NONBLOCK).])
2194	;;
2195esac
2196#
2197# Solaris 2.5.1 and earlier cannot bind() then connect() a TCP socket.
2198# This prevents the source address being set.
2199#
2200case "$host" in
2201*-solaris2.[[012345]]|*-solaris2.5.1)
2202	AC_DEFINE(BROKEN_TCP_BIND_BEFORE_CONNECT, 1,
2203		  [Define if you cannot bind() before connect() for TCP sockets.])
2204	;;
2205esac
2206#
2207# The following sections deal with tools used for formatting
2208# the documentation.  They are all optional, unless you are
2209# a developer editing the documentation source.
2210#
2211
2212#
2213# Look for TeX.
2214#
2215
2216AC_PATH_PROGS(LATEX, latex, latex)
2217AC_SUBST(LATEX)
2218
2219AC_PATH_PROGS(PDFLATEX, pdflatex, pdflatex)
2220AC_SUBST(PDFLATEX)
2221
2222#
2223# Look for w3m
2224#
2225
2226AC_PATH_PROGS(W3M, w3m, w3m)
2227AC_SUBST(W3M)
2228
2229#
2230# Look for xsltproc (libxslt)
2231#
2232
2233AC_PATH_PROG(XSLTPROC, xsltproc, xsltproc)
2234AC_SUBST(XSLTPROC)
2235
2236#
2237# Look for xmllint (libxml2)
2238#
2239
2240AC_PATH_PROG(XMLLINT, xmllint, xmllint)
2241AC_SUBST(XMLLINT)
2242
2243#
2244# Subroutine for searching for an ordinary file (e.g., a stylesheet)
2245# in a number of directories:
2246#
2247#   NOM_PATH_FILE(VARIABLE, FILENAME, DIRECTORIES)
2248#
2249# If the file FILENAME is found in one of the DIRECTORIES, the shell
2250# variable VARIABLE is defined to its absolute pathname.  Otherwise, 
2251# it is set to FILENAME, with no directory prefix (that's not terribly
2252# useful, but looks less confusing in substitutions than leaving it
2253# empty).  The variable VARIABLE will be substituted into output files.
2254# 
2255
2256AC_DEFUN(NOM_PATH_FILE, [
2257$1=""
2258AC_MSG_CHECKING(for $2)
2259for d in $3
2260do
2261	f=$d/$2
2262	if test -f $f
2263	then
2264		$1=$f
2265		AC_MSG_RESULT($f)
2266		break
2267	fi
2268done
2269if test "X[$]$1" = "X"
2270then
2271	AC_MSG_RESULT("not found");
2272	$1=$2
2273fi
2274AC_SUBST($1)
2275])
2276
2277#
2278# Look for Docbook-XSL stylesheets.  Location probably varies by system.
2279# If it's not explicitly specified, guess where it might be found, based on
2280# where SGML stuff lives on some systems (FreeBSD is the only one we're sure
2281# of at the moment).
2282#
2283AC_MSG_CHECKING(for Docbook-XSL path)
2284AC_ARG_WITH(docbook-xsl,
2285[  --with-docbook-xsl=PATH    Specify path for Docbook-XSL stylesheets],
2286   docbook_path="$withval", docbook_path="auto")
2287case "$docbook_path" in
2288auto)
2289	AC_MSG_RESULT(auto)
2290	docbook_xsl_trees="/usr/pkg/share/xsl/docbook /usr/local/share/xsl/docbook /usr/share/xsl/docbook"
2291	;;
2292*)
2293	docbook_xsl_trees="$withval"
2294    	AC_MSG_RESULT($docbook_xsl_trees)
2295	;;
2296esac
2297
2298#
2299# Look for stylesheets we need.
2300#
2301
2302NOM_PATH_FILE(XSLT_DOCBOOK_STYLE_HTML, html/docbook.xsl, $docbook_xsl_trees)
2303NOM_PATH_FILE(XSLT_DOCBOOK_STYLE_XHTML, xhtml/docbook.xsl, $docbook_xsl_trees)
2304NOM_PATH_FILE(XSLT_DOCBOOK_STYLE_MAN, manpages/docbook.xsl, $docbook_xsl_trees)
2305NOM_PATH_FILE(XSLT_DOCBOOK_CHUNK_HTML, html/chunk.xsl, $docbook_xsl_trees)
2306NOM_PATH_FILE(XSLT_DOCBOOK_CHUNK_XHTML, xhtml/chunk.xsl, $docbook_xsl_trees)
2307NOM_PATH_FILE(XSLT_DOCBOOK_CHUNKTOC_HTML, html/chunktoc.xsl, $docbook_xsl_trees)
2308NOM_PATH_FILE(XSLT_DOCBOOK_CHUNKTOC_XHTML, xhtml/chunktoc.xsl, $docbook_xsl_trees)
2309NOM_PATH_FILE(XSLT_DOCBOOK_MAKETOC_HTML, html/maketoc.xsl, $docbook_xsl_trees)
2310NOM_PATH_FILE(XSLT_DOCBOOK_MAKETOC_XHTML, xhtml/maketoc.xsl, $docbook_xsl_trees)
2311
2312#
2313# Same dance for db2latex
2314#
2315# No idea where this lives except on FreeBSD.
2316#
2317
2318db2latex_xsl_trees="/usr/local/share"
2319
2320#
2321# Look for stylesheets we need.
2322#
2323
2324NOM_PATH_FILE(XSLT_DB2LATEX_STYLE, db2latex/xsl/docbook.xsl, $db2latex_xsl_trees)
2325
2326#
2327# Look for "admonition" image directory.  Can't use NOM_PATH_FILE()
2328# because it's a directory, so just do the same things, inline.
2329#
2330
2331AC_MSG_CHECKING(for db2latex/xsl/figures)
2332for d in $db2latex_xsl_trees
2333do
2334	dd=$d/db2latex/xsl/figures
2335	if test -d $dd
2336	then
2337		XSLT_DB2LATEX_ADMONITIONS=$dd
2338		AC_MSG_RESULT($dd)
2339		break
2340	fi
2341done
2342if test "X$XSLT_DB2LATEX_ADMONITIONS" = "X"
2343then
2344	AC_MSG_RESULT(not found)
2345	XSLT_DB2LATEX_ADMONITIONS=db2latex/xsl/figures
2346fi
2347AC_SUBST(XSLT_DB2LATEX_ADMONITIONS)
2348
2349#
2350# IDN support
2351#
2352AC_ARG_WITH(idn,
2353	[  --with-idn[=MPREFIX]   enable IDN support using idnkit [default PREFIX]],
2354	use_idn="$withval", use_idn="no")
2355case "$use_idn" in
2356yes)
2357	if test X$prefix = XNONE ; then
2358		idn_path=/usr/local
2359	else
2360		idn_path=$prefix
2361	fi
2362	;;
2363no)
2364	;;
2365*)
2366	idn_path="$use_idn"
2367	;;
2368esac
2369
2370iconvinc=
2371iconvlib=
2372AC_ARG_WITH(libiconv,
2373	[  --with-libiconv[=IPREFIX]   GNU libiconv are in IPREFIX [default PREFIX]],
2374	use_libiconv="$withval", use_libiconv="no")
2375case "$use_libiconv" in
2376yes)
2377	if test X$prefix = XNONE ; then
2378		iconvlib="-L/usr/local/lib -R/usr/local/lib -liconv"
2379	else
2380		iconvlib="-L$prefix/lib -R$prefix/lib -liconv"
2381	fi
2382	;;
2383no)
2384	iconvlib=
2385	;;
2386*)
2387	iconvlib="-L$use_libiconv/lib -R$use_libiconv/lib -liconv"
2388	;;
2389esac
2390
2391AC_ARG_WITH(iconv,
2392	[  --with-iconv[=LIBSPEC]   specify iconv library [default -liconv]],
2393	iconvlib="$withval")
2394case "$iconvlib" in
2395no)
2396	iconvlib=
2397	;;
2398yes)
2399	iconvlib=-liconv
2400	;;
2401esac
2402
2403AC_ARG_WITH(idnlib,
2404	[  --with-idnlib=ARG    specify libidnkit],
2405	idnlib="$withval", idnlib="no")
2406if test "$idnlib" = yes; then
2407	AC_MSG_ERROR([You must specify ARG for --with-idnlib.])
2408fi
2409
2410IDNLIBS=
2411if test "$use_idn" != no; then
2412	AC_DEFINE(WITH_IDN, 1, [define if idnkit support is to be included.])
2413	STD_CINCLUDES="$STD_CINCLUDES -I$idn_path/include"
2414	if test "$idnlib" != no; then
2415		IDNLIBS="$idnlib $iconvlib"
2416	else
2417		IDNLIBS="-L$idn_path/lib -lidnkit $iconvlib"
2418	fi
2419fi
2420AC_SUBST(IDNLIBS)
2421
2422AC_CHECK_HEADERS(locale.h)
2423AC_CHECK_FUNCS(setlocale)
2424
2425#
2426# Substitutions
2427#
2428AC_SUBST(BIND9_TOP_BUILDDIR)
2429BIND9_TOP_BUILDDIR=`pwd`
2430
2431AC_SUBST(BIND9_ISC_BUILDINCLUDE)
2432AC_SUBST(BIND9_ISCCC_BUILDINCLUDE)
2433AC_SUBST(BIND9_ISCCFG_BUILDINCLUDE)
2434AC_SUBST(BIND9_DNS_BUILDINCLUDE)
2435AC_SUBST(BIND9_LWRES_BUILDINCLUDE)
2436AC_SUBST(BIND9_BIND9_BUILDINCLUDE)
2437if test "X$srcdir" != "X"; then
2438	BIND9_ISC_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/isc/include"
2439	BIND9_ISCCC_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/isccc/include"
2440	BIND9_ISCCFG_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/isccfg/include"
2441	BIND9_DNS_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/dns/include"
2442	BIND9_LWRES_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/lwres/include"
2443	BIND9_BIND9_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/bind9/include"
2444else
2445	BIND9_ISC_BUILDINCLUDE=""
2446	BIND9_ISCCC_BUILDINCLUDE=""
2447	BIND9_ISCCFG_BUILDINCLUDE=""
2448	BIND9_DNS_BUILDINCLUDE=""
2449	BIND9_LWRES_BUILDINCLUDE=""
2450	BIND9_BIND9_BUILDINCLUDE=""
2451fi
2452
2453AC_SUBST_FILE(BIND9_MAKE_INCLUDES)
2454BIND9_MAKE_INCLUDES=$BIND9_TOP_BUILDDIR/make/includes
2455
2456AC_SUBST_FILE(BIND9_MAKE_RULES)
2457BIND9_MAKE_RULES=$BIND9_TOP_BUILDDIR/make/rules
2458
2459. $srcdir/version
2460BIND9_VERSION="VERSION=${MAJORVER}.${MINORVER}.${PATCHVER}${RELEASETYPE}${RELEASEVER}"
2461AC_SUBST(BIND9_VERSION)
2462
2463AC_SUBST_FILE(LIBISC_API)
2464LIBISC_API=$srcdir/lib/isc/api
2465
2466AC_SUBST_FILE(LIBISCCC_API)
2467LIBISCCC_API=$srcdir/lib/isccc/api
2468
2469AC_SUBST_FILE(LIBISCCFG_API)
2470LIBISCCFG_API=$srcdir/lib/isccfg/api
2471
2472AC_SUBST_FILE(LIBDNS_API)
2473LIBDNS_API=$srcdir/lib/dns/api
2474
2475AC_SUBST_FILE(LIBBIND9_API)
2476LIBBIND9_API=$srcdir/lib/bind9/api
2477
2478AC_SUBST_FILE(LIBLWRES_API)
2479LIBLWRES_API=$srcdir/lib/lwres/api
2480
2481#
2482# Configure any DLZ drivers.
2483#
2484# If config.dlz.in selects one or more DLZ drivers, it will set
2485# USE_DLZ to a non-empty value, which will be our clue to
2486# enable the DLZ core functions.
2487#
2488# This section has to come after the libtool stuff because it needs to
2489# know how to name the driver object files.
2490#
2491
2492USE_DLZ=""
2493DLZ_DRIVER_INCLUDES=""
2494DLZ_DRIVER_LIBS=""
2495DLZ_DRIVER_SRCS=""
2496DLZ_DRIVER_OBJS=""
2497
2498sinclude(contrib/dlz/config.dlz.in)
2499
2500AC_MSG_CHECKING(for DLZ)
2501
2502if test -n "$USE_DLZ"
2503then
2504	AC_MSG_RESULT(yes)
2505	USE_DLZ="-DDLZ $USE_DLZ"
2506	DLZ_DRIVER_RULES=contrib/dlz/drivers/rules
2507	AC_CONFIG_FILES([$DLZ_DRIVER_RULES])
2508else
2509	AC_MSG_RESULT(no)
2510	DLZ_DRIVER_RULES=/dev/null
2511fi
2512
2513AC_SUBST(USE_DLZ)
2514AC_SUBST(DLZ_DRIVER_INCLUDES)
2515AC_SUBST(DLZ_DRIVER_LIBS)
2516AC_SUBST(DLZ_DRIVER_SRCS)
2517AC_SUBST(DLZ_DRIVER_OBJS)
2518AC_SUBST_FILE(DLZ_DRIVER_RULES)
2519
2520if test "$cross_compiling" = "yes"; then
2521	if test -z "$BUILD_CC"; then
2522		AC_ERROR([BUILD_CC not set])
2523	fi
2524	BUILD_CFLAGS="$BUILD_CFLAGS"
2525	BUILD_CPPFLAGS="$BUILD_CPPFLAGS"
2526	BUILD_LDFLAGS="$BUILD_LDFLAGS"
2527	BUILD_LIBS="$BUILD_LIBS"
2528else
2529	BUILD_CC="$CC" 
2530	BUILD_CFLAGS="$CFLAGS" 
2531	BUILD_CPPFLAGS="$CPPFLAGS $GEN_NEED_OPTARG"
2532	BUILD_LDFLAGS="$LDFLAGS"
2533	BUILD_LIBS="$LIBS"
2534fi
2535
2536AC_SUBST(BUILD_CC)
2537AC_SUBST(BUILD_CFLAGS)
2538AC_SUBST(BUILD_CPPFLAGS)
2539AC_SUBST(BUILD_LDFLAGS)
2540AC_SUBST(BUILD_LIBS)
2541
2542#
2543# Commands to run at the end of config.status.
2544# Don't just put these into configure, it won't work right if somebody
2545# runs config.status directly (which autoconf allows).
2546#
2547
2548AC_CONFIG_COMMANDS(
2549	[chmod],
2550	[chmod a+x isc-config.sh])
2551
2552#
2553# Files to configure.  These are listed here because we used to
2554# specify them as arguments to AC_OUTPUT.  It's (now) ok to move these
2555# elsewhere if there's a good reason for doing so.
2556#
2557
2558AC_CONFIG_FILES([
2559	Makefile
2560	make/Makefile
2561	make/mkdep
2562	lib/Makefile
2563	lib/isc/Makefile
2564	lib/isc/include/Makefile
2565	lib/isc/include/isc/Makefile
2566	lib/isc/include/isc/platform.h
2567	lib/isc/unix/Makefile
2568	lib/isc/unix/include/Makefile
2569	lib/isc/unix/include/isc/Makefile
2570	lib/isc/nls/Makefile
2571	lib/isc/$thread_dir/Makefile
2572	lib/isc/$thread_dir/include/Makefile
2573	lib/isc/$thread_dir/include/isc/Makefile
2574	lib/isc/$arch/Makefile
2575	lib/isc/$arch/include/Makefile
2576	lib/isc/$arch/include/isc/Makefile
2577	lib/isccc/Makefile
2578	lib/isccc/include/Makefile
2579	lib/isccc/include/isccc/Makefile
2580	lib/isccfg/Makefile
2581	lib/isccfg/include/Makefile
2582	lib/isccfg/include/isccfg/Makefile
2583	lib/dns/Makefile
2584	lib/dns/include/Makefile
2585	lib/dns/include/dns/Makefile
2586	lib/dns/include/dst/Makefile
2587	lib/bind9/Makefile
2588	lib/bind9/include/Makefile
2589	lib/bind9/include/bind9/Makefile
2590	lib/lwres/Makefile
2591	lib/lwres/include/Makefile
2592	lib/lwres/include/lwres/Makefile
2593	lib/lwres/include/lwres/netdb.h
2594	lib/lwres/include/lwres/platform.h
2595	lib/lwres/man/Makefile
2596	lib/lwres/unix/Makefile
2597	lib/lwres/unix/include/Makefile
2598	lib/lwres/unix/include/lwres/Makefile
2599	lib/tests/Makefile
2600	lib/tests/include/Makefile
2601	lib/tests/include/tests/Makefile
2602	bin/Makefile
2603	bin/check/Makefile
2604	bin/named/Makefile
2605	bin/named/unix/Makefile
2606	bin/rndc/Makefile
2607	bin/rndc/unix/Makefile
2608	bin/dig/Makefile
2609	bin/nsupdate/Makefile
2610	bin/tests/Makefile
2611	bin/tests/names/Makefile
2612	bin/tests/master/Makefile
2613	bin/tests/rbt/Makefile
2614	bin/tests/db/Makefile
2615	bin/tests/tasks/Makefile
2616	bin/tests/timers/Makefile
2617	bin/tests/dst/Makefile
2618	bin/tests/mem/Makefile
2619	bin/tests/net/Makefile
2620	bin/tests/sockaddr/Makefile
2621	bin/tests/system/Makefile
2622	bin/tests/system/conf.sh
2623	bin/tests/system/lwresd/Makefile
2624	bin/tests/system/tkey/Makefile
2625	bin/tests/headerdep_test.sh
2626	bin/dnssec/Makefile
2627	doc/Makefile
2628	doc/arm/Makefile
2629	doc/misc/Makefile
2630	isc-config.sh
2631	doc/xsl/Makefile
2632	doc/xsl/isc-docbook-chunk.xsl
2633	doc/xsl/isc-docbook-html.xsl
2634	doc/xsl/isc-docbook-latex.xsl
2635	doc/xsl/isc-manpage.xsl
2636])
2637
2638#
2639# Do it
2640#
2641
2642AC_OUTPUT
2643
2644if test "X$OPENSSL_WARNING" != "X"; then
2645cat << \EOF
2646WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
2647WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
2648WARNING                                                                 WARNING
2649WARNING         Your OpenSSL crypto library may be vulnerable to        WARNING
2650WARNING         one or more of the the following known security         WARNING
2651WARNING         flaws:                                                  WARNING
2652WARNING                                                                 WARNING
2653WARNING         CAN-2002-0659, CAN-2006-4339, CVE-2006-2937 and         WARNING
2654WARNING         CVE-2006-2940.                                          WARNING
2655WARNING                                                                 WARNING
2656WARNING         It is recommended that you upgrade to OpenSSL           WARNING
2657WARNING         version 0.9.8d/0.9.7l (or greater).                     WARNING
2658WARNING                                                                 WARNING
2659WARNING         You can disable this warning by specifying:             WARNING
2660WARNING                                                                 WARNING
2661WARNING               --disable-openssl-version-check          	        WARNING
2662WARNING                                                                 WARNING
2663WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
2664WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
2665EOF
2666fi
2667
2668# Tell Emacs to edit this file in shell mode.
2669# Local Variables:
2670# mode: sh
2671# End:
2672