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