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