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