]> CyberLeo.Net >> Repos - FreeBSD/stable/9.git/blob - contrib/bind9/configure.in
MFC r322530 and r323220:
[FreeBSD/stable/9.git] / contrib / bind9 / configure.in
1 # Copyright (C) 2004-2016  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
16 dnl
17 AC_DIVERT_PUSH(1)dnl
18 esyscmd([sed -e 's/^/# /' -e '/Portions of this code/,$d' COPYRIGHT])dnl
19 AC_DIVERT_POP()dnl
20
21 AC_INIT(BIND, [9.9], [bind9-bugs@isc.org], [], [https://www.isc.org/downloads/BIND/])
22 AC_PREREQ(2.59)
23
24 AC_CONFIG_HEADER(config.h)
25 AC_CONFIG_MACRO_DIR([libtool.m4])
26
27 AC_CANONICAL_HOST
28
29 AC_PROG_MAKE_SET
30
31 #
32 # GNU libtool support
33 #
34 case $build_os in
35 sunos*)
36     # Just set the maximum command line length for sunos as it otherwise
37     # takes a exceptionally long time to work it out. Required for libtool.
38
39     lt_cv_sys_max_cmd_len=4096;
40     ;;
41 esac
42
43 AC_PROG_LIBTOOL
44 AC_PROG_INSTALL
45 AC_PROG_LN_S
46
47 AC_SUBST(STD_CINCLUDES)
48 AC_SUBST(STD_CDEFINES)
49 AC_SUBST(STD_CWARNINGS)
50 AC_SUBST(CCOPT)
51 AC_SUBST(CCNOOPT)
52 AC_SUBST(BACKTRACECFLAGS)
53
54 # Warn if the user specified libbind, which is now deprecated
55 AC_ARG_ENABLE(libbind, [  --enable-libbind        deprecated])
56
57 case "$enable_libbind" in
58         yes)
59                 AC_MSG_ERROR(['libbind' is no longer part of the BIND 9 distribution.
60 It is available from http://www.isc.org as a separate download.])
61                 ;;
62         no|'')
63                 ;;
64 esac
65
66 AC_ARG_ENABLE(warn_shadow, [  --enable-warn-shadow        turn on -Wshadow when compiling])
67
68 AC_ARG_ENABLE(warn_error, [  --enable-warn-error          turn on -Werror when compiling])
69
70 AC_ARG_ENABLE(developer, [  --enable-developer      enable developer build settings])
71 case "$enable_developer" in
72 yes)
73         STD_CDEFINES="$STD_CDEFINES -DISC_LIST_CHECKINIT=1"
74         test "${enable_fixed_rrset+set}" = set || enable_fixed_rrset=yes
75         test "${enable_querytrace+set}" = set || enable_querytrace=yes
76         test "${with_atf+set}" = set || with_atf=yes
77         test "${enable_filter_aaaa+set}" = set || enable_filter_aaaa=yes
78         test "${enable_rrl+set}" = set || enable_rrl=yes
79         test "${with_dlz_filesystem+set}" = set || with_dlz_filesystem=yes
80         case "$host" in
81         *-darwin*)
82                 test "${enable_exportlib+set}" = set || enable_exportlib=yes
83                 ;;
84         *-linux*)
85                 test "${enable_exportlib+set}" = set || enable_exportlib=yes
86                 ;;
87         esac
88         test "${enable_symtable+set}" = set || enable_symtable=all
89         test "${enable_fetchlimit+set}" = set || enable_fetchlimit=yes
90         test "${enable_warn_error+set}" = set || enable_warn_error=yes
91         test "${enable_warn_shadow+set}" = set || enable_warn_shadow=yes
92         ;;
93 esac
94 #
95 # Make very sure that these are the first files processed by
96 # config.status, since we use the processed output as the input for
97 # AC_SUBST_FILE() substitutions in other files.
98 #
99 AC_CONFIG_FILES([make/rules make/includes])
100
101 AC_PATH_PROG(AR, ar)
102 ARFLAGS="cruv"
103 AC_SUBST(AR)
104 AC_SUBST(ARFLAGS)
105
106 # The POSIX ln(1) program.  Non-POSIX systems may substitute
107 # "copy" or something.
108 LN=ln
109 AC_SUBST(LN)
110
111 case "$AR" in
112         "")
113                 AC_MSG_ERROR([
114 ar program not found.  Please fix your PATH to include the directory in
115 which ar resides, or set AR in the environment with the full path to ar.
116 ])
117
118                 ;;
119 esac
120
121 #
122 # Etags.
123 #
124 AC_PATH_PROGS(ETAGS, etags emacs-etags)
125
126 #
127 # Some systems, e.g. RH7, have the Exuberant Ctags etags instead of
128 # GNU emacs etags, and it requires the -L flag.
129 #
130 if test "X$ETAGS" != "X"; then
131         AC_MSG_CHECKING(for Exuberant Ctags etags)
132         if $ETAGS --version 2>&1 | grep 'Exuberant Ctags' >/dev/null 2>&1; then
133                 AC_MSG_RESULT(yes)
134                 ETAGS="$ETAGS -L"
135         else
136                 AC_MSG_RESULT(no)
137         fi
138 fi
139 AC_SUBST(ETAGS)
140
141 #
142 # Perl is optional; it is used only by some of the system test scripts.
143 # Note: the backtrace feature (see below) uses perl to build the symbol table,
144 # but it still compiles without perl, in which case an empty table will be used.
145 #
146 AC_PATH_PROGS(PERL, perl5 perl)
147 AC_SUBST(PERL)
148
149 #
150 # Python is also optional; it is used by the tools in bin/python.
151 # If python is unavailable, we simply don't build those.
152 #
153 AC_ARG_WITH(python,
154 [  --with-python=PATH      Specify path to python interpreter],
155     use_python="$withval", use_python="unspec")
156
157 python="python python3 python3.4 python3.3 python3.2 python3.1 python3.0 python2 python2.7 python2.6 python2.5 python2.4"
158 testscript='try: import argparse
159 except: exit(1)'
160 case "$use_python" in
161         no)
162                 AC_MSG_CHECKING([for python support])
163                 AC_MSG_RESULT(disabled)
164                 ;;
165         unspec|yes|*)
166                 case "$use_python" in
167                 unspec|yes|'')
168                         for p in $python
169                         do
170                                 AC_PATH_PROGS(PYTHON, $p)
171                                 if test "X$PYTHON" = "X"; then
172                                         continue;
173                                 fi
174                                 AC_MSG_CHECKING([python module 'argparse'])
175                                 if ${PYTHON:-false} -c "$testscript"; then
176                                         AC_MSG_RESULT([found, using $PYTHON])
177                                         break
178                                 fi
179                                 AC_MSG_RESULT([not found])
180                                 unset ac_cv_path_PYTHON
181                                 unset PYTHON
182                         done
183                         if test "X$PYTHON" = "X"
184                         then
185                                 AC_MSG_CHECKING([for python support])
186                                 case "$use_python" in
187                                 unspec)
188                                         AC_MSG_RESULT(disabled)
189                                         ;;
190                                 yes)
191                                         AC_MSG_ERROR([missing python])
192                                         ;;
193                                 esac
194                         fi
195                         ;;
196                 *)
197                         case "$use_python" in
198                         /*)
199                                 PYTHON="$use_python"
200                                 ;;
201                         *)
202                                 AC_PATH_PROGS(PYTHON, $use_python)
203                                 ;;
204                         esac
205                         AC_MSG_CHECKING([python module 'argparse'])
206                         if ${PYTHON:-false} -c "$testscript"; then
207                                 AC_MSG_RESULT([found, using $PYTHON])
208                                 break
209                         else
210                                 AC_MSG_ERROR([not found])
211                         fi
212                         ;;
213                 esac
214                 ;;
215 esac
216
217 PYTHON_TOOLS=''
218 CHECKDS=''
219 COVERAGE=''
220 if test "X$PYTHON" != "X"; then
221         PYTHON_TOOLS=python
222         CHECKDS=checkds
223         COVERAGE=coverage
224 fi
225 AC_SUBST(CHECKDS)
226 AC_SUBST(COVERAGE)
227 AC_SUBST(PYTHON_TOOLS)
228
229 #
230 # Special processing of paths depending on whether --prefix,
231 # --sysconfdir or --localstatedir arguments were given.  What's
232 # desired is some compatibility with the way previous versions
233 # of BIND built; they defaulted to /usr/local for most parts of
234 # the installation, but named.boot/named.conf was in /etc
235 # and named.pid was in /var/run.
236 #
237 # So ... if none of --prefix, --sysconfdir or --localstatedir are
238 # specified, set things up that way.  If --prefix is given, use
239 # it for sysconfdir and localstatedir the way configure normally
240 # would.  To change the prefix for everything but leave named.conf
241 # in /etc or named.pid in /var/run, then do this the usual configure way:
242 # ./configure --prefix=/somewhere --sysconfdir=/etc
243 # ./configure --prefix=/somewhere --localstatedir=/var
244 #
245 # To put named.conf and named.pid in /usr/local with everything else,
246 # set the prefix explicitly to /usr/local even though that's the default:
247 # ./configure --prefix=/usr/local
248 #
249 case "$prefix" in
250         NONE)
251                 case "$sysconfdir" in
252                         '${prefix}/etc')
253                                 sysconfdir=/etc
254                                 ;;
255                 esac
256                 case "$localstatedir" in
257                         '${prefix}/var')
258                                 localstatedir=/var
259                                 ;;
260                 esac
261                 ;;
262 esac
263
264 #
265 # Make sure INSTALL uses an absolute path, else it will be wrong in all
266 # Makefiles, since they use make/rules.in and INSTALL will be adjusted by
267 # configure based on the location of the file where it is substituted.
268 # Since in BIND9 INSTALL is only substituted into make/rules.in, an immediate
269 # subdirectory of install-sh, This relative path will be wrong for all
270 # directories more than one level down from install-sh.
271 #
272 case "$INSTALL" in
273         /*)
274                 ;;
275         *)
276                 #
277                 # Not all systems have dirname.
278                 #
279                 changequote({, })
280                 ac_dir="`echo $INSTALL | sed 's%/[^/]*$%%'`"
281                 changequote([, ])
282
283                 ac_prog="`echo $INSTALL | sed 's%.*/%%'`"
284                 test "$ac_dir" = "$ac_prog" && ac_dir=.
285                 test -d "$ac_dir" && ac_dir="`(cd \"$ac_dir\" && pwd)`"
286                 INSTALL="$ac_dir/$ac_prog"
287                 ;;
288 esac
289
290 #
291 # On these hosts, we really want to use cc, not gcc, even if it is
292 # found.  The gcc that these systems have will not correctly handle
293 # pthreads.
294 #
295 # However, if the user sets $CC to be something, let that override
296 # our change.
297 #
298 if test "X$CC" = "X" ; then
299         case "$host" in
300                 *-dec-osf*)
301                         CC="cc"
302                         ;;
303                 *-solaris*)
304                         # Use Sun's cc if it is available, but watch
305                         # out for /usr/ucb/cc; it will never be the right
306                         # compiler to use.
307                         #
308                         # If setting CC here fails, the AC_PROG_CC done
309                         # below might still find gcc.
310                         IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS=":"
311                         for ac_dir in $PATH; do
312                                 test -z "$ac_dir" && ac_dir=.
313                                 case "$ac_dir" in
314                                 /usr/ucb)
315                                         # exclude
316                                         ;;
317                                 *)
318                                         if test -f "$ac_dir/cc"; then
319                                                 CC="$ac_dir/cc"
320                                                 break
321                                         fi
322                                         ;;
323                                 esac
324                         done
325                         IFS="$ac_save_ifs"
326                         ;;
327                 *-hp-hpux*)
328                         CC="cc"
329                         ;;
330                 mips-sgi-irix*)
331                         CC="cc"
332                         ;;
333         esac
334 fi
335
336 AC_PROG_CC
337
338 #
339 # gcc's optimiser is broken at -02 for ultrasparc
340 #
341 if test "$ac_env_CFLAGS_set" != set -a "X$GCC" = "Xyes"; then
342         case "$host" in
343         sparc-*)
344                 CCFLAGS="-g -O1"
345                 ;;
346         esac
347 fi
348
349 #
350 # OS dependent CC flags
351 #
352 case "$host" in
353         # OSF 5.0: recv/send are only available with -D_POSIX_PII_SOCKET or
354         # -D_XOPEN_SOURCE_EXTENDED.
355         *-dec-osf*)
356                 STD_CDEFINES="$STD_CDEFINES -D_POSIX_PII_SOCKET"
357                 CPPFLAGS="$CPPFLAGS -D_POSIX_PII_SOCKET"
358                 ;;
359         #HP-UX: need -D_XOPEN_SOURCE_EXTENDED and -lxnet for CMSG macros
360         *-hp-hpux*)
361                 STD_CDEFINES="$STD_CDEFINES -D_XOPEN_SOURCE_EXTENDED"
362                 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED"
363                 LIBS="-lxnet $LIBS"
364                 ;;
365         # Solaris: need -D_XPG4_2 and -D__EXTENSIONS__ for CMSG macros
366         *-solaris*)
367                 STD_CDEFINES="$STD_CDEFINES -D_XPG4_2 -D__EXTENSIONS__"
368                 CPPFLAGS="$CPPFLAGS -D_XPG4_2 -D__EXTENSIONS__"
369                 ;;
370         # POSIX doesn't include the IPv6 Advanced Socket API and glibc hides
371         # parts of the IPv6 Advanced Socket API as a result.  This is stupid
372         # as it breaks how the two halves (Basic and Advanced) of the IPv6
373         # Socket API were designed to be used but we have to live with it.
374         # Define _GNU_SOURCE to pull in the IPv6 Advanced Socket API.
375         *-linux* | *-kfreebsd*-gnu*)
376                 STD_CDEFINES="$STD_CDEFINES -D_GNU_SOURCE"
377                 CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
378                 ;;
379         #
380         # Starting with OSX 10.7 (Lion) we must choose which IPv6 API to use.
381         # Setting this is sufficient to select the correct behavior for BIND 9.
382         #
383         *-darwin*)
384           STD_CDEFINES="$STD_CDEFINES -D__APPLE_USE_RFC_3542"
385           CPPFLAGS="$CPPFLAGS -D__APPLE_USE_RFC_3542"
386           ;;
387 esac
388
389 #
390 # CCNOOPT defaults to -O0 on gcc and disables optimization when is last
391 #
392 if test "X$CCNOOPT" = "X" -a "X$GCC" = "Xyes"; then
393         CCNOOPT="-O0"
394 fi
395
396 AC_HEADER_STDC
397
398 AC_CHECK_HEADERS(fcntl.h regex.h sys/time.h unistd.h sys/sockio.h sys/select.h sys/param.h sys/sysctl.h net/if6.h,,,
399 [$ac_includes_default
400 #ifdef HAVE_SYS_PARAM_H
401 # include <sys/param.h>
402 #endif
403 ])
404
405 AC_C_CONST
406 AC_C_INLINE
407 AC_C_VOLATILE
408 AC_CHECK_FUNC(sysctlbyname, AC_DEFINE(HAVE_SYSCTLBYNAME))
409 AC_C_FLEXIBLE_ARRAY_MEMBER
410
411 #
412 # Older versions of HP/UX don't define seteuid() and setegid()
413 #
414 AC_CHECK_FUNCS(seteuid setresuid)
415 AC_CHECK_FUNCS(setegid setresgid)
416
417 # BSDI doesn't have ftello fseeko
418 AC_CHECK_FUNCS(ftello fseeko)
419
420 #
421 # UnixWare 7.1.1 with the feature supplement to the UDK compiler
422 # is reported to not support "static inline" (RT #1212).
423 #
424 AC_MSG_CHECKING(for static inline breakage)
425 AC_TRY_COMPILE([
426         static inline int foo1() {
427                 return 0;
428         }
429
430         static inline int foo2() {
431                 return foo1();
432         }
433         ], [foo1();],
434         [AC_MSG_RESULT(no)],
435         [AC_MSG_RESULT(yes)
436          AC_DEFINE(inline, ,[Define to empty if your compiler does not support "static inline".])])
437
438 AC_TYPE_SIZE_T
439 AC_CHECK_TYPE(ssize_t, int)
440 AC_CHECK_TYPE(uintptr_t,unsigned long)
441 AC_CHECK_TYPE(socklen_t,
442 [AC_DEFINE(ISC_SOCKADDR_LEN_T, socklen_t)],
443 [
444 AC_TRY_COMPILE(
445 [
446 #include <sys/types.h>
447 #include <sys/socket.h>
448 int getsockname(int, struct sockaddr *, size_t *);
449 ],[],
450 [AC_DEFINE(ISC_SOCKADDR_LEN_T, size_t)],
451 [AC_DEFINE(ISC_SOCKADDR_LEN_T, int)])
452 ],
453 [
454 #include <sys/types.h>
455 #include <sys/socket.h>
456 ])
457 AC_SUBST(ISC_SOCKADDR_LEN_T)
458 AC_HEADER_TIME
459 AC_MSG_CHECKING(for long long)
460 AC_TRY_COMPILE([],[long long i = 0; return (0);],
461         [AC_MSG_RESULT(yes)
462                 ISC_PLATFORM_HAVELONGLONG="#define ISC_PLATFORM_HAVELONGLONG 1"],
463         [AC_MSG_RESULT(no)
464                 ISC_PLATFORM_HAVELONGLONG="#undef ISC_PLATFORM_HAVELONGLONG"])
465 AC_SUBST(ISC_PLATFORM_HAVELONGLONG)
466
467 #
468 # check for uname library routine
469 #
470 AC_MSG_CHECKING(for uname)
471 AC_TRY_COMPILE([
472 #include <sys/utsname.h>
473 #include <stdio.h>
474 ],
475 [
476 struct utsname uts;
477 uname(&uts);
478 printf("running on %s %s %s for %s\n",
479        uts.sysname, uts.release, uts.version, uts.machine);
480 ],
481         [AC_MSG_RESULT(yes)
482          AC_DEFINE(HAVE_UNAME)],
483         [AC_MSG_RESULT(no)
484          AC_MSG_WARN([uname is not correctly supported])])
485
486 #
487 # check for GCC noreturn attribute
488 #
489 AC_MSG_CHECKING(for GCC noreturn attribute)
490 AC_TRY_COMPILE([],[void foo() __attribute__((noreturn));],
491         [AC_MSG_RESULT(yes)
492                 ISC_PLATFORM_NORETURN_PRE="#define ISC_PLATFORM_NORETURN_PRE"
493                 ISC_PLATFORM_NORETURN_POST="#define ISC_PLATFORM_NORETURN_POST __attribute__((noreturn))"],
494         [AC_MSG_RESULT(no)
495                 ISC_PLATFORM_NORETURN_PRE="#define ISC_PLATFORM_NORETURN_PRE"
496                 ISC_PLATFORM_NORETURN_POST="#define ISC_PLATFORM_NORETURN_POST"])
497 AC_SUBST(ISC_PLATFORM_NORETURN_PRE)
498 AC_SUBST(ISC_PLATFORM_NORETURN_POST)
499
500 #
501 # check if we have lifconf
502 #
503 AC_MSG_CHECKING(for struct lifconf)
504 AC_TRY_COMPILE([
505 #include <sys/types.h>
506 #include <sys/socket.h>
507 #include <net/if.h>
508 ],
509 [
510 struct lifconf lifconf;
511 lifconf.lifc_len = 0;
512 ]
513 ,
514         [AC_MSG_RESULT(yes)
515                 ISC_PLATFORM_HAVELIFCONF="#define ISC_PLATFORM_HAVELIFCONF 1"],
516         [AC_MSG_RESULT(no)
517                 ISC_PLATFORM_HAVELIFCONF="#undef ISC_PLATFORM_HAVELIFCONF"])
518 AC_SUBST(ISC_PLATFORM_HAVELIFCONF)
519
520 #
521 # check if we want the new statistics
522 #
523 AC_ARG_ENABLE(newstats,
524         [  --enable-newstats       use the new statistics])
525 case "$enable_newstats" in
526 yes)
527         AC_DEFINE(NEWSTATS, 1, [Use the new XML schema for statistics])
528         ;;
529 *)
530         ;;
531 esac
532
533 #
534 # check if we want DNS RRL
535 #
536 AC_ARG_ENABLE(rrl,
537         [  --enable-rrl            use DNS Response Rate Limiting])
538 case "$enable_rrl" in
539 yes)
540         AC_DEFINE(USE_RRL, 1, [Enable DNS Response Rate Limiting])
541         RRLLINKOBJS='${RRLOBJS}'
542         RRLLINKSRCS='${RRLSRCS}'
543         ;;
544 *)
545         RRLLINKOBJS=""
546         RRLLINKSRCS=""
547         ;;
548 esac
549 AC_SUBST(RRLLINKOBJS)
550 AC_SUBST(RRLLINKSRCS)
551
552 #
553 # check if we have kqueue
554 #
555 AC_ARG_ENABLE(kqueue,
556         [  --enable-kqueue         use BSD kqueue when available [[default=yes]]],
557               want_kqueue="$enableval",  want_kqueue="yes")
558 case $want_kqueue in
559 yes)
560         AC_CHECK_FUNC(kqueue, ac_cv_have_kqueue=yes, ac_cv_have_kqueue=no)
561         case $ac_cv_have_kqueue in
562         yes)
563                 ISC_PLATFORM_HAVEKQUEUE="#define ISC_PLATFORM_HAVEKQUEUE 1"
564                 ;;
565         *)
566                 ISC_PLATFORM_HAVEKQUEUE="#undef ISC_PLATFORM_HAVEKQUEUE"
567                 ;;
568         esac
569         ;;
570 *)
571         ISC_PLATFORM_HAVEKQUEUE="#undef ISC_PLATFORM_HAVEKQUEUE"
572         ;;
573 esac
574 AC_SUBST(ISC_PLATFORM_HAVEKQUEUE)
575
576 #
577 # check if we have epoll.  Linux kernel 2.4 has epoll_create() which fails,
578 # so we need to try running the code, not just test its existence.
579 #
580 AC_ARG_ENABLE(epoll,
581 [  --enable-epoll          use Linux epoll when available [[default=auto]]],
582               want_epoll="$enableval",  want_epoll="auto")
583 case $want_epoll in
584 auto)
585         AC_MSG_CHECKING(epoll support)
586         AC_TRY_RUN([
587 #include <sys/epoll.h>
588 int main() {
589         if (epoll_create(1) < 0)
590                 return (1);
591         return (0);
592 }
593 ],
594         [AC_MSG_RESULT(yes)
595         ISC_PLATFORM_HAVEEPOLL="#define ISC_PLATFORM_HAVEEPOLL 1"],
596         [AC_MSG_RESULT(no)
597         ISC_PLATFORM_HAVEEPOLL="#undef ISC_PLATFORM_HAVEEPOLL"],
598         [AC_MSG_RESULT(no)
599         ISC_PLATFORM_HAVEEPOLL="#undef ISC_PLATFORM_HAVEEPOLL"])
600         ;;
601 yes)
602         ISC_PLATFORM_HAVEEPOLL="#define ISC_PLATFORM_HAVEEPOLL 1"
603         ;;
604 *)
605         ISC_PLATFORM_HAVEEPOLL="#undef ISC_PLATFORM_HAVEEPOLL"
606         ;;
607 esac
608 AC_SUBST(ISC_PLATFORM_HAVEEPOLL)
609
610 #
611 # check if we support /dev/poll
612 #
613 AC_ARG_ENABLE(devpoll,
614         [  --enable-devpoll        use /dev/poll when available [[default=yes]]],
615               want_devpoll="$enableval",  want_devpoll="yes")
616 case $want_devpoll in
617 yes)
618         AC_CHECK_HEADERS(sys/devpoll.h devpoll.h,
619         ISC_PLATFORM_HAVEDEVPOLL="#define ISC_PLATFORM_HAVEDEVPOLL 1"
620         ,
621         ISC_PLATFORM_HAVEDEVPOLL="#undef ISC_PLATFORM_HAVEDEVPOLL"
622         )
623         ;;
624 *)
625         ISC_PLATFORM_HAVEDEVPOLL="#undef ISC_PLATFORM_HAVEDEVPOLL"
626         ;;
627 esac
628 AC_SUBST(ISC_PLATFORM_HAVEDEVPOLL)
629
630 #
631 # check if we need to #include sys/select.h explicitly
632 #
633 case $ac_cv_header_unistd_h in
634 yes)
635 AC_MSG_CHECKING(if unistd.h or sys/types.h defines fd_set)
636 AC_TRY_COMPILE([
637 #include <sys/types.h> /* Ultrix */
638 #include <unistd.h>],
639 [fd_set read_set; return (0);],
640         [AC_MSG_RESULT(yes)
641          ISC_PLATFORM_NEEDSYSSELECTH="#undef ISC_PLATFORM_NEEDSYSSELECTH"
642          LWRES_PLATFORM_NEEDSYSSELECTH="#undef LWRES_PLATFORM_NEEDSYSSELECTH"],
643         [AC_MSG_RESULT(no)
644         case $ac_cv_header_sys_select_h in
645         yes)
646          ISC_PLATFORM_NEEDSYSSELECTH="#define ISC_PLATFORM_NEEDSYSSELECTH 1"
647          LWRES_PLATFORM_NEEDSYSSELECTH="#define LWRES_PLATFORM_NEEDSYSSELECTH 1"
648                 ;;
649         no)
650                 AC_MSG_ERROR([need either working unistd.h or sys/select.h])
651                 ;;
652         esac
653         ])
654         ;;
655 no)
656         case $ac_cv_header_sys_select_h in
657         yes)
658              ISC_PLATFORM_NEEDSYSSELECTH="#define ISC_PLATFORM_NEEDSYSSELECTH 1"
659              LWRES_PLATFORM_NEEDSYSSELECTH="#define LWRES_PLATFORM_NEEDSYSSELECTH 1"
660                 ;;
661         no)
662                 AC_MSG_ERROR([need either unistd.h or sys/select.h])
663                 ;;
664         esac
665         ;;
666 esac
667 AC_SUBST(ISC_PLATFORM_NEEDSYSSELECTH)
668 AC_SUBST(LWRES_PLATFORM_NEEDSYSSELECTH)
669
670 #
671 # Find the machine's endian flavor.
672 #
673 AC_C_BIGENDIAN
674
675 #
676 # was --with-openssl specified?
677 #
678 OPENSSL_WARNING=
679 AC_MSG_CHECKING(for OpenSSL library)
680 AC_ARG_WITH(openssl,
681 [  --with-openssl[=PATH]     Build with OpenSSL [yes|no|path].
682                           (Required for DNSSEC)],
683     use_openssl="$withval", use_openssl="auto")
684
685 openssldirs="/usr /usr/local /usr/local/ssl /usr/pkg /usr/sfw"
686 if test "$use_openssl" = "auto"
687 then
688         for d in $openssldirs
689         do
690                 if test -f $d/include/openssl/opensslv.h
691                 then
692                         use_openssl=$d
693                         break
694                 fi
695         done
696 fi
697 OPENSSL_ECDSA=""
698 OPENSSL_GOST=""
699 case "$use_openssl" in
700         no)
701                 AC_MSG_RESULT(no)
702                 DST_OPENSSL_INC=""
703                 USE_OPENSSL=""
704                 OPENSSLGOSTLINKOBJS=""
705                 OPENSSLGOSTLINKSRS=""
706                 OPENSSLLINKOBJS=""
707                 OPENSSLLINKSRCS=""
708                 ;;
709         auto)
710                 DST_OPENSSL_INC=""
711                 USE_OPENSSL=""
712                 OPENSSLGOSTLINKOBJS=""
713                 OPENSSLGOSTLINKSRS=""
714                 OPENSSLLINKOBJS=""
715                 OPENSSLLINKSRCS=""
716                 AC_MSG_ERROR(
717 [OpenSSL was not found in any of $openssldirs; use --with-openssl=/path
718 If you don't want OpenSSL, use --without-openssl])
719                 ;;
720         *)
721                 if test "$use_openssl" = "yes"
722                 then
723                         # User did not specify a path - guess it
724                         for d in $openssldirs
725                         do
726                                 if test -f $d/include/openssl/opensslv.h
727                                 then
728                                         use_openssl=$d
729                                         break
730                                 fi
731                         done
732                         if test "$use_openssl" = "yes"
733                         then
734                                 AC_MSG_RESULT(not found)
735                                 AC_MSG_ERROR(
736 [OpenSSL was not found in any of $openssldirs; use --with-openssl=/path])
737                         fi
738                 elif ! test -f "$use_openssl"/include/openssl/opensslv.h
739                 then
740                         AC_MSG_ERROR(["$use_openssl/include/openssl/opensslv.h" not found])
741                 fi
742                 USE_OPENSSL='-DOPENSSL'
743                 if test "$use_openssl" = "/usr"
744                 then
745                         DST_OPENSSL_INC=""
746                         DNS_OPENSSL_LIBS="-lcrypto"
747                 else
748                         DST_OPENSSL_INC="-I$use_openssl/include"
749                         case $host in
750                         *-solaris*)
751                                 DNS_OPENSSL_LIBS="-L$use_openssl/lib -R$use_openssl/lib -lcrypto"
752                                 ;;
753                         *-hp-hpux*)
754                                 DNS_OPENSSL_LIBS="-L$use_openssl/lib -Wl,+b: -lcrypto"
755                                 ;;
756                         *-apple-darwin*)
757                                 #
758                                 # Apple's ld seaches for serially for dynamic
759                                 # then static libraries.  This means you can't
760                                 # use -L to override dynamic system libraries
761                                 # with static ones when linking.  Instead
762                                 # we specify a absolute path.
763                                 #
764                                 if test -f "$use_openssl/lib/libcrypto.dylib"
765                                 then
766                                         DNS_OPENSSL_LIBS="-L$use_openssl/lib -lcrypto"
767                                 else
768                                         DNS_OPENSSL_LIBS="$use_openssl/lib/libcrypto.a"
769                                 fi
770                                 ;;
771                         *)
772                                 DNS_OPENSSL_LIBS="-L$use_openssl/lib -lcrypto"
773                                 ;;
774                         esac
775                 fi
776                 AC_MSG_RESULT(using OpenSSL from $use_openssl/lib and $use_openssl/include)
777
778                 saved_cflags="$CFLAGS"
779                 saved_libs="$LIBS"
780                 CFLAGS="$CFLAGS $DST_OPENSSL_INC"
781                 LIBS="$LIBS $DNS_OPENSSL_LIBS"
782                 AC_MSG_CHECKING(whether linking with OpenSSL works)
783                 AC_TRY_RUN([
784 #include <openssl/err.h>
785 int main() {
786         ERR_clear_error();
787         return (0);
788 }
789 ],
790                 [AC_MSG_RESULT(yes)],
791                 [AC_MSG_RESULT(no)
792                  AC_MSG_ERROR(Could not run test program using OpenSSL from
793 $use_openssl/lib and $use_openssl/include.
794 Please check the argument to --with-openssl and your
795 shared library configuration (e.g., LD_LIBRARY_PATH).)],
796                 [AC_MSG_RESULT(assuming it does work on target platform)])
797
798                 AC_MSG_CHECKING(whether linking with OpenSSL requires -ldl)
799                 AC_TRY_LINK([
800 #include <openssl/err.h>
801 #include <openssl/dso.h>
802 ],
803 [ DSO_METHOD_dlfcn(); ],
804                 [AC_MSG_RESULT(no)],
805                 [LIBS="$LIBS -ldl"
806                 AC_TRY_LINK([
807 #include <openssl/err.h>
808 #include <openssl/dso.h>
809 ],[ DSO_METHOD_dlfcn(); ],
810                 [AC_MSG_RESULT(yes)
811                 DNS_OPENSSL_LIBS="$DNS_OPENSSL_LIBS -ldl"
812                 ],
813                  [AC_MSG_RESULT(unknown)
814                  AC_MSG_ERROR(OpenSSL has unsupported dynamic loading)],
815                 [AC_MSG_RESULT(assuming it does work on target platform)])
816                 ],
817                 [AC_MSG_RESULT(assuming it does work on target platform)]
818                 )
819                 
820 AC_ARG_ENABLE(openssl-version-check,
821 [AC_HELP_STRING([--enable-openssl-version-check],
822         [Check OpenSSL Version @<:@default=yes@:>@])])
823 case "$enable_openssl_version_check" in
824 yes|'')
825                 AC_MSG_CHECKING(OpenSSL library version)
826                 AC_TRY_RUN([
827 #include <stdio.h>
828 #include <openssl/opensslv.h>
829 int main() {
830         if ((OPENSSL_VERSION_NUMBER >= 0x009070cfL &&
831              OPENSSL_VERSION_NUMBER < 0x00908000L) ||
832              (OPENSSL_VERSION_NUMBER >= 0x0090804fL &&
833              OPENSSL_VERSION_NUMBER < 0x10002000L) ||
834              OPENSSL_VERSION_NUMBER >= 0x1000205fL)
835                 return (0);
836         printf("\n\nFound   OPENSSL_VERSION_NUMBER %#010x\n",
837                 OPENSSL_VERSION_NUMBER);
838         printf("Require OPENSSL_VERSION_NUMBER 0x009070cf or greater (0.9.7l)\n"
839                "Require OPENSSL_VERSION_NUMBER 0x0090804f or greater (0.9.8d)\n"
840                "Require OPENSSL_VERSION_NUMBER 0x1000000f or greater (1.0.0)\n"
841                "Require OPENSSL_VERSION_NUMBER 0x1000100f or greater (1.0.1)\n"
842                "Require OPENSSL_VERSION_NUMBER 0x1000205f or greater (1.0.2e)\n\n");
843         return (1);
844 }
845                 ],
846                 [AC_MSG_RESULT(ok)],
847                 [AC_MSG_RESULT(not compatible)
848                  OPENSSL_WARNING=yes
849                 ],
850                 [AC_MSG_RESULT(assuming target platform has compatible version)])
851 ;;
852 no)
853         AC_MSG_RESULT(Skipped OpenSSL version check)
854 ;;
855 esac
856
857         AC_MSG_CHECKING(for OpenSSL DSA support)
858         if test -f $use_openssl/include/openssl/dsa.h
859         then
860                 AC_DEFINE(HAVE_OPENSSL_DSA)
861                 AC_MSG_RESULT(yes)
862         else
863                 AC_MSG_RESULT(no)
864         fi
865
866         AC_CHECK_FUNCS(EVP_sha256 EVP_sha384 EVP_sha512)
867
868         AC_MSG_CHECKING(for OpenSSL ECDSA support)
869         have_ecdsa=""
870         AC_TRY_RUN([
871 #include <stdio.h>
872 #include <openssl/ecdsa.h>
873 #include <openssl/objects.h>
874 int main() {
875         EC_KEY *ec256, *ec384;
876
877 #if !defined(HAVE_EVP_SHA256) || !defined(HAVE_EVP_SHA384)
878         return (1);
879 #endif
880         ec256 = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
881         ec384 = EC_KEY_new_by_curve_name(NID_secp384r1);
882         if (ec256 == NULL || ec384 == NULL)
883                 return (2);
884         return (0);
885 }
886 ],
887         [AC_MSG_RESULT(yes)
888         have_ecdsa="yes"],
889         [AC_MSG_RESULT(no)
890         have_ecdsa="no"],
891         [AC_MSG_RESULT(using --with-ecdsa)])
892         AC_ARG_WITH(ecdsa, [  --with-ecdsa            OpenSSL ECDSA],
893                     with_ecdsa="$withval", with_ecdsa="auto")
894         case "$with_ecdsa" in
895         yes)
896             case "$have_ecdsa" in
897             no)  AC_MSG_ERROR([ecdsa not supported]) ;;
898             *)  have_ecdsa=yes ;;
899             esac
900             ;;
901         no)
902             have_ecdsa=no ;;
903         *)
904             case "$have_ecdsa" in
905             yes|no) ;;
906             *) AC_MSG_ERROR([need --with-ecdsa=[[yes or no]]]) ;;
907             esac
908             ;;
909         esac
910         case $have_ecdsa in
911         yes)
912                 OPENSSL_ECDSA="yes"
913                 AC_DEFINE(HAVE_OPENSSL_ECDSA, 1,
914                           [Define if your OpenSSL version supports ECDSA.])
915                 ;;
916         *)
917                 ;;
918         esac
919
920         AC_MSG_CHECKING(for OpenSSL GOST support)
921         have_gost=""
922         AC_TRY_RUN([
923 #include <openssl/conf.h>
924 #include <openssl/engine.h>
925 int main() {
926 #if (OPENSSL_VERSION_NUMBER >= 0x10000000L)
927         ENGINE *e;
928         EC_KEY *ek;
929
930         ek = NULL;
931         OPENSSL_config(NULL);
932
933         e = ENGINE_by_id("gost");
934         if (e == NULL)
935                 return (1);
936         if (ENGINE_init(e) <= 0)
937                 return (1);
938         return (0);
939 #else
940         return (1);
941 #endif
942 }
943 ],
944         [AC_MSG_RESULT(yes)
945         have_gost="yes"],
946         [AC_MSG_RESULT(no)
947         have_gost="no"],
948         [AC_MSG_RESULT(using --with-gost)])
949         AC_ARG_WITH(gost, [  --with-gost             OpenSSL GOST],
950                     with_gost="$withval", with_gost="auto")
951         case "$with_gost" in
952         yes)
953             case "$have_gost" in
954             no)  AC_MSG_ERROR([gost not supported]) ;;
955             *)  have_gost=yes ;;
956             esac
957             ;;
958         no)
959             have_gost=no ;;
960         *)
961             case "$have_gost" in
962             yes|no) ;;
963             *) AC_MSG_ERROR([need --with-gost=[[yes or no]]]) ;;
964             esac
965             ;;
966         esac
967         case $have_gost in
968         yes)
969                 OPENSSL_GOST="yes"
970                 OPENSSLGOSTLINKOBJS='${OPENSSLGOSTLINKOBJS}'
971                 OPENSSLGOSTLINKSRCS='${OPENSSLGOSTLINKSRCS}'
972                 AC_DEFINE(HAVE_OPENSSL_GOST, 1,
973                           [Define if your OpenSSL version supports GOST.])
974                 ;;
975         *)
976                 ;;
977         esac
978         CFLAGS="$saved_cflags"
979         LIBS="$saved_libs"
980         OPENSSLLINKOBJS='${OPENSSLLINKOBJS}'
981         OPENSSLLINKSRCS='${OPENSSLLINKSRCS}'
982
983         ;;
984 esac
985
986 #
987 # This would include the system openssl path (and linker options to use
988 # it as needed) if it is found.
989 #
990
991 AC_SUBST(USE_OPENSSL)
992 AC_SUBST(DST_OPENSSL_INC)
993 AC_SUBST(OPENSSLGOSTLINKOBJS)
994 AC_SUBST(OPENSSLGOSTLINKSRCS)
995 AC_SUBST(OPENSSLLINKOBJS)
996 AC_SUBST(OPENSSLLINKSRCS)
997 AC_SUBST(OPENSSL_ECDSA)
998 AC_SUBST(OPENSSL_GOST)
999
1000 DNS_CRYPTO_LIBS="$DNS_CRYPTO_LIBS $DNS_OPENSSL_LIBS"
1001
1002 #
1003 # Use OpenSSL for hash functions
1004 #
1005
1006 AC_ARG_ENABLE(openssl-hash,
1007         [  --enable-openssl-hash   use OpenSSL for hash functions [[default=no]]],
1008         want_openssl_hash="$enableval", want_openssl_hash="no")
1009 case $want_openssl_hash in
1010         yes)
1011                 if test "$USE_OPENSSL" = ""
1012                 then
1013                         AC_MSG_ERROR([No OpenSSL for hash functions])
1014                 fi
1015                 ISC_PLATFORM_OPENSSLHASH="#define ISC_PLATFORM_OPENSSLHASH 1"
1016                 ISC_OPENSSL_INC="$DST_OPENSSL_INC"
1017                 ISC_OPENSSL_LIBS="$DST_OPENSSL_LIBS"
1018                 saved_cflags="$CFLAGS"
1019                 save_libs="$LIBS"
1020                 CFLAGS="$CFLAGS $ISC_OPENSSL_INC"
1021                 LIBS="$LIBS $ISC_OPENSSL_LIBS"
1022                 AC_MSG_CHECKING([HMAC_Init() return type])
1023                 AC_TRY_COMPILE([
1024                 #include <openssl/hmac.h>],[
1025                 HMAC_CTX ctx;
1026                 int n = HMAC_Init(&ctx, NULL, 0, NULL);
1027                 n += HMAC_Update(&ctx, NULL, 0);
1028                 n += HMAC_Final(&ctx, NULL, NULL);],[
1029                 AC_MSG_RESULT(int)
1030                 AC_DEFINE(HMAC_RETURN_INT, 1, [HMAC_*() return ints])],[
1031                 AC_MSG_RESULT(void)])
1032                 CFLAGS="$saved_cflags"
1033                 LIBS="$save_libs"
1034                 ;;
1035         no)
1036                 ISC_PLATFORM_OPENSSLHASH="#undef ISC_PLATFORM_OPENSSLHASH"
1037                 ISC_OPENSSL_INC=""
1038                 ;;
1039 esac
1040 AC_SUBST(ISC_PLATFORM_OPENSSLHASH)
1041 AC_SUBST(ISC_OPENSSL_INC)
1042
1043 #
1044 # PKCS11 (aka crypto hardware) support
1045 #
1046 # This works only with the right OpenSSL with PKCS11 engine!
1047 #
1048
1049 AC_MSG_CHECKING(for PKCS11 support)
1050 AC_ARG_WITH(pkcs11,
1051 [  --with-pkcs11[=PATH]      Build with PKCS11 support [yes|no|path]
1052                           (PATH is for the PKCS11 provider)],
1053    use_pkcs11="$withval", use_pkcs11="no")
1054
1055 case "$use_pkcs11" in
1056         no|'')
1057                 AC_MSG_RESULT(disabled)
1058                 USE_PKCS11=''
1059                 PKCS11_TOOLS=''
1060                 ;;
1061         yes|*)
1062                 AC_MSG_RESULT(using OpenSSL with PKCS11 support)
1063                 USE_PKCS11='-DUSE_PKCS11'
1064                 PKCS11_TOOLS=pkcs11
1065                 ;;
1066 esac
1067 AC_SUBST(USE_PKCS11)
1068 AC_SUBST(PKCS11_TOOLS)
1069
1070 AC_MSG_CHECKING(for PKCS11 tools)
1071 case "$use_pkcs11" in
1072         no|yes|'')
1073                 AC_MSG_RESULT(disabled)
1074                 PKCS11_PROVIDER="undefined"
1075                 ;;
1076        *)
1077                 AC_MSG_RESULT(PKCS11 provider is "$use_pkcs11")
1078                 PKCS11_PROVIDER="$use_pkcs11"
1079                 ;;
1080 esac
1081 AC_SUBST(PKCS11_PROVIDER)
1082
1083 AC_MSG_CHECKING(for GSSAPI library)
1084 AC_ARG_WITH(gssapi,
1085 [  --with-gssapi=PATH      Specify path for system-supplied GSSAPI [[default=yes]]],
1086     use_gssapi="$withval", use_gssapi="yes")
1087
1088 # gssapi is just the framework, we really require kerberos v5, so
1089 # look for those headers (the gssapi headers must be there, too)
1090 # The problem with this implementation is that it doesn't allow
1091 # for the specification of gssapi and krb5 headers in different locations,
1092 # which probably ought to be fixed although fixing might raise the issue of
1093 # trying to build with incompatible versions of gssapi and krb5.
1094 if test "$use_gssapi" = "yes"
1095 then
1096         # first, deal with the obvious
1097         if test \( -f /usr/include/kerberosv5/krb5.h -o \
1098                    -f /usr/include/krb5/krb5.h -o \
1099                    -f /usr/include/krb5.h \)   -a \
1100                 \( -f /usr/include/gssapi.h -o \
1101                    -f /usr/include/gssapi/gssapi.h \)
1102         then
1103                 use_gssapi=/usr
1104         else
1105             krb5dirs="/usr/local /usr/local/krb5 /usr/local/kerberosv5 /usr/local/kerberos /usr/pkg /usr/krb5 /usr/kerberosv5 /usr/kerberos /usr"
1106             for d in $krb5dirs
1107             do
1108                 if test -f $d/include/gssapi/gssapi_krb5.h -o \
1109                         -f $d/include/krb5.h
1110                 then
1111                         if test -f $d/include/gssapi/gssapi.h -o \
1112                                 -f $d/include/gssapi.h
1113                         then
1114                                 use_gssapi=$d
1115                                 break
1116                         fi
1117                 fi
1118                 use_gssapi="no"
1119             done
1120         fi
1121 fi
1122
1123 case "$use_gssapi" in
1124         no)
1125                 AC_MSG_RESULT(disabled)
1126                 USE_GSSAPI=''
1127                 ;;
1128         yes)
1129                 AC_MSG_ERROR([--with-gssapi must specify a path])
1130                 ;;
1131         *)
1132                 AC_MSG_RESULT(looking in $use_gssapi/lib)
1133                 USE_GSSAPI='-DGSSAPI'
1134                 saved_cppflags="$CPPFLAGS"
1135                 CPPFLAGS="-I$use_gssapi/include $CPPFLAGS"
1136                 AC_CHECK_HEADERS(gssapi.h gssapi/gssapi.h,
1137                     [ISC_PLATFORM_GSSAPIHEADER="#define ISC_PLATFORM_GSSAPIHEADER <$ac_header>"
1138                      gssapi_hack="#include <$ac_header>"])
1139
1140                 if test "$ISC_PLATFORM_GSSAPIHEADER" = ""; then
1141                     AC_MSG_ERROR([gssapi.h not found])
1142                 fi
1143
1144                 AC_CHECK_HEADERS(gssapi_krb5.h gssapi/gssapi_krb5.h,
1145                     [ISC_PLATFORM_GSSAPI_KRB5_HEADER="#define ISC_PLATFORM_GSSAPI_KRB5_HEADER <$ac_header>"
1146                      gssapi_krb5_hack="#include <$ac_header>"])
1147
1148                 AC_CHECK_HEADERS(krb5.h krb5/krb5.h kerberosv5/krb5.h,
1149                     [ISC_PLATFORM_KRB5HEADER="#define ISC_PLATFORM_KRB5HEADER <$ac_header>"
1150                     krb5_hack="#include <$ac_header>"])
1151
1152                 if test "$ISC_PLATFORM_KRB5HEADER" = ""; then
1153                     AC_MSG_ERROR([krb5.h not found])
1154                 fi
1155
1156                 #
1157                 # XXXDCL This probably doesn't work right on all systems.
1158                 # It will need to be worked on as problems become evident.
1159                 #
1160                 # Essentially the problems here relate to two different
1161                 # areas.  The first area is building with either KTH
1162                 # or MIT Kerberos, particularly when both are present on
1163                 # the machine.  The other is static versus dynamic linking.
1164                 #
1165                 # On the KTH vs MIT issue, Both have libkrb5 that can mess
1166                 # up the works if one implementation ends up trying to
1167                 # use the other's krb.  This is unfortunately a situation
1168                 # that very easily arises.
1169                 #
1170                 # Dynamic linking when the dependency information is built
1171                 # into MIT's libgssapi_krb5 or KTH's libgssapi magically makes
1172                 # all such problems go away, but when that setup is not
1173                 # present, because either the dynamic libraries lack
1174                 # dependencies or static linking is being done, then the
1175                 # problems start to show up.
1176                 saved_libs="$LIBS"
1177                 for TRY_LIBS in \
1178                     "-lgssapi_krb5" \
1179                     "-lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err" \
1180                     "-lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -lresolv" \
1181                     "-lgssapi" \
1182                     "-lgssapi -lkrb5 -ldes -lcrypt -lasn1 -lroken -lcom_err" \
1183                     "-lgssapi -lkrb5 -lcrypto -lcrypt -lasn1 -lroken -lcom_err" \
1184                     "-lgssapi -lkrb5 -lgssapi_krb5 -lcrypto -lcrypt -lasn1 -lroken -lcom_err" \
1185                     "-lgssapi -lkrb5 -lhx509 -lcrypto -lcrypt -lasn1 -lroken -lcom_err" \
1186                     "-lgss -lkrb5"
1187                 do
1188                     # Note that this does not include $saved_libs, because
1189                     # on FreeBSD machines this configure script has added
1190                     # -L/usr/local/lib to LIBS, which can make the
1191                     # -lgssapi_krb5 test succeed with shared libraries even
1192                     # when you are trying to build with KTH in /usr/lib.
1193                     if test "$use_gssapi" = "/usr"
1194                     then
1195                             LIBS="$TRY_LIBS"
1196                     else
1197                             LIBS="-L$use_gssapi/lib $TRY_LIBS"
1198                     fi
1199                     AC_MSG_CHECKING(linking as $TRY_LIBS)
1200                     AC_TRY_LINK([
1201 #include <sys/types.h>
1202 $gssapi_hack
1203 $gssapi_krb5_hack
1204 $krb5_hack
1205                                 ] , [gss_acquire_cred(NULL, NULL, 0, NULL, 0, NULL, NULL, NULL);krb5_init_context(NULL);
1206 #if defined(HAVE_GSSAPI_KRB5_H) || defined(HAVE_GSSAPI_GSSAPI_KRB5_H)
1207 gsskrb5_register_acceptor_identity(NULL);
1208 #endif],
1209                                 gssapi_linked=yes, gssapi_linked=no)
1210                     case $gssapi_linked in
1211                     yes) AC_MSG_RESULT(yes); break ;;
1212                     no)  AC_MSG_RESULT(no) ;;
1213                     esac
1214                 done
1215
1216                 CPPFLAGS="$saved_cppflags"
1217
1218                 case $gssapi_linked in
1219                 no) AC_MSG_ERROR(could not determine proper GSSAPI linkage) ;;
1220                 esac
1221
1222                 #
1223                 # XXXDCL Major kludge.  Tries to cope with KTH in /usr/lib
1224                 # but MIT in /usr/local/lib and trying to build with KTH.
1225                 # /usr/local/lib can end up earlier on the link lines.
1226                 # Like most kludges, this one is not only inelegant it
1227                 # is also likely to be the wrong thing to do at least as
1228                 # many times as it is the right thing.  Something better
1229                 # needs to be done.
1230                 #
1231                 if test "$use_gssapi" = "/usr" -a \
1232                         -f /usr/local/lib/libkrb5.a; then
1233                     FIX_KTH_VS_MIT=yes
1234                 fi
1235
1236                 case "$FIX_KTH_VS_MIT" in
1237                 yes)
1238                     case "$enable_static_linking" in
1239                     yes) gssapi_lib_suffix=".a"  ;;
1240                     *)   gssapi_lib_suffix=".so" ;;
1241                     esac
1242
1243                     for lib in $LIBS; do
1244                         case $lib in
1245                         -L*)
1246                             ;;
1247                         -l*)
1248                             new_lib=`echo $lib |
1249                                      sed -e s%^-l%$use_gssapi/lib/lib% \
1250                                          -e s%$%$gssapi_lib_suffix%`
1251                             NEW_LIBS="$NEW_LIBS $new_lib"
1252                             ;;
1253                         *)
1254                            AC_MSG_ERROR([KTH vs MIT Kerberos confusion!])
1255                             ;;
1256                         esac
1257                     done
1258                     LIBS="$NEW_LIBS"
1259                     ;;
1260                 esac
1261
1262                 DST_GSSAPI_INC="-I$use_gssapi/include"
1263                 DNS_GSSAPI_LIBS="$LIBS"
1264
1265                 AC_MSG_RESULT(using GSSAPI from $use_gssapi/lib and $use_gssapi/include)
1266                 LIBS="$saved_libs"
1267                 ;;
1268 esac
1269
1270 AC_SUBST(ISC_PLATFORM_HAVEGSSAPI)
1271 AC_SUBST(ISC_PLATFORM_GSSAPIHEADER)
1272 AC_SUBST(ISC_PLATFORM_GSSAPI_KRB5_HEADER)
1273 AC_SUBST(ISC_PLATFORM_KRB5HEADER)
1274
1275 AC_SUBST(USE_GSSAPI)
1276 AC_SUBST(DST_GSSAPI_INC)
1277 AC_SUBST(DNS_GSSAPI_LIBS)
1278 DNS_CRYPTO_LIBS="$DNS_GSSAPI_LIBS $DNS_CRYPTO_LIBS"
1279
1280 #
1281 # Applications linking with libdns also need to link with these libraries.
1282 #
1283
1284 AC_SUBST(DNS_CRYPTO_LIBS)
1285
1286 #
1287 # was --with-randomdev specified?
1288 #
1289 AC_MSG_CHECKING(for random device)
1290 AC_ARG_WITH(randomdev,
1291 [  --with-randomdev=PATH   Specify path for random device],
1292     use_randomdev="$withval", use_randomdev="unspec")
1293
1294 case "$use_randomdev" in
1295         unspec)
1296                 case "$cross_compiling" in
1297                 yes)
1298                         AC_MSG_RESULT(unspecified)
1299                         AC_MSG_ERROR([ need --with-randomdev=PATH or --with-randomdev=no])
1300                 esac
1301                 case "$host" in
1302                         *-openbsd*)
1303                                 devrandom=/dev/arandom
1304                                 ;;
1305                         *)
1306                                 devrandom=/dev/random
1307                                 ;;
1308                 esac
1309                 AC_MSG_RESULT($devrandom)
1310                 AC_CHECK_FILE($devrandom,
1311                               AC_DEFINE_UNQUOTED(PATH_RANDOMDEV,
1312                                                  "$devrandom"),)
1313                               
1314                 ;;
1315         yes)
1316                 AC_MSG_ERROR([--with-randomdev must specify a path])
1317                 ;;
1318         no)
1319                 AC_MSG_RESULT(disabled)
1320                 ;;
1321         *)
1322                 AC_DEFINE_UNQUOTED(PATH_RANDOMDEV, "$use_randomdev")
1323                 AC_MSG_RESULT(using "$use_randomdev")
1324                 ;;
1325 esac
1326
1327 #
1328 # Only check dsa signature generation on these platforms when performing
1329 # system tests.
1330 #
1331 CHECK_DSA=0
1332 if grep "#define PATH_RANDOMDEV " confdefs.h > /dev/null
1333 then
1334         case "$host" in
1335         *darwin*|*freebsd*)
1336                 CHECK_DSA=1
1337                 ;;
1338         esac
1339 fi
1340 AC_SUBST(CHECK_DSA)
1341
1342 #
1343 # Do we have arc4random(), etc ? arc4random_addrandom() has been removed
1344 # from OpenBSD 5.5 onwards.
1345 #
1346 AC_CHECK_FUNC(arc4random, AC_DEFINE(HAVE_ARC4RANDOM))
1347 AC_CHECK_FUNC(arc4random_addrandom, AC_DEFINE(HAVE_ARC4RANDOM_ADDRANDOM))
1348
1349 sinclude(config.threads.in)dnl
1350
1351 if $use_threads
1352 then
1353         if test "X$GCC" = "Xyes"; then
1354                 case "$host" in
1355                 *-freebsd*)
1356                         CC="$CC -pthread"
1357                         CCOPT="$CCOPT -pthread"
1358                         CCNOOPT="$CCNOOPT -pthread"
1359                         STD_CDEFINES="$STD_CDEFINES -D_THREAD_SAFE"
1360                         ;;
1361                 *-openbsd*)
1362                         CC="$CC -pthread"
1363                         CCOPT="$CCOPT -pthread"
1364                         CCNOOPT="$CCNOOPT -pthread"
1365                         ;;
1366                 *-solaris*)
1367                         LIBS="$LIBS -lthread"
1368                         ;;
1369                 *-ibm-aix*)
1370                         STD_CDEFINES="$STD_CDEFINES -D_THREAD_SAFE"
1371                         ;;
1372                 esac
1373         else
1374                 case $host in
1375                 *-dec-osf*)
1376                         CC="$CC -pthread"
1377                         CCOPT="$CCOPT -pthread"
1378                         CCNOOPT="$CCNOOPT -pthread"
1379                         ;;
1380                 *-solaris*)
1381                         CC="$CC -mt"
1382                         CCOPT="$CCOPT -mt"
1383                         CCNOOPT="$CCNOOPT -mt"
1384                         ;;
1385                 *-ibm-aix*)
1386                         STD_CDEFINES="$STD_CDEFINES -D_THREAD_SAFE"
1387                         ;;
1388                 *-sco-sysv*uw*|*-*-sysv*UnixWare*)
1389                         CC="$CC -Kthread"
1390                         CCOPT="$CCOPT -Kthread"
1391                         CCNOOPT="$CCNOOPT -Kthread"
1392                         ;;
1393                 *-*-sysv*OpenUNIX*)
1394                         CC="$CC -Kpthread"
1395                         CCOPT="$CCOPT -Kpthread"
1396                         CCNOOPT="$CCNOOPT -Kpthread"
1397                         ;;
1398                 esac
1399         fi
1400         ALWAYS_DEFINES="-D_REENTRANT"
1401         ISC_PLATFORM_USETHREADS="#define ISC_PLATFORM_USETHREADS 1"
1402         THREADOPTOBJS='${THREADOPTOBJS}'
1403         THREADOPTSRCS='${THREADOPTSRCS}'
1404         thread_dir=pthreads
1405         #
1406         # We'd like to use sigwait() too
1407         #
1408         AC_CHECK_FUNC(sigwait,
1409                       AC_DEFINE(HAVE_SIGWAIT),
1410                       AC_CHECK_LIB(c, sigwait,
1411                       AC_DEFINE(HAVE_SIGWAIT),
1412                       AC_CHECK_LIB(pthread, sigwait,
1413                                    AC_DEFINE(HAVE_SIGWAIT),
1414                                    AC_CHECK_LIB(pthread, _Psigwait,
1415                                                 AC_DEFINE(HAVE_SIGWAIT),))))
1416
1417         AC_CHECK_FUNC(pthread_attr_getstacksize,
1418                       AC_DEFINE(HAVE_PTHREAD_ATTR_GETSTACKSIZE),)
1419
1420         AC_CHECK_FUNC(pthread_attr_setstacksize,
1421                       AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE),)
1422
1423         AC_CHECK_HEADERS(sched.h)
1424
1425         case "$host" in
1426         *solaris-*)
1427                 AC_CHECK_LIB(rt, sched_yield)
1428                 ;;
1429         esac
1430
1431         AC_CHECK_FUNCS(sched_yield pthread_yield pthread_yield_np)
1432
1433         #
1434         # Additional OS-specific issues related to pthreads and sigwait.
1435         #
1436         case "$host" in
1437                 #
1438                 # One more place to look for sigwait.
1439                 #
1440                 *-freebsd*)
1441                         AC_CHECK_LIB(c_r, sigwait, AC_DEFINE(HAVE_SIGWAIT),)
1442                         case $host in
1443                         *-freebsd5.[[012]]|*-freebsd5.[[012]].*);;
1444                         *-freebsd5.[[3456789]]|*-freebsd5.[[3456789]].*)
1445                                 AC_DEFINE(NEED_PTHREAD_SCOPE_SYSTEM)
1446                                 ;;
1447                         *-freebsd6.*)
1448                                 AC_DEFINE(NEED_PTHREAD_SCOPE_SYSTEM)
1449                                 ;;
1450                         esac
1451                         ;;
1452                 #
1453                 # BSDI 3.0 through 4.0.1 needs pthread_init() to be
1454                 # called before certain pthreads calls.  This is deprecated
1455                 # in BSD/OS 4.1.
1456                 #
1457                 *-bsdi3.*|*-bsdi4.0*)
1458                         AC_DEFINE(NEED_PTHREAD_INIT)
1459                         ;;
1460                 #
1461                 # LinuxThreads requires some changes to the way we
1462                 # deal with signals.
1463                 #
1464                 *-linux*)
1465                         AC_DEFINE(HAVE_LINUXTHREADS)
1466                         ;;
1467                 #
1468                 # Ensure the right sigwait() semantics on Solaris and make
1469                 # sure we call pthread_setconcurrency.
1470                 #
1471                 *-solaris*)
1472                         AC_DEFINE(_POSIX_PTHREAD_SEMANTICS)
1473                         AC_CHECK_FUNC(pthread_setconcurrency,
1474                                       AC_DEFINE(CALL_PTHREAD_SETCONCURRENCY))
1475                         ;;
1476                 #
1477                 # UnixWare does things its own way.
1478                 #
1479                 *-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
1480                         AC_DEFINE(HAVE_UNIXWARE_SIGWAIT)
1481                         ;;
1482         esac
1483
1484         #
1485         # Look for sysconf to allow detection of the number of processors.
1486         #
1487         AC_CHECK_FUNC(sysconf, AC_DEFINE(HAVE_SYSCONF),)
1488 else
1489         ISC_PLATFORM_USETHREADS="#undef ISC_PLATFORM_USETHREADS"
1490         thread_dir=nothreads
1491         THREADOPTOBJS=""
1492         THREADOPTSRCS=""
1493         ALWAYS_DEFINES=""
1494 fi
1495
1496 AC_SUBST(ALWAYS_DEFINES)
1497 AC_SUBST(ISC_PLATFORM_USETHREADS)
1498 AC_SUBST(THREADOPTOBJS)
1499 AC_SUBST(THREADOPTSRCS)
1500 ISC_THREAD_DIR=$thread_dir
1501 AC_SUBST(ISC_THREAD_DIR)
1502
1503 #
1504 # was --with-libxml2 specified?
1505 #
1506 AC_MSG_CHECKING(for libxml2 library)
1507 AC_ARG_WITH(libxml2,
1508 [  --with-libxml2[=PATH]     Build with libxml2 library [yes|no|path]],
1509     use_libxml2="$withval", use_libxml2="auto")
1510
1511 case "$use_libxml2" in
1512         no)
1513                 DST_LIBXML2_INC=""
1514                 ;;
1515         auto|yes)
1516                 case X`(xml2-config --version) 2>/dev/null` in
1517                 X2.[[6789]].*)
1518                         libxml2_libs=`xml2-config --libs`
1519                         libxml2_cflags=`xml2-config --cflags`
1520                         ;;
1521                 *)
1522                         if test "$use_libxml2" = "yes" ; then
1523                                 AC_MSG_RESULT(no)
1524                                 AC_MSG_ERROR(required libxml2 version not available)
1525                         else
1526                                 libxml2_libs=
1527                                 libxml2_cflags=
1528                         fi
1529                         ;;
1530                 esac
1531                 ;;
1532         *)
1533                 if test -f "$use_libxml2/bin/xml2-config" ; then
1534                         libxml2_libs=`$use_libxml2/bin/xml2-config --libs`
1535                         libxml2_cflags=`$use_libxml2/bin/xml2-config --cflags`
1536                 fi
1537                 ;;
1538 esac
1539
1540 if test "X$libxml2_libs" != "X"
1541 then
1542         CFLAGS="$CFLAGS $libxml2_cflags"
1543         LIBS="$LIBS $libxml2_libs"
1544         #
1545         # Sanity check xml2-config output.
1546         #
1547         AC_TRY_LINK([#include <libxml/xmlwriter.h>],
1548                     [return(xmlTextWriterStartElement(NULL, NULL));],
1549                     AC_MSG_RESULT(yes),
1550                     AC_MSG_ERROR(xml2-config returns badness))
1551         AC_DEFINE(HAVE_LIBXML2, 1, [Define if libxml2 was found])
1552 else
1553         AC_MSG_RESULT(no)
1554 fi
1555
1556 #
1557 # In solaris 10, SMF can manage named service
1558 #
1559 AC_CHECK_LIB(scf, smf_enable_instance)
1560
1561 #
1562 # flockfile is usually provided by pthreads, but we may want to use it
1563 # even if compiled with --disable-threads.  getc_unlocked might also not
1564 # be defined.
1565 #
1566 AC_CHECK_FUNC(flockfile, AC_DEFINE(HAVE_FLOCKFILE),)
1567 AC_CHECK_FUNC(getc_unlocked, AC_DEFINE(HAVE_GETCUNLOCKED),)
1568
1569 #
1570 # Indicate what the final decision was regarding threads.
1571 #
1572 AC_MSG_CHECKING(whether to build with threads)
1573 if $use_threads; then
1574         AC_MSG_RESULT(yes)
1575 else
1576         AC_MSG_RESULT(no)
1577 fi
1578
1579 #
1580 # End of pthreads stuff.
1581 #
1582
1583 #
1584 # Large File
1585 #
1586 AC_ARG_ENABLE(largefile, [  --enable-largefile    64-bit file support],
1587               want_largefile="yes", want_largefile="no")
1588 case $want_largefile in
1589         yes)
1590                 ALWAYS_DEFINES="$ALWAYS_DEFINES -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
1591                 ;;
1592         *)
1593                 ;;
1594 esac
1595
1596 #
1597 # Additional compiler settings.
1598 #
1599 MKDEPCC="$CC"
1600 MKDEPCFLAGS="-M"
1601 IRIX_DNSSEC_WARNINGS_HACK=""
1602
1603 if test "X$GCC" = "Xyes"; then
1604         STD_CWARNINGS="$STD_CWARNINGS -W -Wall -Wmissing-prototypes -Wcast-qual -Wwrite-strings -Wformat -Wpointer-arith"
1605         AC_MSG_CHECKING(if "$CC" supports -fno-strict-aliasing)
1606         SAVE_CFLAGS="$CFLAGS"
1607         CFLAGS="$CFLAGS -Werror -fno-strict-aliasing"
1608         AC_TRY_COMPILE(,, [FNOSTRICTALIASING=yes],[FNOSTRICTALIASING=no])
1609         CFLAGS="$SAVE_CFLAGS"
1610         if test "$FNOSTRICTALIASING" = "yes"; then
1611                 AC_MSG_RESULT(yes)
1612                 STD_CWARNINGS="$STD_CWARNINGS -fno-strict-aliasing"
1613         else
1614                 AC_MSG_RESULT(no)
1615         fi
1616         #
1617         # turn off delete null pointer checks
1618         #
1619         AC_MSG_CHECKING(if "$CC" supports -fno-delete-null-pointer-checks)
1620         SAVE_CFLAGS="$CFLAGS"
1621         CFLAGS="$CFLAGS -Werror -fno-delete-null-pointer-checks"
1622         AC_TRY_COMPILE(,, [FNODELETENULLPOINTERCHECKS=yes],
1623                           [FNODELETENULLPOINTERCHECKS=no])
1624         CFLAGS="$SAVE_CFLAGS"
1625         if test "$FNODELETENULLPOINTERCHECKS" = "yes"; then
1626                 AC_MSG_RESULT(yes)
1627                 STD_CWARNINGS="$STD_CWARNINGS -fno-delete-null-pointer-checks"
1628         else
1629                 AC_MSG_RESULT(no)
1630         fi
1631         case "$host" in
1632         *-hp-hpux*)
1633                 CFLAGS="$CFLAGS -Wl,+vnocompatwarnings"
1634                 BACKTRACECFLAGS="$BACKTRACECFLAGS -Wl,+vnocompatwarnings"
1635                 ;;
1636         esac
1637         if test "X$enable_warn_shadow" = Xyes; then
1638                 STD_CWARNINGS="$STD_CWARNINGS -Wshadow"
1639         fi
1640         if test "X$enable_warn_error" = Xyes; then
1641                 STD_CWARNINGS="$STD_CWARNINGS -Werror"
1642         fi
1643 else
1644         case $host in
1645         *-dec-osf*)
1646                 CC="$CC -std"
1647                 CCOPT="$CCOPT -std"
1648                 CCNOOPT="$CCNOOPT -std"
1649                 MKDEPCC="$CC"
1650                 ;;
1651         *-hp-hpux*)
1652                 CC="$CC -Ae -z"
1653                 # The version of the C compiler that constantly warns about
1654                 # 'const' as well as alignment issues is unfortunately not
1655                 # able to be discerned via the version of the operating
1656                 # system, nor does cc have a version flag.
1657                 case "`$CC +W 123 2>&1`" in
1658                 *Unknown?option*)
1659                         STD_CWARNINGS="+w1"
1660                         ;;
1661                 *)
1662                         # Turn off the pointlessly noisy warnings.
1663                         STD_CWARNINGS="+w1 +W 474,530,2193,2236"
1664                         ;;
1665                 esac
1666                 CCOPT="$CCOPT -Ae -z"
1667                 CCNOOPT="$CCNOOPT -Ae -z"
1668                 CFLAGS="$CFLAGS -Wl,+vnocompatwarnings"
1669                 BACKTRACECFLAGS="$BACKTRACECFLAGS -Wl,+vnocompatwarnings"
1670                 MKDEPPROG='cc -Ae -E -Wp,-M >/dev/null 2>>$TMP'
1671                 ;;
1672         *-sgi-irix*)
1673                 STD_CWARNINGS="-fullwarn -woff 1209"
1674                 #
1675                 # Silence more than 250 instances of
1676                 #   "prototyped function redeclared without prototype"
1677                 # and 11 instances of
1678                 #   "variable ... was set but never used"
1679                 # from lib/dns/sec/openssl.
1680                 #
1681                 IRIX_DNSSEC_WARNINGS_HACK="-woff 1692,1552"
1682                 ;;
1683         *-solaris*)
1684                 MKDEPCFLAGS="-xM"
1685                 ;;
1686         *-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
1687                 # UnixWare
1688                 CC="$CC -w"
1689                 ;;
1690         esac
1691 fi
1692
1693 AC_SUBST(MKDEPCC)
1694 AC_SUBST(MKDEPCFLAGS)
1695 AC_SUBST(MKDEPPROG)
1696 AC_SUBST(IRIX_DNSSEC_WARNINGS_HACK)
1697
1698 #
1699 # NLS
1700 #
1701 AC_CHECK_FUNC(catgets, AC_DEFINE(HAVE_CATGETS),)
1702
1703 #
1704 # -lxnet buys us one big porting headache...  standards, gotta love 'em.
1705 #
1706 # AC_CHECK_LIB(xnet, socket, ,
1707 #    AC_CHECK_LIB(socket, socket)
1708 # )
1709 #
1710 # Use this for now, instead:
1711 #
1712 case "$host" in
1713         mips-sgi-irix*)
1714                 ;;
1715         *-linux*)
1716                 ;;
1717         *)
1718                 AC_CHECK_LIB(socket, socket)
1719                 AC_CHECK_LIB(nsl, inet_addr)
1720                 ;;
1721 esac
1722
1723 #
1724 # Work around Solaris's select() limitations.
1725 #
1726 case "$host" in
1727         *-solaris2.[[89]]|*-solaris2.1?)
1728         AC_DEFINE(FD_SETSIZE, 65536,
1729                   [Solaris hack to get select_large_fdset.])
1730         ;;
1731 esac
1732
1733 #
1734 # Purify support
1735 #
1736 AC_MSG_CHECKING(whether to use purify)
1737 AC_ARG_WITH(purify,
1738         [  --with-purify[=PATH]      use Rational purify],
1739         use_purify="$withval", use_purify="no")
1740
1741 case "$use_purify" in
1742         no)
1743                 ;;
1744         yes)
1745                 AC_PATH_PROG(purify_path, purify, purify)
1746                 ;;
1747         *)
1748                 purify_path="$use_purify"
1749                 ;;
1750 esac
1751
1752 case "$use_purify" in
1753         no)
1754                 AC_MSG_RESULT(no)
1755                 PURIFY=""
1756                 ;;
1757         *)
1758                 if test -f $purify_path || test $purify_path = purify; then
1759                         AC_MSG_RESULT($purify_path)
1760                         PURIFYFLAGS="`echo $PURIFYOPTIONS`"
1761                         PURIFY="$purify_path $PURIFYFLAGS"
1762                 else
1763                         AC_MSG_ERROR([$purify_path not found.
1764
1765 Please choose the proper path with the following command:
1766
1767     configure --with-purify=PATH
1768 ])
1769                 fi
1770                 ;;
1771 esac
1772
1773 AC_SUBST(PURIFY)
1774
1775 AC_ARG_WITH(libtool,
1776             [  --with-libtool          use GNU libtool],
1777             use_libtool="$withval", use_libtool="no")
1778
1779 case $use_libtool in
1780         yes)
1781                 AM_PROG_LIBTOOL
1782                 O=lo
1783                 A=la
1784                 LIBTOOL_MKDEP_SED='s;\.o;\.lo;'
1785                 LIBTOOL_MODE_COMPILE='--mode=compile --tag=CC'
1786                 LIBTOOL_MODE_INSTALL='--mode=install --tag=CC'
1787                 LIBTOOL_MODE_LINK='--mode=link --tag=CC'
1788                 INSTALL_LIBRARY='${INSTALL_PROGRAM}'
1789                 case "$host" in
1790                 *) LIBTOOL_ALLOW_UNDEFINED= ;;
1791                 esac
1792                 case "$host" in
1793                 *-ibm-aix*) LIBTOOL_IN_MAIN="-Wl,-bI:T_testlist.imp" ;;
1794                 *) LIBTOOL_IN_MAIN= ;;
1795                 esac;
1796                 ;;
1797         *)
1798                 O=o
1799                 A=a
1800                 LIBTOOL=
1801                 AC_SUBST(LIBTOOL)
1802                 LIBTOOL_MKDEP_SED=
1803                 LIBTOOL_MODE_COMPILE=
1804                 LIBTOOL_MODE_INSTALL=
1805                 LIBTOOL_MODE_LINK=
1806                 LIBTOOL_ALLOW_UNDEFINED=
1807                 LIBTOOL_IN_MAIN=
1808                 INSTALL_LIBRARY='${INSTALL_DATA}'
1809                 ;;
1810 esac
1811 AC_SUBST(INSTALL_LIBRARY)
1812
1813 #
1814 # Google/Great Performance Tools CPU Profiler
1815 #
1816 AC_MSG_CHECKING(whether to use gperftools profiler)
1817 AC_ARG_WITH(gperftools-profiler,
1818         [  --with-gperftools-profiler  use gperftools CPU profiler],
1819         use_profiler="$withval", use_profiler="no")
1820
1821 case $use_profiler in
1822         yes)
1823                 AC_MSG_RESULT(yes)
1824                 AC_DEFINE([HAVE_GPERFTOOLS_PROFILER], 1,
1825                 [Define to use gperftools CPU profiler.])
1826                 LIBS="$LIBS -lprofiler"
1827                 ;;
1828         *)
1829                 AC_MSG_RESULT(no)
1830                 ;;
1831 esac
1832
1833 #
1834 # enable/disable dumping stack backtrace.  Also check if the system supports
1835 # glibc-compatible backtrace() function.
1836 #
1837 AC_ARG_ENABLE(backtrace,
1838 [  --enable-backtrace      log stack backtrace on abort [[default=yes]]],
1839               want_backtrace="$enableval",  want_backtrace="yes")
1840 case $want_backtrace in
1841 yes)
1842         ISC_PLATFORM_USEBACKTRACE="#define ISC_PLATFORM_USEBACKTRACE 1"
1843         AC_TRY_LINK([#include <execinfo.h>],
1844         [return (backtrace((void **)0, 0));],
1845         [AC_DEFINE([HAVE_LIBCTRACE], [], [if system have backtrace function])],)
1846         ;;
1847 *)
1848         ISC_PLATFORM_USEBACKTRACE="#undef ISC_PLATFORM_USEBACKTRACE"
1849         ;;
1850 esac
1851 AC_SUBST(ISC_PLATFORM_USEBACKTRACE)
1852
1853 AC_ARG_ENABLE(symtable,
1854 [  --enable-symtable       use internal symbol table for backtrace
1855                           [[all|minimal(default)|none]]],
1856                 want_symtable="$enableval",  want_symtable="minimal")
1857 case $want_symtable in
1858 yes|all|minimal)     # "yes" is a hidden value equivalent to "minimal"
1859         if test "$PERL" = ""
1860         then
1861                 AC_MSG_ERROR([Internal symbol table requires perl but no perl is found.
1862 Install perl or explicitly disable the feature by --disable-symtable.])
1863         fi
1864         if test "$use_libtool" = "yes"; then
1865                 AC_MSG_WARN([Internal symbol table does not work with libtool.  Disabling symbol table.])
1866         else
1867                 # we generate the internal symbol table only for those systems
1868                 # known to work to avoid unexpected build failure.  Also, warn
1869                 # about unsupported systems when the feature is enabled
1870                 #  manually.
1871                 case $host_os in
1872                 freebsd*|netbsd*|openbsd*|linux*|solaris*|darwin*)
1873                         MKSYMTBL_PROGRAM="$PERL"
1874                         if test $want_symtable = all; then
1875                                 ALWAYS_MAKE_SYMTABLE="yes"
1876                         fi
1877                         ;;
1878                 *)
1879                         if test $want_symtable = yes -o $want_symtable = all
1880                         then
1881                                 AC_MSG_WARN([this system is not known to generate internal symbol table safely; disabling it])
1882                         fi
1883                 esac
1884         fi
1885         ;;
1886 *)
1887         ;;
1888 esac
1889 AC_SUBST(MKSYMTBL_PROGRAM)
1890 AC_SUBST(ALWAYS_MAKE_SYMTABLE)
1891
1892 #
1893 # File name extension for static archive files, for those few places
1894 # where they are treated differently from dynamic ones.
1895 #
1896 SA=a
1897
1898 AC_SUBST(O)
1899 AC_SUBST(A)
1900 AC_SUBST(SA)
1901 AC_SUBST(LIBTOOL_MKDEP_SED)
1902 AC_SUBST(LIBTOOL_MODE_COMPILE)
1903 AC_SUBST(LIBTOOL_MODE_INSTALL)
1904 AC_SUBST(LIBTOOL_MODE_LINK)
1905 AC_SUBST(LIBTOOL_ALLOW_UNDEFINED)
1906 AC_SUBST(LIBTOOL_IN_MAIN)
1907
1908 #
1909 # build exportable DNS library?
1910 #
1911 AC_ARG_ENABLE(exportlib,
1912         [  --enable-exportlib     build exportable library (GNU make required)
1913                           [[default=no]]])
1914 case "$enable_exportlib" in
1915         yes)
1916                 gmake=
1917                 for x in gmake gnumake make; do
1918                         if $x --version 2>/dev/null | grep GNU > /dev/null; then
1919                                 gmake=$x
1920                                 break;
1921                         fi
1922                 done
1923                 if test -z "$gmake"; then
1924                         AC_MSG_ERROR([exportlib requires GNU make.  Install it or disable the feature.])
1925                 fi
1926                 LIBEXPORT=lib/export
1927                 AC_SUBST(LIBEXPORT)
1928                 BIND9_CO_RULE="%.$O:  \${srcdir}/%.c"
1929                 ;;
1930         no|*)
1931                 BIND9_CO_RULE=".c.$O:"
1932                 ;;
1933 esac
1934 AC_SUBST(BIND9_CO_RULE)
1935
1936 AC_ARG_WITH(export-libdir,
1937         [  --with-export-libdir[=PATH]
1938                           installation directory for the export library
1939                           [[EPREFIX/lib/bind9]]],
1940         export_libdir="$withval",)
1941 if test -z "$export_libdir"; then
1942         export_libdir="\${exec_prefix}/lib/bind9/"
1943 fi
1944 AC_SUBST(export_libdir)
1945
1946 AC_ARG_WITH(export-includedir,
1947         [  --with-export-includedir[=PATH]
1948                           installation directory for the header files of the
1949                           export library [[PREFIX/include/bind9]]],
1950         export_includedir="$withval",)
1951 if test -z "$export_includedir"; then
1952         export_includedir="\${prefix}/include/bind9/"
1953 fi
1954 AC_SUBST(export_includedir)
1955
1956 #
1957 # Here begins a very long section to determine the system's networking
1958 # capabilities.  The order of the tests is significant.
1959 #
1960
1961 #
1962 # IPv6
1963 #
1964 AC_ARG_ENABLE(ipv6,
1965         [  --enable-ipv6           use IPv6 [default=autodetect]])
1966
1967 case "$enable_ipv6" in
1968         yes|''|autodetect)
1969                 AC_DEFINE(WANT_IPV6)
1970                 ;;
1971         no)
1972                 ;;
1973 esac
1974
1975 #
1976 # We do the IPv6 compilation checking after libtool so that we can put
1977 # the right suffix on the files.
1978 #
1979 AC_MSG_CHECKING(for IPv6 structures)
1980 AC_TRY_COMPILE([
1981 #include <sys/types.h>
1982 #include <sys/socket.h>
1983 #include <netinet/in.h>],
1984 [struct sockaddr_in6 sin6; return (0);],
1985         [AC_MSG_RESULT(yes)
1986          found_ipv6=yes],
1987         [AC_MSG_RESULT(no)
1988          found_ipv6=no])
1989
1990 #
1991 # See whether IPv6 support is provided via a Kame add-on.
1992 # This is done before other IPv6 linking tests to LIBS is properly set.
1993 #
1994 AC_MSG_CHECKING(for Kame IPv6 support)
1995 AC_ARG_WITH(kame,
1996         [  --with-kame[=PATH]     use Kame IPv6 [default path /usr/local/v6]],
1997         use_kame="$withval", use_kame="no")
1998
1999 case "$use_kame" in
2000         no)
2001                 ;;
2002         yes)
2003                 kame_path=/usr/local/v6
2004                 ;;
2005         *)
2006                 kame_path="$use_kame"
2007                 ;;
2008 esac
2009
2010 case "$use_kame" in
2011         no)
2012                 AC_MSG_RESULT(no)
2013                 ;;
2014         *)
2015                 if test -f $kame_path/lib/libinet6.a; then
2016                         AC_MSG_RESULT($kame_path/lib/libinet6.a)
2017                         LIBS="-L$kame_path/lib -linet6 $LIBS"
2018                 else
2019                         AC_MSG_ERROR([$kame_path/lib/libinet6.a not found.
2020
2021 Please choose the proper path with the following command:
2022
2023     configure --with-kame=PATH
2024 ])
2025                 fi
2026                 ;;
2027 esac
2028
2029 #
2030 # Whether netinet6/in6.h is needed has to be defined in isc/platform.h.
2031 # Including it on Kame-using platforms is very bad, though, because
2032 # Kame uses #error against direct inclusion.   So include it on only
2033 # the platform that is otherwise broken without it -- BSD/OS 4.0 through 4.1.
2034 # This is done before the in6_pktinfo check because that's what
2035 # netinet6/in6.h is needed for.
2036 #
2037 changequote({, })
2038 case "$host" in
2039 *-bsdi4.[01]*)
2040         ISC_PLATFORM_NEEDNETINET6IN6H="#define ISC_PLATFORM_NEEDNETINET6IN6H 1"
2041         LWRES_PLATFORM_NEEDNETINET6IN6H="#define LWRES_PLATFORM_NEEDNETINET6IN6H 1"
2042         isc_netinet6in6_hack="#include <netinet6/in6.h>"
2043         ;;
2044 *)
2045         ISC_PLATFORM_NEEDNETINET6IN6H="#undef ISC_PLATFORM_NEEDNETINET6IN6H"
2046         LWRES_PLATFORM_NEEDNETINET6IN6H="#undef LWRES_PLATFORM_NEEDNETINET6IN6H"
2047         isc_netinet6in6_hack=""
2048         ;;
2049 esac
2050 changequote([, ])
2051
2052 #
2053 # This is similar to the netinet6/in6.h issue.
2054 #
2055 case "$host" in
2056 *-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
2057         # UnixWare
2058         ISC_PLATFORM_NEEDNETINETIN6H="#define ISC_PLATFORM_NEEDNETINETIN6H 1"
2059         LWRES_PLATFORM_NEEDNETINETIN6H="#define LWRES_PLATFORM_NEEDNETINETIN6H 1"
2060         ISC_PLATFORM_FIXIN6ISADDR="#define ISC_PLATFORM_FIXIN6ISADDR 1"
2061         isc_netinetin6_hack="#include <netinet/in6.h>"
2062         ;;
2063 *)
2064         ISC_PLATFORM_NEEDNETINETIN6H="#undef ISC_PLATFORM_NEEDNETINETIN6H"
2065         LWRES_PLATFORM_NEEDNETINETIN6H="#undef LWRES_PLATFORM_NEEDNETINETIN6H"
2066         ISC_PLATFORM_FIXIN6ISADDR="#undef ISC_PLATFORM_FIXIN6ISADDR"
2067         isc_netinetin6_hack=""
2068         ;;
2069 esac
2070
2071 #
2072 # Now delve deeper into the suitability of the IPv6 support.
2073 #
2074 case "$found_ipv6" in
2075         yes)
2076                 ISC_PLATFORM_HAVEIPV6="#define ISC_PLATFORM_HAVEIPV6 1"
2077                 LWRES_PLATFORM_HAVEIPV6="#define LWRES_PLATFORM_HAVEIPV6 1"
2078
2079                 AC_MSG_CHECKING(for in6_addr)
2080                 AC_TRY_COMPILE([
2081 #include <sys/types.h>
2082 #include <sys/socket.h>
2083 #include <netinet/in.h>
2084 $isc_netinetin6_hack
2085 $isc_netinet6in6_hack
2086 ],
2087 [struct in6_addr in6; return (0);],
2088                 [AC_MSG_RESULT(yes)
2089                  ISC_PLATFORM_HAVEINADDR6="#undef ISC_PLATFORM_HAVEINADDR6"
2090                  LWRES_PLATFORM_HAVEINADDR6="#undef LWRES_PLATFORM_HAVEINADDR6"
2091                  isc_in_addr6_hack=""],
2092                 [AC_MSG_RESULT(no)
2093                  ISC_PLATFORM_HAVEINADDR6="#define ISC_PLATFORM_HAVEINADDR6 1"
2094                  LWRES_PLATFORM_HAVEINADDR6="#define LWRES_PLATFORM_HAVEINADDR6 1"
2095                  isc_in_addr6_hack="#define in6_addr in_addr6"])
2096
2097                 AC_MSG_CHECKING(for in6addr_any)
2098                 AC_TRY_LINK([
2099 #include <sys/types.h>
2100 #include <sys/socket.h>
2101 #include <netinet/in.h>
2102 $isc_netinetin6_hack
2103 $isc_netinet6in6_hack
2104 $isc_in_addr6_hack
2105 ],
2106                 [struct in6_addr in6; in6 = in6addr_any; return (in6.s6_addr[0]);],
2107                         [AC_MSG_RESULT(yes)
2108                          ISC_PLATFORM_NEEDIN6ADDRANY="#undef ISC_PLATFORM_NEEDIN6ADDRANY"
2109                          LWRES_PLATFORM_NEEDIN6ADDRANY="#undef LWRES_PLATFORM_NEEDIN6ADDRANY"],
2110                         [AC_MSG_RESULT(no)
2111                          ISC_PLATFORM_NEEDIN6ADDRANY="#define ISC_PLATFORM_NEEDIN6ADDRANY 1"
2112                          LWRES_PLATFORM_NEEDIN6ADDRANY="#define LWRES_PLATFORM_NEEDIN6ADDRANY 1"])
2113
2114                 AC_MSG_CHECKING(for in6addr_loopback)
2115                 AC_TRY_LINK([
2116 #include <sys/types.h>
2117 #include <sys/socket.h>
2118 #include <netinet/in.h>
2119 $isc_netinetin6_hack
2120 $isc_netinet6in6_hack
2121 $isc_in_addr6_hack
2122 ],
2123                 [struct in6_addr in6; in6 = in6addr_loopback; return (in6.s6_addr[0]);],
2124                         [AC_MSG_RESULT(yes)
2125                          ISC_PLATFORM_NEEDIN6ADDRLOOPBACK="#undef ISC_PLATFORM_NEEDIN6ADDRLOOPBACK"
2126                          LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK="#undef LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK"],
2127                         [AC_MSG_RESULT(no)
2128                          ISC_PLATFORM_NEEDIN6ADDRLOOPBACK="#define ISC_PLATFORM_NEEDIN6ADDRLOOPBACK 1"
2129                          LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK="#define LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK 1"])
2130
2131                 AC_MSG_CHECKING(for sin6_scope_id in struct sockaddr_in6)
2132                 AC_TRY_COMPILE([
2133 #include <sys/types.h>
2134 #include <sys/socket.h>
2135 #include <netinet/in.h>
2136 $isc_netinetin6_hack
2137 $isc_netinet6in6_hack
2138 ],
2139                 [struct sockaddr_in6 xyzzy; xyzzy.sin6_scope_id = 0; return (0);],
2140                         [AC_MSG_RESULT(yes)
2141                          ISC_PLATFORM_HAVESCOPEID="#define ISC_PLATFORM_HAVESCOPEID 1"
2142                          result="#define LWRES_HAVE_SIN6_SCOPE_ID 1"],
2143                         [AC_MSG_RESULT(no)
2144                          ISC_PLATFORM_HAVESCOPEID="#undef ISC_PLATFORM_HAVESCOPEID"
2145                          result="#undef LWRES_HAVE_SIN6_SCOPE_ID"])
2146                 LWRES_HAVE_SIN6_SCOPE_ID="$result"
2147
2148                 AC_MSG_CHECKING(for in6_pktinfo)
2149                 AC_TRY_COMPILE([
2150 #include <sys/types.h>
2151 #include <sys/socket.h>
2152 #include <netinet/in.h>
2153 $isc_netinetin6_hack
2154 $isc_netinet6in6_hack
2155 ],
2156                 [struct in6_pktinfo xyzzy; return (0);],
2157                         [AC_MSG_RESULT(yes)
2158                          ISC_PLATFORM_HAVEIN6PKTINFO="#define ISC_PLATFORM_HAVEIN6PKTINFO 1"],
2159                         [AC_MSG_RESULT(no -- disabling runtime ipv6 support)
2160                          ISC_PLATFORM_HAVEIN6PKTINFO="#undef ISC_PLATFORM_HAVEIN6PKTINFO"])
2161                 ;;
2162         no)
2163                 ISC_PLATFORM_HAVEIPV6="#undef ISC_PLATFORM_HAVEIPV6"
2164                 LWRES_PLATFORM_HAVEIPV6="#undef LWRES_PLATFORM_HAVEIPV6"
2165                 ISC_PLATFORM_NEEDIN6ADDRANY="#undef ISC_PLATFORM_NEEDIN6ADDRANY"
2166                 LWRES_PLATFORM_NEEDIN6ADDRANY="#undef LWRES_PLATFORM_NEEDIN6ADDRANY"
2167                 ISC_PLATFORM_HAVEIN6PKTINFO="#undef ISC_PLATFORM_HAVEIN6PKTINFO"
2168                 LWRES_HAVE_SIN6_SCOPE_ID="#define LWRES_HAVE_SIN6_SCOPE_ID 1"
2169                 ISC_PLATFORM_HAVESCOPEID="#define ISC_PLATFORM_HAVESCOPEID 1"
2170                 ISC_IPV6_H="ipv6.h"
2171                 ISC_IPV6_O="ipv6.$O"
2172                 ISC_ISCIPV6_O="unix/ipv6.$O"
2173                 ISC_IPV6_C="ipv6.c"
2174                 ;;
2175 esac
2176
2177 AC_MSG_CHECKING(for struct sockaddr_storage)
2178 AC_TRY_COMPILE([
2179 #include <sys/types.h>
2180 #include <sys/socket.h>
2181 $isc_netinetin6_hack
2182 $isc_netinet6in6_hack
2183 ],
2184 [struct sockaddr_storage storage; return (0);],
2185 [AC_MSG_RESULT(yes)
2186 ISC_PLATFORM_HAVESOCKADDRSTORAGE="#define ISC_PLATFORM_HAVESOCKADDRSTORAGE 1"],
2187 [AC_MSG_RESULT(no)
2188 ISC_PLATFORM_HAVESOCKADDRSTORAGE="#undef ISC_PLATFORM_HAVESOCKADDRSTORAGE"])
2189
2190 AC_SUBST(ISC_PLATFORM_HAVEIPV6)
2191 AC_SUBST(LWRES_PLATFORM_HAVEIPV6)
2192 AC_SUBST(ISC_PLATFORM_NEEDNETINETIN6H)
2193 AC_SUBST(LWRES_PLATFORM_NEEDNETINETIN6H)
2194 AC_SUBST(ISC_PLATFORM_NEEDNETINET6IN6H)
2195 AC_SUBST(LWRES_PLATFORM_NEEDNETINET6IN6H)
2196 AC_SUBST(ISC_PLATFORM_HAVEINADDR6)
2197 AC_SUBST(LWRES_PLATFORM_HAVEINADDR6)
2198 AC_SUBST(ISC_PLATFORM_NEEDIN6ADDRANY)
2199 AC_SUBST(LWRES_PLATFORM_NEEDIN6ADDRANY)
2200 AC_SUBST(ISC_PLATFORM_NEEDIN6ADDRLOOPBACK)
2201 AC_SUBST(LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK)
2202 AC_SUBST(ISC_PLATFORM_HAVEIN6PKTINFO)
2203 AC_SUBST(ISC_PLATFORM_FIXIN6ISADDR)
2204 AC_SUBST(ISC_PLATFORM_HAVESOCKADDRSTORAGE)
2205 AC_SUBST(ISC_IPV6_H)
2206 AC_SUBST(ISC_IPV6_O)
2207 AC_SUBST(ISC_ISCIPV6_O)
2208 AC_SUBST(ISC_IPV6_C)
2209 AC_SUBST(LWRES_HAVE_SIN6_SCOPE_ID)
2210 AC_SUBST(ISC_PLATFORM_HAVESCOPEID)
2211
2212 AC_MSG_CHECKING([for struct if_laddrreq])
2213 AC_TRY_LINK([
2214 #include <sys/types.h>
2215 #include <net/if6.h>
2216 ],[ struct if_laddrreq a; ],
2217         [AC_MSG_RESULT(yes)
2218         ISC_PLATFORM_HAVEIF_LADDRREQ="#define ISC_PLATFORM_HAVEIF_LADDRREQ 1"],
2219         [AC_MSG_RESULT(no)
2220         ISC_PLATFORM_HAVEIF_LADDRREQ="#undef ISC_PLATFORM_HAVEIF_LADDRREQ"])
2221 AC_SUBST(ISC_PLATFORM_HAVEIF_LADDRREQ)
2222
2223 AC_MSG_CHECKING([for struct if_laddrconf])
2224 AC_TRY_LINK([
2225 #include <sys/types.h>
2226 #include <net/if6.h>
2227 ],[ struct if_laddrconf a; ],
2228         [AC_MSG_RESULT(yes)
2229         ISC_PLATFORM_HAVEIF_LADDRCONF="#define ISC_PLATFORM_HAVEIF_LADDRCONF 1"],
2230         [AC_MSG_RESULT(no)
2231         ISC_PLATFORM_HAVEIF_LADDRCONF="#undef ISC_PLATFORM_HAVEIF_LADDRCONF"])
2232 AC_SUBST(ISC_PLATFORM_HAVEIF_LADDRCONF)
2233
2234 #
2235 # Check for network functions that are often missing.  We do this
2236 # after the libtool checking, so we can put the right suffix on
2237 # the files.  It also needs to come after checking for a Kame add-on,
2238 # which provides some (all?) of the desired functions.
2239 #
2240
2241 AC_MSG_CHECKING([for inet_ntop with IPv6 support])
2242 AC_TRY_RUN([
2243 #include <sys/types.h>
2244 #include <sys/socket.h>
2245 #include <netinet/in.h>
2246 #include <arpa/inet.h>
2247 main() {
2248 char a[16],b[64]; return(inet_ntop(AF_INET6, a, b, sizeof(b)) == (char*)0);}],
2249         [AC_MSG_RESULT(yes)
2250         ISC_PLATFORM_NEEDNTOP="#undef ISC_PLATFORM_NEEDNTOP"],
2251
2252         [AC_MSG_RESULT(no)
2253         ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS inet_ntop.$O"
2254         ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS inet_ntop.c"
2255         ISC_PLATFORM_NEEDNTOP="#define ISC_PLATFORM_NEEDNTOP 1"],
2256         [AC_MSG_RESULT(assuming inet_ntop not needed)
2257         ISC_PLATFORM_NEEDNTOP="#undef ISC_PLATFORM_NEEDNTOP"])
2258
2259
2260 # On NetBSD 1.4.2 and maybe others, inet_pton() incorrectly accepts
2261 # addresses with less than four octets, like "1.2.3".  Also leading
2262 # zeros should also be rejected.
2263
2264 AC_MSG_CHECKING([for working inet_pton with IPv6 support])
2265 AC_TRY_RUN([
2266 #include <sys/types.h>
2267 #include <sys/socket.h>
2268 #include <netinet/in.h>
2269 #include <arpa/inet.h>
2270 main() { char a[16]; return (inet_pton(AF_INET, "1.2.3", a) == 1 ? 1 :
2271                              inet_pton(AF_INET, "1.2.3.04", a) == 1 ? 1 :
2272                              (inet_pton(AF_INET6, "::1.2.3.4", a) != 1)); }],
2273         [AC_MSG_RESULT(yes)
2274         ISC_PLATFORM_NEEDPTON="#undef ISC_PLATFORM_NEEDPTON"],
2275         [AC_MSG_RESULT(no)
2276         ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS inet_pton.$O"
2277         ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS inet_pton.c"
2278         ISC_PLATFORM_NEEDPTON="#define ISC_PLATFORM_NEEDPTON 1"],
2279         [AC_MSG_RESULT(assuming inet_pton needed)
2280         ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS inet_pton.$O"
2281         ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS inet_pton.c"
2282         ISC_PLATFORM_NEEDPTON="#define ISC_PLATFORM_NEEDPTON 1"])
2283
2284 AC_SUBST(ISC_PLATFORM_NEEDNTOP)
2285 AC_SUBST(ISC_PLATFORM_NEEDPTON)
2286
2287 #
2288 # Look for a 4.4BSD-style sa_len member in struct sockaddr.
2289 #
2290 case "$host" in
2291         *-dec-osf*)
2292                 # Turn on 4.4BSD style sa_len support.
2293                 AC_DEFINE(_SOCKADDR_LEN)
2294                 ;;
2295 esac
2296
2297 AC_MSG_CHECKING(for sa_len in struct sockaddr)
2298 AC_TRY_COMPILE([
2299 #include <sys/types.h>
2300 #include <sys/socket.h>],
2301 [struct sockaddr sa; sa.sa_len = 0; return (0);],
2302         [AC_MSG_RESULT(yes)
2303         ISC_PLATFORM_HAVESALEN="#define ISC_PLATFORM_HAVESALEN 1"
2304         LWRES_PLATFORM_HAVESALEN="#define LWRES_PLATFORM_HAVESALEN 1"],
2305         [AC_MSG_RESULT(no)
2306         ISC_PLATFORM_HAVESALEN="#undef ISC_PLATFORM_HAVESALEN"
2307         LWRES_PLATFORM_HAVESALEN="#undef LWRES_PLATFORM_HAVESALEN"])
2308 AC_SUBST(ISC_PLATFORM_HAVESALEN)
2309 AC_SUBST(LWRES_PLATFORM_HAVESALEN)
2310
2311 #
2312 # Look for a 4.4BSD or 4.3BSD struct msghdr
2313 #
2314 AC_MSG_CHECKING(for struct msghdr flavor)
2315 AC_TRY_COMPILE([
2316 #include <sys/types.h>
2317 #include <sys/socket.h>],
2318 [struct msghdr msg; msg.msg_flags = 0; return (0);],
2319         [AC_MSG_RESULT(4.4BSD)
2320         ISC_PLATFORM_MSGHDRFLAVOR="#define ISC_NET_BSD44MSGHDR 1"],
2321         [AC_MSG_RESULT(4.3BSD)
2322         ISC_PLATFORM_MSGHDRFLAVOR="#define ISC_NET_BSD43MSGHDR 1"])
2323 AC_SUBST(ISC_PLATFORM_MSGHDRFLAVOR)
2324
2325 #
2326 # Look for in_port_t.
2327 #
2328 AC_MSG_CHECKING(for type in_port_t)
2329 AC_TRY_COMPILE([
2330 #include <sys/types.h>
2331 #include <netinet/in.h>],
2332 [in_port_t port = 25; return (0);],
2333         [AC_MSG_RESULT(yes)
2334         ISC_PLATFORM_NEEDPORTT="#undef ISC_PLATFORM_NEEDPORTT"],
2335         [AC_MSG_RESULT(no)
2336         ISC_PLATFORM_NEEDPORTT="#define ISC_PLATFORM_NEEDPORTT 1"])
2337 AC_SUBST(ISC_PLATFORM_NEEDPORTT)
2338
2339 #
2340 # Check for addrinfo
2341 #
2342 AC_MSG_CHECKING(for struct addrinfo)
2343 AC_TRY_COMPILE([
2344 #include <netdb.h>],
2345 [struct addrinfo a; return (0);],
2346         [AC_MSG_RESULT(yes)
2347         ISC_LWRES_NEEDADDRINFO="#undef ISC_LWRES_NEEDADDRINFO"
2348         ISC_IRS_NEEDADDRINFO="#undef ISC_IRS_NEEDADDRINFO"
2349         AC_DEFINE(HAVE_ADDRINFO)],
2350         [AC_MSG_RESULT(no)
2351         ISC_LWRES_NEEDADDRINFO="#define ISC_LWRES_NEEDADDRINFO 1"
2352         ISC_IRS_NEEDADDRINFO="#define ISC_IRS_NEEDADDRINFO 1"])
2353 AC_SUBST(ISC_LWRES_NEEDADDRINFO)
2354 AC_SUBST(ISC_IRS_NEEDADDRINFO)
2355
2356 #
2357 # Check for rrsetinfo
2358 #
2359 AC_MSG_CHECKING(for struct rrsetinfo)
2360 AC_TRY_COMPILE([
2361 #include <netdb.h>],
2362 [struct rrsetinfo r; return (0);],
2363         [AC_MSG_RESULT(yes)
2364         ISC_LWRES_NEEDRRSETINFO="#undef ISC_LWRES_NEEDRRSETINFO"],
2365         [AC_MSG_RESULT(no)
2366         ISC_LWRES_NEEDRRSETINFO="#define ISC_LWRES_NEEDRRSETINFO 1"])
2367 AC_SUBST(ISC_LWRES_NEEDRRSETINFO)
2368
2369 AC_MSG_CHECKING(for int sethostent)
2370 AC_TRY_COMPILE([
2371 #include <netdb.h>],
2372 [int i = sethostent(0); return(0);],
2373         [AC_MSG_RESULT(yes)
2374         ISC_LWRES_SETHOSTENTINT="#define ISC_LWRES_SETHOSTENTINT 1"],
2375         [AC_MSG_RESULT(no)
2376         ISC_LWRES_SETHOSTENTINT="#undef ISC_LWRES_SETHOSTENTINT"])
2377 AC_SUBST(ISC_LWRES_SETHOSTENTINT)
2378
2379 AC_MSG_CHECKING(for int endhostent)
2380 AC_TRY_COMPILE([
2381 #include <netdb.h>],
2382 [int i = endhostent(); return(0);],
2383         [AC_MSG_RESULT(yes)
2384         ISC_LWRES_ENDHOSTENTINT="#define ISC_LWRES_ENDHOSTENTINT 1"],
2385         [AC_MSG_RESULT(no)
2386         ISC_LWRES_ENDHOSTENTINT="#undef ISC_LWRES_ENDHOSTENTINT"])
2387 AC_SUBST(ISC_LWRES_ENDHOSTENTINT)
2388
2389 AC_MSG_CHECKING(for getnetbyaddr(in_addr_t, ...))
2390 AC_TRY_COMPILE([
2391 #include <netdb.h>
2392 struct netent *getnetbyaddr(in_addr_t, int);],
2393 [],
2394         [AC_MSG_RESULT(yes)
2395         ISC_LWRES_GETNETBYADDRINADDR="#define ISC_LWRES_GETNETBYADDRINADDR 1"],
2396         [AC_MSG_RESULT(no)
2397         ISC_LWRES_GETNETBYADDRINADDR="#undef ISC_LWRES_GETNETBYADDRINADDR"])
2398 AC_SUBST(ISC_LWRES_GETNETBYADDRINADDR)
2399
2400 AC_MSG_CHECKING(for int setnetent)
2401 AC_TRY_COMPILE([
2402 #include <netdb.h>],
2403 [int i = setnetent(0); return(0);],
2404         [AC_MSG_RESULT(yes)
2405         ISC_LWRES_SETNETENTINT="#define ISC_LWRES_SETNETENTINT 1"],
2406         [AC_MSG_RESULT(no)
2407         ISC_LWRES_SETNETENTINT="#undef ISC_LWRES_SETNETENTINT"])
2408 AC_SUBST(ISC_LWRES_SETNETENTINT)
2409
2410 AC_MSG_CHECKING(for int endnetent)
2411 AC_TRY_COMPILE([
2412 #include <netdb.h>],
2413 [int i = endnetent(); return(0);],
2414         [AC_MSG_RESULT(yes)
2415         ISC_LWRES_ENDNETENTINT="#define ISC_LWRES_ENDNETENTINT 1"],
2416         [AC_MSG_RESULT(no)
2417         ISC_LWRES_ENDNETENTINT="#undef ISC_LWRES_ENDNETENTINT"])
2418 AC_SUBST(ISC_LWRES_ENDNETENTINT)
2419
2420 AC_MSG_CHECKING(for gethostbyaddr(const void *, size_t, ...))
2421 AC_TRY_COMPILE([
2422 #include <netdb.h>
2423 struct hostent *gethostbyaddr(const void *, size_t, int);],
2424 [return(0);],
2425         [AC_MSG_RESULT(yes)
2426         ISC_LWRES_GETHOSTBYADDRVOID="#define ISC_LWRES_GETHOSTBYADDRVOID 1"],
2427         [AC_MSG_RESULT(no)
2428         ISC_LWRES_GETHOSTBYADDRVOID="#undef ISC_LWRES_GETHOSTBYADDRVOID"])
2429 AC_SUBST(ISC_LWRES_GETHOSTBYADDRVOID)
2430
2431 AC_MSG_CHECKING(for h_errno in netdb.h)
2432 AC_TRY_COMPILE([
2433 #include <netdb.h>],
2434 [h_errno = 1; return(0);],
2435         [AC_MSG_RESULT(yes)
2436         ISC_LWRES_NEEDHERRNO="#undef ISC_LWRES_NEEDHERRNO"],
2437         [AC_MSG_RESULT(no)
2438         ISC_LWRES_NEEDHERRNO="#define ISC_LWRES_NEEDHERRNO 1"])
2439 AC_SUBST(ISC_LWRES_NEEDHERRNO)
2440
2441 #
2442 # Sadly, the definitions of system-supplied getnameinfo(3) vary.  Try to catch
2443 # known variations here:
2444 #
2445 AC_MSG_CHECKING(for getnameinfo prototype definitions)
2446 AC_TRY_COMPILE([
2447 #include <sys/types.h>
2448 #include <sys/socket.h>
2449 #include <netdb.h>
2450 int getnameinfo(const struct sockaddr *, socklen_t, char *,
2451                 socklen_t, char *, socklen_t, unsigned int);],
2452 [ return (0);],
2453         [AC_MSG_RESULT(socklen_t for buflen; u_int for flags)
2454          AC_DEFINE(IRS_GETNAMEINFO_SOCKLEN_T, socklen_t,
2455                    [Define to the sockaddr length type used by getnameinfo(3).])
2456          AC_DEFINE(IRS_GETNAMEINFO_BUFLEN_T, socklen_t,
2457                    [Define to the buffer length type used by getnameinfo(3).])
2458          AC_DEFINE(IRS_GETNAMEINFO_FLAGS_T, unsigned int,
2459                    [Define to the flags type used by getnameinfo(3).])],
2460 [AC_TRY_COMPILE([
2461 #include <sys/types.h>
2462 #include <sys/socket.h>
2463 #include <netdb.h>
2464 int getnameinfo(const struct sockaddr *, socklen_t, char *,
2465                 size_t, char *, size_t, int);],
2466 [ return (0);],
2467         [AC_MSG_RESULT(size_t for buflen; int for flags)
2468          AC_DEFINE(IRS_GETNAMEINFO_SOCKLEN_T, socklen_t)
2469          AC_DEFINE(IRS_GETNAMEINFO_BUFLEN_T, size_t)
2470          AC_DEFINE(IRS_GETNAMEINFO_FLAGS_T, int)],
2471 [AC_TRY_COMPILE([
2472 #include <sys/types.h>
2473 #include <sys/socket.h>
2474 #include <netdb.h>
2475 int getnameinfo(const struct sockaddr *, size_t, char *,
2476                 size_t, char *, size_t, int);],
2477 [ return (0);],
2478         [AC_MSG_RESULT(size_t for buflen; int for flags)
2479          AC_DEFINE(IRS_GETNAMEINFO_SOCKLEN_T, size_t)
2480          AC_DEFINE(IRS_GETNAMEINFO_BUFLEN_T, size_t)
2481          AC_DEFINE(IRS_GETNAMEINFO_FLAGS_T, int)],
2482 [AC_MSG_RESULT(not match any subspecies; assume standard definition)
2483 AC_DEFINE(IRS_GETNAMEINFO_SOCKLEN_T, socklen_t)
2484 AC_DEFINE(IRS_GETNAMEINFO_BUFLEN_T, socklen_t)
2485 AC_DEFINE(IRS_GETNAMEINFO_FLAGS_T, int)])])])
2486
2487 #
2488 # ...and same for gai_strerror().
2489 #
2490 AC_MSG_CHECKING(for gai_strerror prototype definitions)
2491 AC_TRY_COMPILE([
2492 #include <sys/types.h>
2493 #include <sys/socket.h>
2494 #include <netdb.h>
2495 char *gai_strerror(int ecode);],
2496 [ return (0); ],
2497         [AC_MSG_RESULT(returning char *)
2498          AC_DEFINE([IRS_GAISTRERROR_RETURN_T], [char *],
2499          [return type of gai_strerror])],
2500 [AC_MSG_RESULT(not match any subspecies; assume standard definition)
2501 AC_DEFINE([IRS_GAISTRERROR_RETURN_T], [const char *])])
2502
2503 AC_CHECK_FUNC(getipnodebyname,
2504         [ISC_LWRES_GETIPNODEPROTO="#undef ISC_LWRES_GETIPNODEPROTO"],
2505         [ISC_LWRES_GETIPNODEPROTO="#define ISC_LWRES_GETIPNODEPROTO 1"])
2506 AC_CHECK_FUNC(getnameinfo,
2507         [ISC_LWRES_GETNAMEINFOPROTO="#undef ISC_LWRES_GETNAMEINFOPROTO"],
2508         [ISC_LWRES_GETNAMEINFOPROTO="#define ISC_LWRES_GETNAMEINFOPROTO 1"])
2509 AC_CHECK_FUNC(getaddrinfo,
2510         [ISC_LWRES_GETADDRINFOPROTO="#undef ISC_LWRES_GETADDRINFOPROTO"
2511         AC_DEFINE(HAVE_GETADDRINFO)],
2512         [ISC_LWRES_GETADDRINFOPROTO="#define ISC_LWRES_GETADDRINFOPROTO 1"])
2513 AC_CHECK_FUNC(gai_strerror, AC_DEFINE(HAVE_GAISTRERROR))
2514 AC_SUBST(ISC_LWRES_GETIPNODEPROTO)
2515 AC_SUBST(ISC_LWRES_GETADDRINFOPROTO)
2516 AC_SUBST(ISC_LWRES_GETNAMEINFOPROTO)
2517 AC_SUBST(ISC_IRS_GETNAMEINFOSOCKLEN)
2518
2519 AC_ARG_ENABLE(getifaddrs,
2520 [  --enable-getifaddrs     Enable the use of getifaddrs() [[yes|no]].],
2521     want_getifaddrs="$enableval",  want_getifaddrs="yes")
2522
2523 #
2524 # This interface iteration code for getifaddrs() will fall back to using
2525 # /proc/net/if_inet6 if getifaddrs() in glibc doesn't return any IPv6
2526 # addresses.
2527 #
2528 case $want_getifaddrs in
2529 glibc)
2530 AC_MSG_WARN("--enable-getifaddrs=glibc is no longer required")
2531 AC_CHECK_FUNC(getifaddrs, AC_DEFINE(HAVE_GETIFADDRS))
2532 ;;
2533 yes)
2534 AC_CHECK_FUNC(getifaddrs, AC_DEFINE(HAVE_GETIFADDRS))
2535 ;;
2536 no)
2537 ;;
2538 esac
2539
2540 #
2541 # Look for a sysctl call to get the list of network interfaces.
2542 #
2543 case $ac_cv_header_sys_sysctl_h in
2544 yes)
2545 AC_MSG_CHECKING(for interface list sysctl)
2546 AC_EGREP_CPP(found_rt_iflist, [
2547 #include <sys/param.h>
2548 #include <sys/sysctl.h>
2549 #include <sys/socket.h>
2550 #ifdef NET_RT_IFLIST
2551 found_rt_iflist
2552 #endif
2553 ],
2554         [AC_MSG_RESULT(yes)
2555          AC_DEFINE(HAVE_IFLIST_SYSCTL)],
2556         [AC_MSG_RESULT(no)])
2557 ;;
2558 esac
2559
2560 #
2561 # Check for some other useful functions that are not ever-present.
2562 #
2563
2564 # We test for strsep() using AC_TRY_LINK instead of AC_CHECK_FUNC
2565 # because AIX 4.3.3 with patches for bos.adt.include to version 4.3.3.77
2566 # reportedly defines strsep() without declaring it in <string.h> when
2567 # -D_LINUX_SOURCE_COMPAT is not defined [RT #2190], and
2568 # AC_CHECK_FUNC() incorrectly succeeds because it declares
2569 # the function itself.
2570 AC_MSG_CHECKING(for correctly declared strsep())
2571 AC_TRY_LINK([#include <string.h>], [char *sp; char *foo = strsep(&sp, ".");],
2572         [AC_MSG_RESULT(yes); ISC_PLATFORM_NEEDSTRSEP="#undef ISC_PLATFORM_NEEDSTRSEP"],
2573         [AC_MSG_RESULT(no); ISC_PLATFORM_NEEDSTRSEP="#define ISC_PLATFORM_NEEDSTRSEP 1"])
2574 AC_SUBST(ISC_PLATFORM_NEEDSTRSEP)
2575
2576 AC_CHECK_FUNC(memmove,
2577         [ISC_PLATFORM_NEEDMEMMOVE="#undef ISC_PLATFORM_NEEDMEMMOVE"],
2578         [ISC_PLATFORM_NEEDMEMMOVE="#define ISC_PLATFORM_NEEDMEMMOVE 1"])
2579 AC_SUBST(ISC_PLATFORM_NEEDMEMMOVE)
2580
2581 AC_CHECK_FUNC(strtoul,
2582         [ISC_PLATFORM_NEEDSTRTOUL="#undef ISC_PLATFORM_NEEDSTRTOUL"
2583          LWRES_PLATFORM_NEEDSTRTOUL="#undef LWRES_PLATFORM_NEEDSTRTOUL"
2584          GENRANDOMLIB=""],
2585         [ISC_PLATFORM_NEEDSTRTOUL="#define ISC_PLATFORM_NEEDSTRTOUL 1"
2586          LWRES_PLATFORM_NEEDSTRTOUL="#define LWRES_PLATFORM_NEEDSTRTOUL 1"
2587          GENRANDOMLIB='${ISCLIBS}'])
2588 AC_SUBST(ISC_PLATFORM_NEEDSTRTOUL)
2589 AC_SUBST(LWRES_PLATFORM_NEEDSTRTOUL)
2590 AC_SUBST(GENRANDOMLIB)
2591
2592 AC_CHECK_FUNC(strlcpy,
2593         [ISC_PLATFORM_NEEDSTRLCPY="#undef ISC_PLATFORM_NEEDSTRLCPY"
2594          LWRES_PLATFORM_NEEDSTRLCPY="#undef LWRES_PLATFORM_NEEDSTRLCPY"],
2595         [ISC_PLATFORM_NEEDSTRLCPY="#define ISC_PLATFORM_NEEDSTRLCPY 1"
2596          LWRES_PLATFORM_NEEDSTRLCPY="#define LWRES_PLATFORM_NEEDSTRLCPY 1"])
2597 AC_SUBST(ISC_PLATFORM_NEEDSTRLCPY)
2598 AC_SUBST(LWRES_PLATFORM_NEEDSTRLCPY)
2599
2600 AC_CHECK_FUNC(strlcat,
2601         [ISC_PLATFORM_NEEDSTRLCAT="#undef ISC_PLATFORM_NEEDSTRLCAT"],
2602         [ISC_PLATFORM_NEEDSTRLCAT="#define ISC_PLATFORM_NEEDSTRLCAT 1"])
2603 AC_SUBST(ISC_PLATFORM_NEEDSTRLCAT)
2604
2605 AC_CHECK_FUNC(strcasestr,
2606         [ISC_PLATFORM_NEEDSTRCASESTR="#undef ISC_PLATFORM_NEEDSTRCASESTR"],
2607         [ISC_PLATFORM_NEEDSTRCASESTR="#define ISC_PLATFORM_NEEDSTRCASESTR 1"])
2608 AC_SUBST(ISC_PLATFORM_NEEDSTRCASESTR)
2609
2610 AC_SUBST(READLINE_LIB)
2611 AC_ARG_WITH(readline,
2612         [  --with-readline[=LIBSPEC]    specify readline library [default auto]],
2613         readline="$withval", readline="auto")
2614 case "$readline" in
2615 no)     ;;
2616 yes|auto)
2617         saved_LIBS="$LIBS"
2618         for readline in -ledit -lreadline
2619         do
2620                 LIBS="$readline"
2621                 AC_MSG_NOTICE(checking for readline with $readline)
2622                 AC_CHECK_FUNCS(readline)
2623                 if test "$ac_cv_func_readline" = "yes"
2624                 then
2625                         READLINE_LIB="$readline"
2626                         break
2627                 fi
2628                 for lib in -lterminfo -ltermcap -lncurses -lcurses
2629                 do
2630                         AC_MSG_NOTICE(checking for readline with $readline $lib)
2631                         unset ac_cv_func_readline
2632                         LIBS="$readline $lib"
2633                         AC_CHECK_FUNCS(readline)
2634                         if test "$ac_cv_func_readline" = "yes"
2635                         then
2636                                 READLINE_LIB="$readline $lib"
2637                                 break
2638                         fi
2639                 done
2640                 if test "$ac_cv_func_readline" = "yes"
2641                 then
2642                         break
2643                 fi
2644         done
2645         LIBS="$saved_LIBS"
2646         ;;
2647 *)
2648         saved_LIBS="$LIBS"
2649         LIBS="$readline"
2650         AC_MSG_NOTICE(checking for readline with $readline)
2651         AC_CHECK_FUNCS(readline)
2652         if test "$ac_cv_func_readline" = "yes"
2653         then
2654                 READLINE_LIB="$readline"
2655         else
2656                 for lib in -lterminfo -ltermcap -lncurses -lcurses
2657                 do
2658                         AC_MSG_NOTICE(checking for readline with $readline $lib)
2659                         unset ac_cv_func_readline
2660                         LIBS="$readline $lib"
2661                         AC_CHECK_FUNCS(readline)
2662                         if test "$ac_cv_func_readline" = "yes"
2663                         then
2664                                 READLINE_LIB="$readline $lib"
2665                                 break
2666                         fi
2667                 done
2668         fi
2669         LIBS="$saved_LIBS"
2670         ;;
2671 esac
2672
2673 ISC_PRINT_OBJS=
2674 ISC_PRINT_SRCS=
2675 ISC_PLATFORM_NEEDPRINTF='#undef ISC_PLATFORM_NEEDPRINTF'
2676 ISC_PLATFORM_NEEDFPRINTF='#undef ISC_PLATFORM_NEEDFPRINTF'
2677 ISC_PLATFORM_NEEDSPRINTF='#undef ISC_PLATFORM_NEEDSPRINTF'
2678 ISC_PLATFORM_NEEDVSNPRINTF='#undef ISC_PLATFORM_NEEDVSNPRINTF'
2679 LWRES_PLATFORM_NEEDVSNPRINTF='#undef LWRES_PLATFORM_NEEDVSNPRINTF'
2680
2681 AC_MSG_CHECKING(sprintf return type)
2682 AC_TRY_COMPILE([
2683 #include <stdio.h>
2684 ],
2685 [ char buf[2]; return(*sprintf(buf,"x"));],
2686 [AC_MSG_RESULT(char *)
2687 ISC_PRINT_OBJS="print.$O"
2688 ISC_PRINT_SRCS="print.c"
2689 ISC_PLATFORM_NEEDSPRINTF="#define ISC_PLATFORM_NEEDSPRINTF"
2690 LWRES_PLATFORM_NEEDSPRINTF="#define LWRES_PLATFORM_NEEDSPRINTF"
2691 ],[AC_MSG_RESULT(int)])
2692
2693 AC_CHECK_FUNC(vsnprintf, [],
2694         [ISC_PRINT_OBJS="print.$O"
2695          ISC_PRINT_SRCS="print.c"
2696          ISC_PLATFORM_NEEDVSNPRINTF="#define ISC_PLATFORM_NEEDVSNPRINTF 1"
2697          LWRES_PLATFORM_NEEDVSNPRINTF="#define LWRES_PLATFORM_NEEDVSNPRINTF 1"])
2698
2699 AC_MSG_CHECKING(printf for %z support)
2700 AC_TRY_RUN([
2701 #include <stdio.h>
2702 main() {
2703         size_t j = 0;
2704         char buf[100];
2705         buf[0] = 0;
2706         sprintf(buf, "%zu", j);
2707         exit(strcmp(buf, "0") != 0);
2708 }
2709 ],
2710         [AC_MSG_RESULT(yes)],
2711         [AC_MSG_RESULT(no)
2712         ISC_PRINT_OBJS="print.$O"
2713         ISC_PRINT_SRCS="print.c"
2714         ISC_PLATFORM_NEEDPRINTF='#define ISC_PLATFORM_NEEDPRINTF 1'
2715         ISC_PLATFORM_NEEDFPRINTF='#define ISC_PLATFORM_NEEDFPRINTF 1'
2716         ISC_PLATFORM_NEEDFSRINTF='#define ISC_PLATFORM_NEEDSPRINTF 1'
2717         ISC_PLATFORM_NEEDVSNPRINTF="#define ISC_PLATFORM_NEEDVSNPRINTF 1"
2718         LWRES_PLATFORM_NEEDVSNPRINTF="#define LWRES_PLATFORM_NEEDVSNPRINTF 1"],
2719         [AC_MSG_RESULT(assuming target platform supports %z)])
2720
2721 AC_SUBST(ISC_PLATFORM_NEEDPRINTF)
2722 AC_SUBST(ISC_PLATFORM_NEEDFPRINTF)
2723 AC_SUBST(ISC_PLATFORM_NEEDSPRINTF)
2724 AC_SUBST(ISC_PLATFORM_NEEDVSNPRINTF)
2725 AC_SUBST(LWRES_PLATFORM_NEEDSPRINTF)
2726 AC_SUBST(LWRES_PLATFORM_NEEDVSNPRINTF)
2727
2728 ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS $ISC_PRINT_OBJS"
2729 ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS $ISC_PRINT_SRCS"
2730 AC_SUBST(ISC_EXTRA_OBJS)
2731 AC_SUBST(ISC_EXTRA_SRCS)
2732
2733 AC_CHECK_FUNC(strerror, AC_DEFINE(HAVE_STRERROR))
2734 #
2735 # Use our own SPNEGO implementation?
2736 #
2737 AC_ARG_ENABLE(isc-spnego,
2738         [  --disable-isc-spnego    use SPNEGO from GSSAPI library])
2739
2740 if test -n "$USE_GSSAPI"
2741 then
2742         case "$enable_isc_spnego" in
2743                 yes|'')
2744                         USE_ISC_SPNEGO='-DUSE_ISC_SPNEGO'
2745                         DST_EXTRA_OBJS="$DST_EXTRA_OBJS spnego.$O"
2746                         DST_EXTRA_SRCS="$DST_EXTRA_SRCS spnego.c"
2747                         AC_MSG_RESULT(using SPNEGO from lib/dns)
2748                         ;;
2749                 no)
2750                         AC_MSG_RESULT(using SPNEGO from GSSAPI library)
2751                         ;;
2752         esac
2753 fi
2754
2755 AC_SUBST(USE_ISC_SPNEGO)
2756
2757 AC_SUBST(DST_EXTRA_OBJS)
2758 AC_SUBST(DST_EXTRA_SRCS)
2759
2760 # Determine the printf format characters to use when printing
2761 # values of type isc_int64_t. This will normally be "ll", but where
2762 # the compiler treats "long long" as a alias for "long" and printf
2763 # doesn't know about "long long" use "l".  Hopefully the sprintf
2764 # will produce a inconsistent result in the later case.  If the compiler
2765 # fails due to seeing "%lld" we fall back to "l".
2766 #
2767 # Digital Unix 4.0 (gcc?) (long long) is 64 bits as is its long. It uses
2768 # %ld even for (long long)/
2769 #
2770 # Win32 uses "%I64d", but that's defined elsewhere since we don't use
2771 # configure on Win32.
2772 #
2773 AC_MSG_CHECKING(printf format modifier for 64-bit integers)
2774 AC_TRY_RUN([
2775 #include <stdio.h>
2776 main() {
2777         long long int j = 0;
2778         char buf[100];
2779         buf[0] = 0;
2780         sprintf(buf, "%lld", j);
2781         exit((sizeof(long long int) != sizeof(long int))? 0 :
2782              (strcmp(buf, "0") != 0));
2783 }
2784 ],
2785         [AC_MSG_RESULT(ll)
2786         ISC_PLATFORM_QUADFORMAT='#define ISC_PLATFORM_QUADFORMAT "ll"'
2787         LWRES_PLATFORM_QUADFORMAT='#define LWRES_PLATFORM_QUADFORMAT "ll"'],
2788         [AC_MSG_RESULT(l)
2789         ISC_PLATFORM_QUADFORMAT='#define ISC_PLATFORM_QUADFORMAT "l"'
2790         LWRES_PLATFORM_QUADFORMAT='#define LWRES_PLATFORM_QUADFORMAT "l"'],
2791         [AC_MSG_RESULT(assuming target platform uses ll)
2792         ISC_PLATFORM_QUADFORMAT='#define ISC_PLATFORM_QUADFORMAT "ll"'
2793         LWRES_PLATFORM_QUADFORMAT='#define LWRES_PLATFORM_QUADFORMAT "ll"'])
2794 AC_SUBST(ISC_PLATFORM_QUADFORMAT)
2795 AC_SUBST(LWRES_PLATFORM_QUADFORMAT)
2796
2797
2798 #
2799 # Security Stuff
2800 #
2801 # Note it is very recommended to *not* disable chroot(),
2802 # this is only because chroot() was made obsolete by Posix.
2803 AC_ARG_ENABLE(chroot,
2804         [  --disable-chroot        disable chroot])
2805 case "$enable_chroot" in
2806         yes|'')
2807                 AC_CHECK_FUNCS(chroot)
2808                 ;;
2809         no)
2810                 ;;
2811 esac
2812 AC_ARG_ENABLE(linux-caps,
2813         [  --disable-linux-caps   disable linux capabilities])
2814 case "$enable_linux_caps" in
2815         yes|'')
2816                 AC_CHECK_HEADERS(linux/types.h)
2817                 AC_CHECK_HEADERS([sys/capability.h])
2818                 AC_CHECK_HEADERS([linux/capability.h], [], [],
2819                                  [#ifdef HAVE_LINUX_TYPES_H
2820                                   #include <linux/types.h>
2821                                   #endif
2822                                  ])
2823                 AC_CHECK_LIB(cap, cap_set_proc)
2824                 ;;
2825         no)
2826                 ;;
2827 esac
2828 AC_CHECK_HEADERS(sys/prctl.h)
2829
2830 AC_CHECK_HEADERS(sys/un.h,
2831 ISC_PLATFORM_HAVESYSUNH="#define ISC_PLATFORM_HAVESYSUNH 1"
2832 ,
2833 ISC_PLATFORM_HAVESYSUNH="#undef ISC_PLATFORM_HAVESYSUNH"
2834 )
2835 AC_SUBST(ISC_PLATFORM_HAVESYSUNH)
2836
2837 case "$host" in
2838 *-solaris*)
2839         AC_DEFINE(NEED_SECURE_DIRECTORY, 1,
2840                   [Define if connect does not honour the permission on the UNIX domain socket.])
2841         ;;
2842 *-sunos*)
2843         AC_DEFINE(NEED_SECURE_DIRECTORY, 1,
2844                   [Define if connect does not honour the permission on the UNIX domain socket.])
2845         ;;
2846 esac
2847
2848 #
2849 # Time Zone Stuff
2850 #
2851 AC_CHECK_FUNC(tzset, AC_DEFINE(HAVE_TZSET))
2852
2853 AC_MSG_CHECKING(for optarg declaration)
2854 AC_TRY_COMPILE([
2855 #include <unistd.h>
2856 ],
2857 [optarg = 0;],
2858 [AC_MSG_RESULT(yes)],
2859 [AC_MSG_RESULT(no)
2860 GEN_NEED_OPTARG="-DNEED_OPTARG=1"
2861 AC_DEFINE(NEED_OPTARG, 1, [Defined if extern char *optarg is not declared.])])
2862
2863 #
2864 # BSD/OS, and perhaps some others, don't define rlim_t.
2865 #
2866 AC_MSG_CHECKING(for type rlim_t)
2867 AC_TRY_COMPILE([
2868 #include <sys/types.h>
2869 #include <sys/time.h>
2870 #include <sys/resource.h>],
2871 [rlim_t rl = 19671212; return (0);],
2872 [AC_MSG_RESULT(yes)
2873  ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE rlim_t"],
2874 [AC_MSG_RESULT(no)
2875
2876 AC_MSG_CHECKING(type of rlim_cur)
2877 AC_TRY_RUN([
2878 #include <sys/types.h>
2879 #include <sys/time.h>
2880 #include <sys/resource.h>
2881 main() { struct rlimit r; exit(!(sizeof(r.rlim_cur) == sizeof(int)));}],
2882 [AC_MSG_RESULT(int)
2883 ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE int"],
2884 [
2885 AC_TRY_RUN([
2886 #include <sys/types.h>
2887 #include <sys/time.h>
2888 #include <sys/resource.h>
2889 main() { struct rlimit r; exit(!(sizeof(r.rlim_cur) == sizeof(long int)));}],
2890 [AC_MSG_RESULT(long int)
2891 ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE long int"],
2892 [
2893 AC_TRY_RUN([
2894 #include <sys/types.h>
2895 #include <sys/time.h>
2896 #include <sys/resource.h>
2897 main() { struct rlimit r; exit((!sizeof(r.rlim_cur) == sizeof(long long int)));}],
2898 [AC_MSG_RESULT(long long int)
2899 ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE long long int"],
2900 [AC_MSG_ERROR([unable to determine sizeof rlim_cur])
2901 ],[AC_MSG_ERROR(this cannot happen)])
2902 ],[AC_MSG_ERROR(this cannot happen)])
2903 ],[
2904 AC_ARG_WITH(rlimtype, , rlimtype="$withval", rlimtype="long long int")
2905 ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE $rlimtype"
2906 AC_MSG_RESULT(cannot determine type of rlim_cur when cross compiling - assuming $rlimtype)])
2907 ])
2908 AC_SUBST(ISC_PLATFORM_RLIMITTYPE)
2909
2910 #
2911 # Older HP-UX doesn't have gettune
2912 #
2913 case "$host" in
2914         *-hp-hpux*)
2915                 AC_CHECK_HEADERS(sys/dyntune.h)
2916                 ;;
2917         *)
2918                 ;;
2919 esac
2920
2921
2922 #
2923 # Compaq TruCluster requires more code for handling cluster IP aliases
2924 #
2925 case "$host" in
2926         *-dec-osf*)
2927                 AC_CHECK_LIB(clua, clua_getaliasaddress, LIBS="-lclua $LIBS")
2928                 AC_CHECK_FUNC(clua_getaliasaddress,
2929                                 AC_DEFINE(HAVE_TRUCLUSTER, 1,
2930                                         [Define if running under Compaq TruCluster]))
2931                 ;;
2932         *)
2933                 ;;
2934 esac
2935
2936 #
2937 # Some hosts need msg_namelen to match the size of the socket structure.
2938 # Some hosts don't set msg_namelen appropriately on return from recvmsg().
2939 #
2940 case $host in
2941 *os2*|*hp-mpeix*)
2942         AC_DEFINE(BROKEN_RECVMSG, 1,
2943                   [Define if recvmsg() does not meet all of the BSD socket API specifications.])
2944         ;;
2945 esac
2946
2947 #
2948 # Microsoft has their own way of handling shared libraries that requires
2949 # additional qualifiers on extern variables.  Unix systems don't need it.
2950 #
2951 AC_SUBST(ISC_PLATFORM_USEDECLSPEC)
2952 ISC_PLATFORM_USEDECLSPEC="#undef ISC_PLATFORM_USEDECLSPEC"
2953 AC_SUBST(LWRES_PLATFORM_USEDECLSPEC)
2954 LWRES_PLATFORM_USEDECLSPEC="#undef LWRES_PLATFORM_USEDECLSPEC"
2955 AC_SUBST(IRS_PLATFORM_USEDECLSPEC)
2956 IRS_PLATFORM_USEDECLSPEC="#undef IRS_PLATFORM_USEDECLSPEC"
2957
2958 #
2959 # Random remaining OS-specific issues involving compiler warnings.
2960 # XXXDCL print messages to indicate some compensation is being done?
2961 #
2962 AC_SUBST(ISC_PLATFORM_BRACEPTHREADONCEINIT)
2963 ISC_PLATFORM_BRACEPTHREADONCEINIT="#undef ISC_PLATFORM_BRACEPTHREADONCEINIT"
2964
2965 case "$host" in
2966         *-aix5.[[123]].*)
2967                 hack_shutup_pthreadonceinit=yes
2968                 ;;
2969         *-bsdi3.1*)
2970                 hack_shutup_sputaux=yes
2971                 ;;
2972         *-bsdi4.0*)
2973                 hack_shutup_sigwait=yes
2974                 hack_shutup_sputaux=yes
2975                 ;;
2976         [*-bsdi4.[12]*])
2977                 hack_shutup_stdargcast=yes
2978                 ;;
2979         [*-solaris2.[89]])
2980                 hack_shutup_pthreadonceinit=yes
2981                 ;;
2982         *-solaris2.1[[0-9]])
2983                 AC_TRY_COMPILE([ #include <pthread.h> ], [ static pthread_once_t once_test = { PTHREAD_ONCE_INIT }; ], [hack_shutup_pthreadonceinit=yes], )
2984                 ;;
2985 esac
2986
2987 case "$hack_shutup_pthreadonceinit" in
2988         yes)
2989                 #
2990                 # Shut up PTHREAD_ONCE_INIT unbraced initializer warnings.
2991                 #
2992                 ISC_PLATFORM_BRACEPTHREADONCEINIT="#define ISC_PLATFORM_BRACEPTHREADONCEINIT 1"
2993                 ;;
2994 esac
2995
2996 case "$hack_shutup_sigwait" in
2997         yes)
2998                 #
2999                 # Shut up a -Wmissing-prototypes warning for sigwait().
3000                 #
3001                 AC_DEFINE(SHUTUP_SIGWAIT)
3002                 ;;
3003 esac
3004
3005 case "$hack_shutup_sputaux" in
3006         yes)
3007                 #
3008                 # Shut up a -Wmissing-prototypes warning from <stdio.h>.
3009                 #
3010                 AC_DEFINE(SHUTUP_SPUTAUX)
3011                 ;;
3012 esac
3013
3014 case "$hack_shutup_stdargcast" in
3015         yes)
3016                 #
3017                 # Shut up a -Wcast-qual warning from va_start().
3018                 #
3019                 AC_DEFINE(SHUTUP_STDARG_CAST)
3020                 ;;
3021 esac
3022
3023 AC_CHECK_HEADERS(strings.h,
3024   ISC_PLATFORM_HAVESTRINGSH="#define ISC_PLATFORM_HAVESTRINGSH 1"
3025 ,
3026   ISC_PLATFORM_HAVESTRINGSH="#undef ISC_PLATFORM_HAVESTRINGSH"
3027 )
3028 AC_SUBST(ISC_PLATFORM_HAVESTRINGSH)
3029
3030 #
3031 # Check for if_nametoindex() for IPv6 scoped addresses support
3032 #
3033 AC_CHECK_FUNC(if_nametoindex, ac_cv_have_if_nametoindex=yes,
3034                 ac_cv_have_if_nametoindex=no)
3035 case $ac_cv_have_if_nametoindex in
3036 no)
3037         case "$host" in
3038         *-hp-hpux*)
3039                 AC_CHECK_LIB(ipv6, if_nametoindex,
3040                                 ac_cv_have_if_nametoindex=yes
3041                                 LIBS="-lipv6 $LIBS",)
3042         ;;
3043         esac
3044 esac
3045 case $ac_cv_have_if_nametoindex in
3046 yes)
3047         ISC_PLATFORM_HAVEIFNAMETOINDEX="#define ISC_PLATFORM_HAVEIFNAMETOINDEX 1"
3048         AC_DEFINE(HAVE_IF_NAMETOINDEX, 1,
3049                   [Define to 1 if you have the if_nametoindex function.])
3050
3051         ;;
3052 *)
3053         ISC_PLATFORM_HAVEIFNAMETOINDEX="#undef ISC_PLATFORM_HAVEIFNAMETOINDEX"
3054         ;;
3055 esac
3056 AC_SUBST(ISC_PLATFORM_HAVEIFNAMETOINDEX)
3057
3058 AC_CHECK_FUNCS(nanosleep usleep)
3059
3060 #
3061 # Machine architecture dependent features
3062 #
3063 AC_ARG_ENABLE(atomic,
3064         [  --enable-atomic        enable machine specific atomic operations
3065                           [[default=autodetect]]],
3066                         enable_atomic="$enableval",
3067                         enable_atomic="autodetect")
3068 case "$enable_atomic" in
3069         yes|''|autodetect)
3070                 case "$host" in
3071                 powerpc-ibm-aix*)
3072                         if test "X$GCC" = "Xyes"; then
3073                                 AC_MSG_CHECKING([if asm("isc"); works])
3074                                 AC_TRY_COMPILE(,[
3075                                 main() { asm("ics"); exit(0); }
3076                                 ],
3077                                 [AC_MSG_RESULT(yes)
3078                                  use_atomic=yes],
3079                                 [
3080                                 saved_cflags="$CFLAGS"
3081                                 CFLAGS="$CFLAGS -Wa,-many"
3082                                 AC_TRY_RUN([
3083                                 main() { asm("ics"); exit(0); }
3084                                 ],
3085                                 [AC_MSG_RESULT([yes, required -Wa,-many])
3086                                  use_atomic=yes],
3087                                 [AC_MSG_RESULT([no, use_atomic disabled])
3088                                  CFLAGS="$saved_cflags"
3089                                  use_atomic=no],
3090                                 [AC_MSG_RESULT([cross compile, assume yes])
3091                                  CFLAGS="$saved_cflags"
3092                                  use_atomic=yes])
3093                                 ]
3094                                 )
3095                         else
3096                                 use_atomic=yes
3097                         fi
3098                         ;;
3099                 *)
3100                         use_atomic=yes
3101                         ;;
3102                 esac
3103                 ;;
3104         no)
3105                 use_atomic=no
3106                 arch=noatomic
3107                 ;;
3108 esac
3109
3110 ISC_PLATFORM_USEOSFASM="#undef ISC_PLATFORM_USEOSFASM"
3111 ISC_PLATFORM_USEGCCASM="#undef ISC_PLATFORM_USEGCCASM"
3112 ISC_PLATFORM_USESTDASM="#undef ISC_PLATFORM_USESTDASM"
3113 ISC_PLATFORM_USEMACASM="#undef ISC_PLATFORM_USEMACASM"
3114 if test "$use_atomic" = "yes"; then
3115         have_atomic=yes         # set default
3116         case "$host" in
3117         [i[3456]86-*])
3118                 # XXX: some old x86 architectures actually do not support
3119                 #      (some of) these operations.  Do we need stricter checks?
3120                 AC_CHECK_SIZEOF([void *])
3121                 if test $ac_cv_sizeof_void_p = 8; then
3122                         arch=x86_64
3123                         have_xaddq=yes
3124                 else
3125                         arch=x86_32
3126                 fi
3127         ;;
3128         x86_64-*|amd64-*)
3129                 AC_CHECK_SIZEOF([void *])
3130                 if test $ac_cv_sizeof_void_p = 8; then
3131                         arch=x86_64
3132                         have_xaddq=yes
3133                 else
3134                         arch=x86_32
3135                 fi
3136         ;;
3137         alpha*-*)
3138                 arch=alpha
3139         ;;
3140         powerpc-*|powerpc64-*)
3141                 arch=powerpc
3142         ;;
3143         mips-*|mipsel-*|mips64-*|mips64el-*)
3144                 arch=mips
3145         ;;
3146         ia64-*)
3147                 arch=ia64
3148         ;;
3149         *)
3150                 have_atomic=no
3151                 arch=noatomic
3152         ;;
3153         esac
3154         AC_MSG_CHECKING([architecture type for atomic operations])
3155         AC_MSG_RESULT($arch)
3156 fi
3157
3158 if test "$have_atomic" = "yes"; then
3159         AC_MSG_CHECKING([compiler support for inline assembly code])
3160
3161         compiler=generic
3162         # Check whether the compiler supports the assembly syntax we provide.
3163         if test "X$GCC" = "Xyes"; then
3164                 # GCC's ASM extension always works
3165                 compiler=gcc
3166                 if test $arch = "x86_64"; then
3167                         # We can share the same code for gcc with x86_32
3168                         arch=x86_32
3169                 fi
3170                 if test $arch = "powerpc"; then
3171                         #
3172                         # The MacOS (and maybe others) uses "r0" for register
3173                         # zero. Under linux/ibm it is "0" for register 0.
3174                         # Probe to see if we have a MacOS style assembler.
3175                         #
3176                         AC_MSG_CHECKING([Checking for MacOS style assembler syntax])
3177                         AC_TRY_COMPILE(, [
3178                         __asm__ volatile ("li r0, 0x0\n"::);
3179                         ], [
3180                         AC_MSG_RESULT(yes)
3181                         compiler="mac"
3182                         ISC_PLATFORM_USEMACASM="#define ISC_PLATFORM_USEMACASM 1"
3183                         ], [AC_MSG_RESULT(no)])
3184                 fi
3185         else
3186                 case "$host" in
3187                 alpha*-dec-osf*)
3188                         # Tru64 compiler has its own syntax for inline
3189                         # assembly.
3190                         AC_TRY_COMPILE(, [
3191 #ifndef __DECC
3192 #error "unexpected compiler"
3193 #endif
3194                                 return (0);],
3195                                 [compiler=osf],)
3196                 ;;
3197                 powerpc-ibm-aix*)
3198                         compiler=aix
3199                 ;;
3200                 esac
3201         fi
3202         case "$compiler" in
3203         gcc)
3204                 ISC_PLATFORM_USEGCCASM="#define ISC_PLATFORM_USEGCCASM 1"
3205                 ;;
3206         osf)
3207                 ISC_PLATFORM_USEOSFASM="#define ISC_PLATFORM_USEOSFASM 1"
3208                 ;;
3209         aix)
3210                 ;;
3211         mac)
3212                 ;;
3213         *)
3214                 # See if the generic __asm function works.  If not,
3215                 # we need to disable the atomic operations.
3216                 AC_TRY_LINK(, [
3217                                         __asm("nop")
3218                                 ],
3219                 [compiler="standard"
3220                 ISC_PLATFORM_USESTDASM="#define ISC_PLATFORM_USESTDASM 1"],
3221                 [compiler="not supported (atomic operations disabled)"
3222                 have_atomic=no
3223                 arch=noatomic ]);
3224                 ;;
3225         esac
3226
3227         AC_MSG_RESULT($compiler)
3228 fi
3229
3230 if test "$have_atomic" = "yes"; then
3231         ISC_PLATFORM_HAVEXADD="#define ISC_PLATFORM_HAVEXADD 1"
3232         ISC_PLATFORM_HAVECMPXCHG="#define ISC_PLATFORM_HAVECMPXCHG 1"
3233         ISC_PLATFORM_HAVEATOMICSTORE="#define ISC_PLATFORM_HAVEATOMICSTORE 1"
3234         if test "$have_xaddq" = "yes"; then
3235                 ISC_PLATFORM_HAVEXADDQ="#define ISC_PLATFORM_HAVEXADDQ 1"
3236                 ISC_PLATFORM_HAVEATOMICSTOREQ="#define ISC_PLATFORM_HAVEATOMICSTOREQ 1"
3237         else
3238                 ISC_PLATFORM_HAVEXADDQ="#undef ISC_PLATFORM_HAVEXADDQ"
3239                 ISC_PLATFORM_HAVEATOMICSTOREQ="#undef ISC_PLATFORM_HAVEATOMICSTOREQ"
3240         fi
3241 else
3242         ISC_PLATFORM_HAVEXADD="#undef ISC_PLATFORM_HAVEXADD"
3243         ISC_PLATFORM_HAVECMPXCHG="#undef ISC_PLATFORM_HAVECMPXCHG"
3244         ISC_PLATFORM_HAVEATOMICSTORE="#undef ISC_PLATFORM_HAVEATOMICSTORE"
3245         ISC_PLATFORM_HAVEXADDQ="#undef ISC_PLATFORM_HAVEXADDQ"
3246         ISC_PLATFORM_HAVEATOMICSTOREQ="#undef ISC_PLATFORM_HAVEATOMICSTOREQ"
3247 fi
3248
3249 AC_SUBST(ISC_PLATFORM_HAVEXADD)
3250 AC_SUBST(ISC_PLATFORM_HAVEXADDQ)
3251 AC_SUBST(ISC_PLATFORM_HAVECMPXCHG)
3252 AC_SUBST(ISC_PLATFORM_HAVEATOMICSTORE)
3253 AC_SUBST(ISC_PLATFORM_HAVEATOMICSTOREQ)
3254
3255 AC_SUBST(ISC_PLATFORM_USEGCCASM)
3256 AC_SUBST(ISC_PLATFORM_USEOSFASM)
3257 AC_SUBST(ISC_PLATFORM_USESTDASM)
3258 AC_SUBST(ISC_PLATFORM_USEMACASM)
3259
3260 ISC_ARCH_DIR=$arch
3261 AC_SUBST(ISC_ARCH_DIR)
3262
3263 #
3264 # Check for __builtin_expect
3265 #
3266 AC_MSG_CHECKING([compiler support for __builtin_expect])
3267 AC_TRY_LINK(, [
3268         return (__builtin_expect(1, 1) ? 1 : 0);
3269 ], [
3270         have_builtin_expect=yes
3271         AC_MSG_RESULT(yes)
3272 ], [
3273         have_builtin_expect=no
3274         AC_MSG_RESULT(no)
3275 ])
3276 if test "$have_builtin_expect" = "yes"; then
3277         AC_DEFINE(HAVE_BUILTIN_EXPECT, 1, [Define to 1 if the compiler supports __builtin_expect.])
3278 fi
3279
3280 #
3281 # Activate "rrset-order fixed" or not?
3282 #
3283 AC_ARG_ENABLE(fixed-rrset,
3284         [  --enable-fixed-rrset    enable fixed rrset ordering
3285                           [[default=no]]],
3286                         enable_fixed="$enableval",
3287                         enable_fixed="no")
3288 case "$enable_fixed" in
3289         yes)
3290                 AC_DEFINE(DNS_RDATASET_FIXED, 1,
3291                           [Define to enable "rrset-order fixed" syntax.])
3292                 ;;
3293         no)
3294                 ;;
3295         *)
3296                 ;;
3297 esac
3298
3299 #
3300 # Enable response policy rewriting using NS IP addresses
3301 #
3302 AC_ARG_ENABLE(rpz-nsip,
3303         [  --disable-rpz-nsip     disable rpz-nsip rules [[default=enabled]]],
3304                         enable_nsip="$enableval",
3305                         enable_nsip="yes")
3306 case "$enable_nsip" in
3307         yes)
3308                 AC_DEFINE(ENABLE_RPZ_NSIP, 1,
3309                           [Define to enable rpz-nsip rules.])
3310                 ;;
3311         no)
3312                 ;;
3313         *)
3314                 ;;
3315 esac
3316
3317 #
3318 # Enable response policy rewriting using NS name
3319 #
3320 AC_ARG_ENABLE(rpz-nsdname,
3321         [  --disable-rpz-nsdname          disable rpz-nsdname rules [[default=enabled]]],
3322                         enable_nsdname="$enableval",
3323                         enable_nsdname="yes")
3324 case "$enable_nsdname" in
3325         yes)
3326                 AC_DEFINE(ENABLE_RPZ_NSDNAME, 1,
3327                           [Define to enable rpz-nsdname rules.])
3328                 ;;
3329         no)
3330                 ;;
3331         *)
3332                 ;;
3333 esac
3334
3335 #
3336 # Activate recursive fetch limits
3337 #
3338 AC_ARG_ENABLE(fetchlimit,
3339         [  --enable-fetchlimit     enable recursive fetch limits [[default=no]]],
3340                         enable_fetchlimit="$enableval",
3341                         enable_fetchlimit="no")
3342 case "$enable_fetchlimit" in
3343         yes)
3344                 AC_DEFINE(ENABLE_FETCHLIMIT, 1,
3345                           [Define to enable the "fetches-per-server" and "fetches-per-zone" options.])
3346                 ;;
3347         no)
3348                 ;;
3349         *)
3350                 ;;
3351 esac
3352
3353 #
3354 # Activate "filter-aaaa" or not?
3355 #
3356 AC_ARG_ENABLE(filter-aaaa,
3357         [  --enable-filter-aaaa    enable filtering of AAAA records over IPv4
3358                           [[default=no]]],
3359                         enable_filter="$enableval",
3360                         enable_filter="no")
3361 case "$enable_filter" in
3362         yes)
3363                 AC_DEFINE(ALLOW_FILTER_AAAA_ON_V4, 1,
3364                           [Define to enable the "filter-aaaa-on-v4" option.])
3365                 ;;
3366         no)
3367                 ;;
3368         *)
3369                 ;;
3370 esac
3371
3372 #
3373 #  The following sets up how non-blocking i/o is established.
3374 #  Sunos, cygwin and solaris 2.x (x<5) require special handling.
3375 #
3376 case "$host" in
3377 *-sunos*) AC_DEFINE(PORT_NONBLOCK, O_NDELAY);;
3378 *-cygwin*) AC_DEFINE(PORT_NONBLOCK, O_NDELAY);;
3379 *-solaris2.[[01234]])
3380         AC_DEFINE(PORT_NONBLOCK, O_NONBLOCK)
3381         AC_DEFINE(USE_FIONBIO_IOCTL, 1,
3382                   [Defined if you need to use ioctl(FIONBIO) instead a fcntl call to make non-blocking.])
3383         ;;
3384 *) AC_DEFINE(PORT_NONBLOCK, O_NONBLOCK,
3385              [Sets which flag to pass to open/fcntl to make non-blocking (O_NDELAY/O_NONBLOCK).])
3386         ;;
3387 esac
3388 #
3389 # Solaris 2.5.1 and earlier cannot bind() then connect() a TCP socket.
3390 # This prevents the source address being set.
3391 #
3392 case "$host" in
3393 *-solaris2.[[012345]]|*-solaris2.5.1)
3394         AC_DEFINE(BROKEN_TCP_BIND_BEFORE_CONNECT, 1,
3395                   [Define if you cannot bind() before connect() for TCP sockets.])
3396         ;;
3397 esac
3398 #
3399 # The following sections deal with tools used for formatting
3400 # the documentation.  They are all optional, unless you are
3401 # a developer editing the documentation source.
3402 #
3403
3404 #
3405 # Look for TeX.
3406 #
3407
3408 AC_PATH_PROGS(LATEX, latex, latex)
3409 AC_SUBST(LATEX)
3410
3411 AC_PATH_PROGS(PDFLATEX, pdflatex, pdflatex)
3412 AC_SUBST(PDFLATEX)
3413
3414 AC_PATH_PROGS(DBLATEX, dblatex, dblatex)
3415 AC_SUBST(DBLATEX)
3416
3417 #
3418 # Look for w3m
3419 #
3420
3421 AC_PATH_PROGS(W3M, w3m, w3m)
3422 AC_SUBST(W3M)
3423
3424 #
3425 # Look for xsltproc (libxslt)
3426 #
3427
3428 AC_PATH_PROG(XSLTPROC, xsltproc, xsltproc)
3429 AC_SUBST(XSLTPROC)
3430
3431 #
3432 # Look for xmllint (libxml2)
3433 #
3434
3435 AC_PATH_PROG(XMLLINT, xmllint, xmllint)
3436 AC_SUBST(XMLLINT)
3437
3438 #
3439 # Look for Doxygen
3440 #
3441
3442 AC_PATH_PROG(DOXYGEN, doxygen, doxygen)
3443 AC_SUBST(DOXYGEN)
3444
3445 #
3446 # Look for curl
3447 #
3448
3449 AC_PATH_PROG(CURL, curl, curl)
3450 AC_SUBST(CURL)
3451
3452 #
3453 # Subroutine for searching for an ordinary file (e.g., a stylesheet)
3454 # in a number of directories:
3455 #
3456 #   NOM_PATH_FILE(VARIABLE, FILENAME, DIRECTORIES)
3457 #
3458 # If the file FILENAME is found in one of the DIRECTORIES, the shell
3459 # variable VARIABLE is defined to its absolute pathname.  Otherwise,
3460 # it is set to FILENAME, with no directory prefix (that's not terribly
3461 # useful, but looks less confusing in substitutions than leaving it
3462 # empty).  The variable VARIABLE will be substituted into output files.
3463 #
3464
3465 AC_DEFUN(NOM_PATH_FILE, [
3466 $1=""
3467 AC_MSG_CHECKING(for $2)
3468 for d in $3
3469 do
3470         f=$d/$2
3471         if test -f $f
3472         then
3473                 $1=$f
3474                 AC_MSG_RESULT($f)
3475                 break
3476         fi
3477 done
3478 if test "X[$]$1" = "X"
3479 then
3480         AC_MSG_RESULT("not found");
3481         $1=$2
3482 fi
3483 AC_SUBST($1)
3484 ])
3485
3486 #
3487 # Look for Docbook-XSL stylesheets.  Location probably varies by system.
3488 # If it's not explicitly specified, guess where it might be found, based on
3489 # where SGML stuff lives on some systems (FreeBSD is the only one we're sure
3490 # of at the moment).
3491 #
3492 AC_MSG_CHECKING(for Docbook-XSL path)
3493 AC_ARG_WITH(docbook-xsl,
3494 [  --with-docbook-xsl=PATH Specify path for Docbook-XSL stylesheets],
3495    docbook_path="$withval", docbook_path="auto")
3496 case "$docbook_path" in
3497 auto)
3498         AC_MSG_RESULT(auto)
3499         docbook_xsl_trees="/usr/pkg/share/xsl/docbook /usr/local/share/xsl/docbook-ns /usr/local/share/xsl/docbook /usr/share/xsl/docbook /opt/local/share/xsl/docbook-xsl /usr/share/xml/docbook/stylesheet/docbook-xsl"
3500         ;;
3501 *)
3502         docbook_xsl_trees="$withval"
3503         AC_MSG_RESULT($docbook_xsl_trees)
3504         ;;
3505 esac
3506
3507 #
3508 # Look for stylesheets we need.
3509 #
3510
3511 NOM_PATH_FILE(XSLT_DOCBOOK_STYLE_HTML, html/docbook.xsl, $docbook_xsl_trees)
3512 NOM_PATH_FILE(XSLT_DOCBOOK_STYLE_XHTML, xhtml/docbook.xsl, $docbook_xsl_trees)
3513 NOM_PATH_FILE(XSLT_DOCBOOK_STYLE_MAN, manpages/docbook.xsl, $docbook_xsl_trees)
3514 NOM_PATH_FILE(XSLT_DOCBOOK_CHUNK_HTML, html/chunk.xsl, $docbook_xsl_trees)
3515 NOM_PATH_FILE(XSLT_DOCBOOK_CHUNK_XHTML, xhtml/chunk.xsl, $docbook_xsl_trees)
3516 NOM_PATH_FILE(XSLT_DOCBOOK_CHUNKTOC_HTML, html/chunktoc.xsl, $docbook_xsl_trees)
3517 NOM_PATH_FILE(XSLT_DOCBOOK_CHUNKTOC_XHTML, xhtml/chunktoc.xsl, $docbook_xsl_trees)
3518 NOM_PATH_FILE(XSLT_DOCBOOK_MAKETOC_HTML, html/maketoc.xsl, $docbook_xsl_trees)
3519 NOM_PATH_FILE(XSLT_DOCBOOK_MAKETOC_XHTML, xhtml/maketoc.xsl, $docbook_xsl_trees)
3520
3521 #
3522 # Same dance for dblatex
3523 #
3524 dblatex_xsl_trees="/usr/local/share/xml/docbook/stylesheet/dblatex /usr/pkg/share/xml/docbook/stylesheet/dblatex /usr/share/xml/docbook/stylesheet/dblatex"
3525 NOM_PATH_FILE(XSLT_DBLATEX_STYLE, xsl/docbook.xsl, $dblatex_xsl_trees)
3526 NOM_PATH_FILE(XSLT_DBLATEX_FASTBOOK, xsl/latex_book_fast.xsl, $dblatex_xsl_trees)
3527
3528 #
3529 # IDN support
3530 #
3531 AC_ARG_WITH(idn,
3532         [  --with-idn[=MPREFIX]      enable IDN support using idnkit [default PREFIX]],
3533         use_idn="$withval", use_idn="no")
3534 case "$use_idn" in
3535 yes)
3536         if test X$prefix = XNONE ; then
3537                 idn_path=/usr/local
3538         else
3539                 idn_path=$prefix
3540         fi
3541         ;;
3542 no)
3543         ;;
3544 *)
3545         idn_path="$use_idn"
3546         ;;
3547 esac
3548
3549 iconvinc=
3550 iconvlib=
3551 AC_ARG_WITH(libiconv,
3552         [  --with-libiconv[=IPREFIX] GNU libiconv are in IPREFIX [default PREFIX]],
3553         use_libiconv="$withval", use_libiconv="no")
3554 case "$use_libiconv" in
3555 yes)
3556         if test X$prefix = XNONE ; then
3557                 iconvlib="-L/usr/local/lib -R/usr/local/lib -liconv"
3558         else
3559                 iconvlib="-L$prefix/lib -R$prefix/lib -liconv"
3560         fi
3561         ;;
3562 no)
3563         iconvlib=
3564         ;;
3565 *)
3566         iconvlib="-L$use_libiconv/lib -R$use_libiconv/lib -liconv"
3567         ;;
3568 esac
3569
3570 AC_ARG_WITH(iconv,
3571         [  --with-iconv[=LIBSPEC]    specify iconv library [default -liconv]],
3572         iconvlib="$withval")
3573 case "$iconvlib" in
3574 no)
3575         iconvlib=
3576         ;;
3577 yes)
3578         iconvlib=-liconv
3579         ;;
3580 esac
3581
3582 AC_ARG_WITH(idnlib,
3583         [  --with-idnlib=ARG       specify libidnkit],
3584         idnlib="$withval", idnlib="no")
3585 if test "$idnlib" = yes; then
3586         AC_MSG_ERROR([You must specify ARG for --with-idnlib.])
3587 fi
3588
3589 IDNLIBS=
3590 if test "$use_idn" != no; then
3591         AC_DEFINE(WITH_IDN, 1, [define if idnkit support is to be included.])
3592         STD_CINCLUDES="$STD_CINCLUDES -I$idn_path/include"
3593         if test "$idnlib" != no; then
3594                 IDNLIBS="$idnlib $iconvlib"
3595         else
3596                 IDNLIBS="-L$idn_path/lib -lidnkit $iconvlib"
3597         fi
3598 fi
3599 AC_SUBST(IDNLIBS)
3600
3601 #
3602 # Check whether to build Automated Test Framework unit tests
3603 #
3604 AC_ARG_WITH(atf,
3605         [  --with-atf=ARG          Automated Test Framework support],
3606         atf="$withval", atf="no")
3607 if test "$atf" = yes; then
3608         atf=`pwd`/unit/atf
3609         ATFBUILD=atf-src
3610         AC_SUBST(ATFBUILD)
3611         AC_CONFIG_COMMANDS([atf-config],
3612                 [(
3613                  mkdir -p unit/atf-src;
3614                  cd unit/atf-src;
3615                  case "$srcdir" in
3616                  /*) ;;
3617                  *) srcdir="../../$srcdir";;
3618                  esac
3619                  ${SHELL} "${srcdir}${srcdir:+/unit/atf-src/}./configure" --enable-tools --disable-shared MISSING=: --prefix $atfdir;
3620                 ) ],
3621                 [atfdir=`pwd`/unit/atf])
3622         AC_MSG_RESULT(building ATF from bind9/unit/atf-src)
3623 fi
3624
3625 ATFLIBS=
3626 if test "$atf" != no; then
3627         AC_DEFINE(ATF_TEST, 1, [define if ATF unit tests are to be built.])
3628         STD_CINCLUDES="$STD_CINCLUDES -I$atf/include"
3629         ATFBIN="$atf/bin"
3630         ATFLIBS="-L$atf/lib -latf-c"
3631         if test "$want_openssl_hash" = yes; then
3632                 ATFLIBS="-L$atf/lib -latf-c $DNS_CRYPTO_LIBS"
3633         fi
3634         UNITTESTS=tests
3635 fi
3636 AC_SUBST(ATFBIN)
3637 AC_SUBST(ATFLIBS)
3638 AC_SUBST(UNITTESTS)
3639
3640 AC_CHECK_HEADERS(locale.h)
3641 AC_CHECK_FUNCS(setlocale)
3642
3643 #
3644 # was --enable-querytrace specified?
3645 #
3646 AC_ARG_ENABLE(querytrace,
3647         [  --enable-querytrace     enable very verbose query trace logging [[default=no]]],
3648         want_querytrace="$enableval", want_querytrace="no")
3649
3650 AC_MSG_CHECKING([whether to enable query trace logging])
3651 case "$want_querytrace" in
3652 yes)
3653         AC_MSG_RESULT(yes)
3654         AC_DEFINE(WANT_QUERYTRACE, 1, [Define to enable very verbose query trace logging.])
3655         ;;
3656 no)
3657         AC_MSG_RESULT(no)
3658         ;;
3659 *)
3660         AC_MSG_ERROR("--enable-querytrace requires yes or no")
3661         ;;
3662 esac
3663
3664 #
3665 # Substitutions
3666 #
3667 AC_SUBST(BIND9_TOP_BUILDDIR)
3668 BIND9_TOP_BUILDDIR=`pwd`
3669
3670 AC_SUBST(BIND9_ISC_BUILDINCLUDE)
3671 AC_SUBST(BIND9_ISCCC_BUILDINCLUDE)
3672 AC_SUBST(BIND9_ISCCFG_BUILDINCLUDE)
3673 AC_SUBST(BIND9_DNS_BUILDINCLUDE)
3674 AC_SUBST(BIND9_LWRES_BUILDINCLUDE)
3675 AC_SUBST(BIND9_BIND9_BUILDINCLUDE)
3676 if test "X$srcdir" != "X"; then
3677         BIND9_ISC_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/isc/include"
3678         BIND9_ISCCC_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/isccc/include"
3679         BIND9_ISCCFG_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/isccfg/include"
3680         BIND9_DNS_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/dns/include"
3681         BIND9_LWRES_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/lwres/include"
3682         BIND9_BIND9_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/bind9/include"
3683 else
3684         BIND9_ISC_BUILDINCLUDE=""
3685         BIND9_ISCCC_BUILDINCLUDE=""
3686         BIND9_ISCCFG_BUILDINCLUDE=""
3687         BIND9_DNS_BUILDINCLUDE=""
3688         BIND9_LWRES_BUILDINCLUDE=""
3689         BIND9_BIND9_BUILDINCLUDE=""
3690 fi
3691
3692 AC_SUBST_FILE(BIND9_MAKE_INCLUDES)
3693 BIND9_MAKE_INCLUDES=$BIND9_TOP_BUILDDIR/make/includes
3694
3695 AC_SUBST_FILE(BIND9_MAKE_RULES)
3696 BIND9_MAKE_RULES=$BIND9_TOP_BUILDDIR/make/rules
3697
3698 . "$srcdir/version"
3699 BIND9_PRODUCT="PRODUCT=\"${PRODUCT}\""
3700 AC_SUBST(BIND9_PRODUCT)
3701 BIND9_DESCRIPTION="DESCRIPTION=\"${DESCRIPTION}\""
3702 AC_SUBST(BIND9_DESCRIPTION)
3703 BIND9_VERSION="${MAJORVER}.${MINORVER}${PATCHVER:+.}${PATCHVER}${RELEASETYPE}${RELEASEVER}${EXTENSIONS}"
3704 AC_SUBST(BIND9_VERSION)
3705 BIND9_MAJOR="MAJOR=${MAJORVER}.${MINORVER}"
3706 AC_SUBST(BIND9_MAJOR)
3707 BIND9_VERSIONSTRING="${PRODUCT} ${MAJORVER}.${MINORVER}${PATCHVER:+.}${PATCHVER}${RELEASETYPE}${RELEASEVER}${EXTENSIONS}${DESCRIPTION:+ }${DESCRIPTION}"
3708 AC_SUBST(BIND9_VERSIONSTRING)
3709 BIND9_VERSIONSHORT="${PRODUCT} ${MAJORVER}.${MINORVER}${PATCHVER:+.}${PATCHVER}${RELEASETYPE}${RELEASEVER}${EXTENSIONS}"
3710 AC_SUBST(BIND9_VERSIONSHORT)
3711
3712 BIND9_SRCID="SRCID=unset"
3713 if test -f "${srcdir}/srcid"; then
3714         . "${srcdir}/srcid"
3715         BIND9_SRCID="SRCID=$SRCID"
3716 elif test -d "${srcdir}/.git"; then
3717         BIND9_SRCID="SRCID="`(cd "${srcdir}";git rev-parse --short HEAD)`
3718 fi
3719
3720 AC_SUBST(BIND9_SRCID)
3721
3722 if test -z "$ac_configure_args"; then
3723         BIND9_CONFIGARGS="defaults"
3724 else
3725         for a in $ac_configure_args
3726         do
3727                 BIND9_CONFIGARGS="$BIND9_CONFIGARGS $a"
3728         done
3729 fi
3730 BIND9_CONFIGARGS="`echo $BIND9_CONFIGARGS | sed 's/^ //'`"
3731 BIND9_CONFIGARGS="CONFIGARGS=${BIND9_CONFIGARGS}"
3732 AC_SUBST(BIND9_CONFIGARGS)
3733
3734 AC_SUBST_FILE(LIBISC_API)
3735 LIBISC_API="$srcdir/lib/isc/api"
3736
3737 AC_SUBST_FILE(LIBISCCC_API)
3738 LIBISCCC_API="$srcdir/lib/isccc/api"
3739
3740 AC_SUBST_FILE(LIBISCCFG_API)
3741 LIBISCCFG_API="$srcdir/lib/isccfg/api"
3742
3743 AC_SUBST_FILE(LIBDNS_API)
3744 LIBDNS_API="$srcdir/lib/dns/api"
3745
3746 AC_SUBST_FILE(LIBBIND9_API)
3747 LIBBIND9_API="$srcdir/lib/bind9/api"
3748
3749 AC_SUBST_FILE(LIBLWRES_API)
3750 LIBLWRES_API="$srcdir/lib/lwres/api"
3751
3752 AC_SUBST_FILE(LIBIRS_API)
3753 LIBIRS_API="$srcdir/lib/irs/api"
3754
3755 #
3756 # Configure any DLZ drivers.
3757 #
3758 # If config.dlz.in selects one or more DLZ drivers, it will set
3759 # CONTRIB_DLZ to a non-empty value, which will be our clue to
3760 # build DLZ drivers in contrib.
3761 #
3762 # This section has to come after the libtool stuff because it needs to
3763 # know how to name the driver object files.
3764 #
3765
3766 CONTRIB_DLZ=""
3767 DLZ_DRIVER_INCLUDES=""
3768 DLZ_DRIVER_LIBS=""
3769 DLZ_DRIVER_SRCS=""
3770 DLZ_DRIVER_OBJS=""
3771 DLZ_SYSTEM_TEST=""
3772
3773 #
3774 # Configure support for building a shared library object
3775 #
3776 # Even when libtool is available it can't always be relied upon
3777 # to build an object that can be dlopen()'ed, but this is necessary
3778 # for building the dlzexternal system test, so we'll try it the
3779 # old-fashioned way.
3780 #
3781 SO="so"
3782 SO_CFLAGS=""
3783 SO_LDFLAGS=""
3784 SO_LD=""
3785 SO_TARGETS=""
3786
3787 AC_ARG_WITH(dlopen,
3788         [  --with-dlopen=ARG       Support dynamically loadable DLZ drivers],
3789         dlopen="$withval", dlopen="yes")
3790
3791 case $host in
3792         *-sunos*) dlopen="no"
3793                 ;;
3794 esac
3795
3796 if test "$dlopen" = "yes"; then
3797         AC_CHECK_LIB(dl, dlopen, have_dl=yes, have_dl=no)
3798         if test "$have_dl" = "yes"; then
3799                 LIBS="-ldl $LIBS"
3800         fi
3801         AC_CHECK_FUNCS(dlopen dlclose dlsym,,dlopen=no)
3802 fi
3803
3804 if test "$dlopen" = "yes"; then
3805         case $host in
3806                 *-linux*|*-gnu*)
3807                         SO_CFLAGS="-fPIC"
3808                         SO_LDFLAGS=""
3809                         if test "$have_dl" = "yes"
3810                         then
3811                                 if test "$use_libtool" = "yes"; then
3812                                         SO_LDFLAGS="-Xcompiler -shared"
3813                                         SO_LD="${CC}"
3814                                 else
3815                                         SO_LDFLAGS="-shared"
3816                                         SO_LD="${CC}"
3817                                 fi
3818                         else
3819                                 SO_LDFLAGS="-shared"
3820                                 SO_LD="ld"
3821                         fi
3822                         ;;
3823                 *-freebsd*|*-openbsd*)
3824                         SO_CFLAGS="-fpic"
3825                         elf=`${CC} -dM -E - < /dev/null | grep __ELF__`
3826                         if test "$use_libtool" = "yes"; then
3827                                 SO_LDFLAGS="-Xcompiler -shared"
3828                                 SO_LD="${CC}"
3829                         else
3830                                 SO_LDFLAGS="-shared"
3831                                 SO_LD="${CC}"
3832                         fi
3833                         ;;
3834                 *-netbsd*)
3835                         SO_CFLAGS="-fpic"
3836                         SO_LDFLAGS="-Bshareable -x"
3837                         SO_LD="ld"
3838                         ;;
3839                 *-solaris*)
3840                         SO_CFLAGS="-KPIC"
3841                         SO_LDFLAGS="-G -z text"
3842                         SO_LD="ld"
3843                         ;;
3844                 *-hp-hpux*)
3845                         SO=sl
3846                         SO_CFLAGS="+z"
3847                         SO_LDFLAGS="-b +vnocompatwarnings"
3848                         SO_LD="ld"
3849                         ;;
3850                 *)
3851                         SO_CFLAGS="-fPIC"
3852                         ;;
3853         esac
3854
3855         if test "X$GCC" = "Xyes"; then
3856                 SO_CFLAGS="-fPIC"
3857                 if test -z "$SO_LD"
3858                 then
3859                         if test "$use_libtool" = "yes"; then
3860                                 SO_LDFLAGS="-Xcompiler -shared"
3861                                 SO_LD="${CC}"
3862                         else
3863                                 SO_LDFLAGS="-shared"
3864                                 SO_LD="${CC}"
3865                         fi
3866                 fi
3867         fi
3868
3869         # If we still don't know how to make shared objects, don't make any.
3870         if test -n "$SO_LD"; then
3871                 SO_TARGETS="\${SO_TARGETS}"
3872                 AC_DEFINE(ISC_DLZ_DLOPEN, 1,
3873                           [Define to allow building of objects for dlopen().])
3874         fi
3875 fi
3876
3877 AC_SUBST(SO)
3878 AC_SUBST(SO_CFLAGS)
3879 AC_SUBST(SO_LDFLAGS)
3880 AC_SUBST(SO_LD)
3881 AC_SUBST(SO_TARGETS)
3882
3883 sinclude(contrib/dlz/config.dlz.in)
3884 AC_MSG_CHECKING(contributed DLZ drivers)
3885
3886 if test -n "$CONTRIB_DLZ"
3887 then
3888         AC_MSG_RESULT(yes)
3889         DLZ_DRIVER_RULES=contrib/dlz/drivers/rules
3890         AC_CONFIG_FILES([$DLZ_DRIVER_RULES])
3891 else
3892         AC_MSG_RESULT(no)
3893         DLZ_DRIVER_RULES=/dev/null
3894 fi
3895
3896 AC_SUBST(CONTRIB_DLZ)
3897 AC_SUBST(DLZ_DRIVER_INCLUDES)
3898 AC_SUBST(DLZ_DRIVER_LIBS)
3899 AC_SUBST(DLZ_DRIVER_SRCS)
3900 AC_SUBST(DLZ_DRIVER_OBJS)
3901 AC_SUBST(DLZ_SYSTEM_TEST)
3902 AC_SUBST_FILE(DLZ_DRIVER_RULES)
3903
3904 if test "$cross_compiling" = "yes"; then
3905         if test -z "$BUILD_CC"; then
3906                 AC_MSG_ERROR([BUILD_CC not set])
3907         fi
3908         BUILD_CFLAGS="$BUILD_CFLAGS"
3909         BUILD_CPPFLAGS="$BUILD_CPPFLAGS"
3910         BUILD_LDFLAGS="$BUILD_LDFLAGS"
3911         BUILD_LIBS="$BUILD_LIBS"
3912 else
3913         BUILD_CC="$CC"
3914         BUILD_CFLAGS="$CFLAGS"
3915         BUILD_CPPFLAGS="$CPPFLAGS $GEN_NEED_OPTARG"
3916         BUILD_LDFLAGS="$LDFLAGS"
3917         BUILD_LIBS="$LIBS"
3918 fi
3919
3920 NEWFLAGS=""
3921 for e in $BUILD_LDFLAGS ; do
3922     case $e in
3923         -L*)
3924             case $host_os in
3925                 netbsd*)
3926                     ee=`echo $e | sed -e 's%^-L%-Wl,-rpath,%'`
3927                     NEWFLAGS="$NEWFLAGS $e $ee"
3928                     ;;
3929                 freebsd*)
3930                     ee=`echo $e | sed -e 's%^-L%-Wl,-rpath,%'`
3931                     NEWFLAGS="$NEWFLAGS $e $ee"
3932                     ;;
3933                 solaris*)
3934                     ee=`echo $e | sed -e 's%^-L%-R%'`
3935                     NEWFLAGS="$NEWFLAGS $e $ee"
3936                     ;;
3937                 *)
3938                     NEWFLAGS="$NEWFLAGS $e"
3939                     ;;
3940                 esac
3941             ;;
3942         *)
3943             NEWFLAGS="$NEWFLAGS $e"
3944             ;;
3945     esac
3946 done
3947 BUILD_LDFLAGS="$NEWFLAGS"
3948
3949 NEWFLAGS=""
3950 for e in $DNS_GSSAPI_LIBS ; do
3951     case $e in
3952         -L*)
3953             case $host_os in
3954                 netbsd*)
3955                     ee=`echo $e | sed -e 's%^-L%-Wl,-rpath,%'`
3956                     NEWFLAGS="$NEWFLAGS $e $ee"
3957                     ;;
3958                 freebsd*)
3959                     ee=`echo $e | sed -e 's%^-L%-Wl,-rpath,%'`
3960                     NEWFLAGS="$NEWFLAGS $e $ee"
3961                     ;;
3962                 solaris*)
3963                     ee=`echo $e | sed -e 's%^-L%-R%'`
3964                     NEWFLAGS="$NEWFLAGS $e $ee"
3965                     ;;
3966                 *)
3967                     NEWFLAGS="$NEWFLAGS $e"
3968                     ;;
3969                 esac
3970             ;;
3971         *)
3972             NEWFLAGS="$NEWFLAGS $e"
3973             ;;
3974     esac
3975 done
3976 DNS_GSSAPI_LIBS="$NEWFLAGS"
3977
3978 NEWFLAGS=""
3979 for e in $DNS_CRYPTO_LIBS ; do
3980     case $e in
3981         -L*)
3982             case $host_os in
3983                 netbsd*)
3984                     ee=`echo $e | sed -e 's%^-L%-Wl,-rpath,%'`
3985                     NEWFLAGS="$NEWFLAGS $e $ee"
3986                     ;;
3987                 freebsd*)
3988                     ee=`echo $e | sed -e 's%^-L%-Wl,-rpath,%'`
3989                     NEWFLAGS="$NEWFLAGS $e $ee"
3990                     ;;
3991                 solaris*)
3992                     ee=`echo $e | sed -e 's%^-L%-R%'`
3993                     NEWFLAGS="$NEWFLAGS $e $ee"
3994                     ;;
3995                 *)
3996                     NEWFLAGS="$NEWFLAGS $e"
3997                     ;;
3998                 esac
3999             ;;
4000         *)
4001             NEWFLAGS="$NEWFLAGS $e"
4002             ;;
4003     esac
4004 done
4005 DNS_CRYPTO_LIBS="$NEWFLAGS"
4006
4007 AC_SUBST(BUILD_CC)
4008 AC_SUBST(BUILD_CFLAGS)
4009 AC_SUBST(BUILD_CPPFLAGS)
4010 AC_SUBST(BUILD_LDFLAGS)
4011 AC_SUBST(BUILD_LIBS)
4012
4013 #
4014 # Commands to run at the end of config.status.
4015 # Don't just put these into configure, it won't work right if somebody
4016 # runs config.status directly (which autoconf allows).
4017 #
4018
4019 AC_CONFIG_COMMANDS(
4020         [chmod],
4021         [chmod a+x isc-config.sh doc/doxygen/doxygen-input-filter])
4022
4023 #
4024 # Files to configure.  These are listed here because we used to
4025 # specify them as arguments to AC_OUTPUT.  It's (now) ok to move these
4026 # elsewhere if there's a good reason for doing so.
4027 #
4028
4029 AC_CONFIG_FILES([
4030   make/Makefile
4031   make/mkdep
4032         Makefile
4033         bin/Makefile
4034         bin/check/Makefile
4035         bin/confgen/Makefile
4036         bin/confgen/unix/Makefile
4037         bin/dig/Makefile
4038         bin/dnssec/Makefile
4039         bin/named/Makefile
4040         bin/named/unix/Makefile
4041         bin/nsupdate/Makefile
4042         bin/pkcs11/Makefile
4043         bin/python/Makefile
4044         bin/python/dnssec-checkds.py
4045         bin/python/dnssec-coverage.py
4046         bin/rndc/Makefile
4047         bin/tests/Makefile
4048         bin/tests/atomic/Makefile
4049         bin/tests/db/Makefile
4050         bin/tests/dst/Makefile
4051         bin/tests/dst/Kdh.+002+18602.key
4052         bin/tests/dst/Kdh.+002+18602.private
4053         bin/tests/dst/Kdh.+002+48957.key
4054         bin/tests/dst/Kdh.+002+48957.private
4055         bin/tests/dst/Ktest.+001+00002.key
4056         bin/tests/dst/Ktest.+001+54622.key
4057         bin/tests/dst/Ktest.+001+54622.private
4058         bin/tests/dst/Ktest.+003+23616.key
4059         bin/tests/dst/Ktest.+003+23616.private
4060         bin/tests/dst/Ktest.+003+49667.key
4061         bin/tests/dst/dst_2_data
4062         bin/tests/dst/t2_data_1
4063         bin/tests/dst/t2_data_2
4064         bin/tests/dst/t2_dsasig
4065         bin/tests/dst/t2_rsasig
4066         bin/tests/hashes/Makefile
4067         bin/tests/headerdep_test.sh
4068         bin/tests/master/Makefile
4069         bin/tests/mem/Makefile
4070         bin/tests/names/Makefile
4071         bin/tests/net/Makefile
4072         bin/tests/rbt/Makefile
4073         bin/tests/resolver/Makefile
4074         bin/tests/sockaddr/Makefile
4075         bin/tests/system/Makefile
4076         bin/tests/system/conf.sh
4077         bin/tests/system/builtin/Makefile
4078         bin/tests/system/dlz/prereq.sh
4079         bin/tests/system/dlzexternal/Makefile
4080         bin/tests/system/dlzexternal/ns1/named.conf
4081         bin/tests/system/fetchlimit/Makefile
4082         bin/tests/system/filter-aaaa/Makefile
4083         bin/tests/system/inline/checkdsa.sh
4084         bin/tests/system/lwresd/Makefile
4085         bin/tests/system/statistics/Makefile
4086         bin/tests/system/rpz/Makefile
4087         bin/tests/system/rrl/Makefile
4088         bin/tests/system/rsabigexponent/Makefile
4089         bin/tests/system/tkey/Makefile
4090         bin/tests/system/tsiggss/Makefile
4091         bin/tests/tasks/Makefile
4092         bin/tests/timers/Makefile
4093         bin/tests/virtual-time/Makefile
4094         bin/tests/virtual-time/conf.sh
4095         bin/tools/Makefile
4096         contrib/check-secure-delegation.pl
4097         contrib/zone-edit.sh
4098         doc/Makefile
4099         doc/arm/Makefile
4100         doc/arm/noteversion.xml
4101         doc/arm/pkgversion.xml
4102         doc/arm/releaseinfo.xml
4103         doc/doxygen/Doxyfile
4104         doc/doxygen/Makefile
4105         doc/doxygen/doxygen-input-filter
4106         doc/misc/Makefile
4107         doc/tex/Makefile
4108         doc/tex/armstyle.sty
4109         doc/xsl/Makefile
4110         doc/xsl/isc-docbook-chunk.xsl
4111         doc/xsl/isc-docbook-html.xsl
4112         doc/xsl/isc-manpage.xsl
4113         doc/xsl/isc-notes-html.xsl
4114         isc-config.sh
4115         lib/Makefile
4116         lib/bind9/Makefile
4117         lib/bind9/include/Makefile
4118         lib/bind9/include/bind9/Makefile
4119         lib/dns/Makefile
4120         lib/dns/include/Makefile
4121         lib/dns/include/dns/Makefile
4122         lib/dns/include/dst/Makefile
4123         lib/dns/tests/Makefile
4124         lib/export/Makefile
4125         lib/export/dns/Makefile
4126         lib/export/dns/include/Makefile
4127         lib/export/dns/include/dns/Makefile
4128         lib/export/dns/include/dst/Makefile
4129         lib/export/irs/Makefile
4130         lib/export/irs/include/Makefile
4131         lib/export/irs/include/irs/Makefile
4132         lib/export/isc/$thread_dir/Makefile
4133         lib/export/isc/$thread_dir/include/Makefile
4134         lib/export/isc/$thread_dir/include/isc/Makefile
4135         lib/export/isc/Makefile
4136         lib/export/isc/include/Makefile
4137         lib/export/isc/include/isc/Makefile
4138         lib/export/isc/nls/Makefile
4139         lib/export/isc/unix/Makefile
4140         lib/export/isc/unix/include/Makefile
4141         lib/export/isc/unix/include/isc/Makefile
4142         lib/export/isccfg/Makefile
4143         lib/export/isccfg/include/Makefile
4144         lib/export/isccfg/include/isccfg/Makefile
4145         lib/export/samples/Makefile
4146         lib/export/samples/Makefile-postinstall
4147         lib/irs/Makefile
4148         lib/irs/include/Makefile
4149         lib/irs/include/irs/Makefile
4150         lib/irs/include/irs/netdb.h
4151         lib/irs/include/irs/platform.h
4152         lib/isc/$arch/Makefile
4153         lib/isc/$arch/include/Makefile
4154         lib/isc/$arch/include/isc/Makefile
4155         lib/isc/$thread_dir/Makefile
4156         lib/isc/$thread_dir/include/Makefile
4157         lib/isc/$thread_dir/include/isc/Makefile
4158         lib/isc/Makefile
4159         lib/isc/include/Makefile
4160         lib/isc/include/isc/Makefile
4161         lib/isc/include/isc/platform.h
4162         lib/isc/tests/Makefile
4163         lib/isc/nls/Makefile
4164         lib/isc/unix/Makefile
4165         lib/isc/unix/include/Makefile
4166         lib/isc/unix/include/isc/Makefile
4167         lib/isccc/Makefile
4168         lib/isccc/include/Makefile
4169         lib/isccc/include/isccc/Makefile
4170         lib/isccfg/Makefile
4171         lib/isccfg/include/Makefile
4172         lib/isccfg/include/isccfg/Makefile
4173         lib/lwres/Makefile
4174         lib/lwres/include/Makefile
4175         lib/lwres/include/lwres/Makefile
4176         lib/lwres/include/lwres/netdb.h
4177         lib/lwres/include/lwres/platform.h
4178         lib/lwres/man/Makefile
4179         lib/lwres/tests/Makefile
4180         lib/lwres/unix/Makefile
4181         lib/lwres/unix/include/Makefile
4182         lib/lwres/unix/include/lwres/Makefile
4183         lib/tests/Makefile
4184         lib/tests/include/Makefile
4185         lib/tests/include/tests/Makefile
4186         unit/Makefile
4187         unit/unittest.sh
4188 ])
4189
4190 #
4191 # Do it
4192 #
4193
4194 AC_OUTPUT
4195
4196 #
4197 # Now that the Makefiles exist we can ensure that everything is rebuilt.
4198 #
4199 AC_ARG_WITH(make-clean,
4200 [  --with-make-clean      Run "make clean" at end of configure [[yes|no]].],
4201     make_clean="$withval", make_clean="yes")
4202 case "$make_clean" in
4203 yes)
4204         if test "$no_create" != "yes"
4205         then
4206                 make clean
4207         fi
4208         ;;
4209 esac
4210
4211 AC_ARG_ENABLE(full-report,
4212         [  --enable-full-report   report values of all configure options])
4213
4214 echo "========================================================================"
4215 echo "Configuration summary:"
4216 echo "------------------------------------------------------------------------"
4217 echo "Optional features enabled:"
4218 $use_threads && echo "    Multiprocessing support (--enable-threads)"
4219
4220 test "$enable_rrl" = "yes" && \
4221     echo "    Response Rate Limiting (--enable-rrl)"
4222 test "$enable_fetchlimit" = "yes" && \
4223     echo "    Recursive fetch limits for DoS attack mitigation (--enable-fetchlimit)"
4224 test "$use_gssapi" = "no" || echo "    GSS-API (--with-gssapi)"
4225 test "$use_pkcs11" = "no" || echo "    PKCS#11/Cryptoki support (--with-pkcs11)"
4226 test "$enable_newstats" = "yes" && \
4227     echo "    New statistics (--enable-newstats)"
4228 test "$enable_fixed" = "yes" && \
4229     echo "    Allow 'fixed' rrset-order (--enable-fixed-rrset)"
4230 test "$enable_filter" = "yes" && \
4231     echo "    AAAA filtering (--enable-filter-aaaa)"
4232 test "$want_backtrace" = "yes" && \
4233     echo "    Print backtrace on crash (--enable-backtrace)"
4234 test "$want_symtable" = "minimal" && \
4235     echo "    Use symbol table for backtrace, named only (--enable-symtable)"
4236 test "$want_symtable" = "yes" -o "$want_symtable" = "all" && \
4237     echo "    Use symbol table for backtrace, all binaries (--enable-symtable=all)"
4238 test "$want_querytrace" = "yes" && \
4239     echo "    Very verbose query trace logging (--enable-querytrace)"
4240 test "$atf" = "no" || echo "    Automated Testing Framework (--with-atf)"
4241
4242 # these lines are only printed if run with --enable-full-report 
4243 if test "$enable_full_report" = "yes"; then
4244     test "$enable_ipv6" = "no" -o "$found_ipv6" = "no" || \
4245         echo "    IPv6 support (--enable-ipv6)"
4246     test "X$USE_OPENSSL" = "X" || \
4247             echo "    OpenSSL cryptography/DNSSEC (--with-openssl)"
4248     test "$OPENSSL_GOST" != "yes" || \
4249             echo "    GOST algorithm support (--with-gost)"
4250     test "$OPENSSL_ECDSA" != "yes" || \
4251             echo "    ECDSA algorithm support (--with-ecdsa)"
4252     test "X$PYTHON" = "X" || echo "    Python tools (--with-python)"
4253     test "X$libxml2_libs" = "X" || echo "    XML statistics (--with-libxml2)"
4254 fi
4255
4256 echo "    Dynamically loadable zone (DLZ) drivers:"
4257 test "$use_dlz_bdb" = "no" || \
4258     echo "        Berkeley DB (--with-dlz-bdb)"
4259 test "$use_dlz_ldap" = "no" || \
4260     echo "        LDAP (--with-dlz-ldap)"
4261 test "$use_dlz_mysql" = "no" || \
4262     echo "        MySQL (--with-dlz-mysql)"
4263 test "$use_dlz_odbc" = "no" || \
4264     echo "        ODBC (--with-dlz-odbc)"
4265 test "$use_dlz_postgres" = "no" || \
4266     echo "        Postgres (--with-dlz-postgres)"
4267 test "$use_dlz_filesystem" = "no" || \
4268     echo "        Filesystem (--with-dlz-filesystem)"
4269 test "$use_dlz_stub" = "no" || \
4270     echo "        Stub (--with-dlz-stub)"
4271 test "$use_dlz_bdb $use_dlz_ldap $use_dlz_mysql $use_dlz_odbc $use_dlz_postgres $use_dlz_filesystem $use_dlz_stub" = "no no no no no no no" && echo "        None"
4272 echo
4273
4274 echo "Features disabled or unavailable on this platform:"
4275 $use_threads || echo "    Multiprocessing support (--enable-threads)"
4276 test "$enable_ipv6" = "no" -o "$found_ipv6" = "no" && \
4277         echo "    IPv6 support (--enable-ipv6)"
4278 test "$enable_rrl" = "yes" || \
4279     echo "    Response Rate Limiting (--enable-rrl)"
4280 test "$enable_fetchlimit" = "no" && \
4281         echo "    Recursive fetch limits for DoS attack mitigation (--enable-fetchlimit)"
4282 test "$use_gssapi" = "no" && echo "    GSS-API (--with-gssapi)"
4283 test "$use_pkcs11" = "no" && echo "    PKCS#11/Cryptoki support (--with-pkcs11)"
4284 test "X$enable_newstats" = "X" && echo "    New statistics (--enable-newstats)"
4285 test "$enable_fixed" = "yes" || \
4286     echo "    Allow 'fixed' rrset-order (--enable-fixed-rrset)"
4287 test "$want_backtrace" = "yes" || \
4288     echo "    Print backtrace on crash (--enable-backtrace)"
4289 test "$want_querytrace" = "yes" || \
4290     echo "    Very verbose query trace logging (--enable-querytrace)"
4291 test "$atf" = "no" && echo "    Automated Testing Framework (--with-atf)"
4292 test "X$USE_OPENSSL" = "X" && \
4293         echo "    OpenSSL cryptography/DNSSEC (--with-openssl)"
4294 test "X$USE_OPENSSL" != "X" -a "$OPENSSL_GOST" != "yes" && \
4295     echo "    GOST algorithm support (--with-gost)"
4296 test "X$USE_OPENSSL" != "X" -a "$OPENSSL_ECDSA" != "yes" && \
4297     echo "    ECDSA algorithm support (--with-ecdsa)"
4298 test "X$PYTHON" = "X" && echo "    Python tools (--with-python)"
4299 test "X$libxml2_libs" = "X" && echo "    XML statistics (--with-libxml2)"
4300
4301 if test "X$ac_unrecognized_opts" != "X"; then
4302     echo
4303     echo "Unrecognized options:"
4304     echo "    $ac_unrecognized_opts"
4305 fi
4306 if test "$enable_full_report" != "yes"; then
4307     echo "------------------------------------------------------------------------"
4308     echo "For more detail, use --enable-full-report."
4309 fi
4310 echo "========================================================================"
4311
4312 if test "X$USE_OPENSSL" = "X"; then
4313 cat << \EOF
4314 BIND is being built without OpenSSL. This means it will not have DNSSEC support.
4315 EOF
4316 fi
4317
4318 if test "X$OPENSSL_WARNING" != "X"; then
4319 cat << \EOF
4320 WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
4321 WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
4322 WARNING                                                                 WARNING
4323 WARNING         Your OpenSSL crypto library may be vulnerable to        WARNING
4324 WARNING         one or more of the the following known security         WARNING
4325 WARNING         flaws:                                                  WARNING
4326 WARNING                                                                 WARNING
4327 WARNING         CAN-2002-0659, CAN-2006-4339, CVE-2006-2937,            WARNING
4328 WARNING         CVE-2006-2940 and CVE-2015-3193.                        WARNING
4329 WARNING                                                                 WARNING
4330 WARNING         It is recommended that you upgrade to OpenSSL           WARNING
4331 WARNING         version 1.0.2e/1.0.1/1.0.0/0.9.9/0.9.8d/0.9.7l          WARNING
4332 WARNING         (or greater).                                           WARNING
4333 WARNING                                                                 WARNING
4334 WARNING         You can disable this warning by specifying:             WARNING
4335 WARNING                                                                 WARNING
4336 WARNING               --disable-openssl-version-check                   WARNING
4337 WARNING                                                                 WARNING
4338 WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
4339 WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
4340 EOF
4341 fi
4342
4343 # Tell Emacs to edit this file in shell mode.
4344 # Local Variables:
4345 # mode: sh
4346 # End: