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