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