1case $host in 2 *-*-darwin*) 3 AC_DEFINE(HAVE_DARWIN, 1, [enable darwin/osx workarounds]) 4 ;; 5 6 *-*-openbsd*) 7 AC_DEFINE(HAVE_OPENBSD_BUGS, 1, [bug workaround]) 8 ;; 9 10 *-*-solaris*) 11 AC_DEFINE(HAVE_SENDMSG_DEADLOCK, 1, [bug workaround]) 12 AC_DEFINE(HAVE_SOLARIS_BUGS, 1, [bug workaround]) 13 AC_DEFINE(SPT_TYPE, SPT_REUSEARGV, [setproctitle replacement type]) 14 ;; 15 16 *-*-linux-*) 17 AC_DEFINE(HAVE_LINUX_BUGS, 1, [bug workaround]) 18 AC_DEFINE(SPT_TYPE, SPT_REUSEARGV, [setproctitle replacement type]) 19 ;; 20 21 *-*-aix*) 22 AC_DEFINE(HAVE_SYSTEM_XMSG_MAGIC, 1, [platform workaround]) 23 ;; 24esac 25 26dnl Checking variable sizes 27AC_CHECK_SIZEOF(char) 28AC_CHECK_SIZEOF(short) 29AC_CHECK_SIZEOF(int) 30AC_CHECK_SIZEOF(long) 31 32dnl Checks for header files. 33AC_HEADER_SYS_WAIT 34AC_CHECK_HEADERS(fcntl.h limits.h malloc.h paths.h strings.h syslog.h) 35AC_CHECK_HEADERS(unistd.h crypt.h stddef.h sys/file.h sys/ioctl.h sys/time.h) 36AC_CHECK_HEADERS(shadow.h ifaddrs.h sys/sem.h netinet/in.h rpc/rpc.h) 37AC_CHECK_HEADERS(sys/ipc.h arpa/nameser.h net/if_dl.h execinfo.h sys/pstat.h) 38AC_CHECK_HEADERS(sys/shm.h valgrind/valgrind.h netinet/tcp_fsm.h) 39 40#some header dependencies for netinet/ip.h, use compilation test 41AC_MSG_CHECKING([for netinet/ip.h]) 42AC_TRY_COMPILE([ 43#include <sys/types.h> 44#include <sys/socket.h> 45 46#include <netinet/in.h> 47#include <netinet/in_systm.h> 48#include <netinet/ip.h> 49], [], [AC_MSG_RESULT(yes) 50 AC_DEFINE(HAVE_NETINET_IP_H, 1, [netinet/ip.h header found])], 51 [AC_MSG_RESULT(no)]) 52 53case $host in 54 #XXX only check for priv.h support on Solaris for now 55 *-*-solaris*) 56 AC_CHECK_HEADERS(priv.h, 57 [AC_DEFINE(HAVE_PRIVILEGES, 1, [Some privilege type supported]) 58 AC_DEFINE(HAVE_SOLARIS_PRIVS, 1, [Solaris priv.h support])]) 59 ;; 60esac 61 62AC_CHECK_HEADERS([netinet/ip_var.h], [], [], [ 63#if HAVE_SYS_TYPES_H 64#include <sys/types.h> 65#endif 66#if HAVE_NETINET_IN_H 67#include <netinet/in.h> 68#endif 69]) 70 71AC_CHECK_HEADERS([resolv.h], [], [], [ 72#if HAVE_SYS_TYPES_H 73#include <sys/types.h> 74#endif 75#if HAVE_NETINET_IN_H 76#include <netinet/in.h> 77#endif 78#if HAVE_ARPA_NAMESER_H 79#include <arpa/nameser.h> 80#endif 81]) 82 83AC_CHECK_HEADER(sys/sockio.h, 84[AC_DEFINE(HAVE_SYS_SOCKIO_H, 1, [sys/sockio.h exists]) 85 have_sys_sockio_h=t]) 86 87dnl Checks for typedefs, structures, and compiler characteristics. 88AC_MSG_CHECKING([whether <sys/types.h> defines const]) 89AC_EGREP_CPP(yes, [ 90#include <sys/types.h> 91#ifdef const 92yes 93#endif 94], [AC_MSG_RESULT(yes)], 95 [AC_MSG_RESULT(no) 96 check_const="yes"]) 97if test x$check_const = xyes; then 98 AC_C_CONST 99fi 100 101#looks for Linux + systems with RTAX_GATEWAY defined in net/route.h 102AC_MSG_CHECKING([for supported routing socket communication]) 103AH_TEMPLATE([HAVE_ROUTE_SOURCE], [routing socket communication supported]) 104unset no_routeinfo 105AC_EGREP_CPP(yes, [ 106#include <net/route.h> 107#ifdef linux 108yes 109#endif /* linux */ 110], [AC_DEFINE(HAVE_ROUTE_SOURCE, 1) 111 AC_DEFINE(HAVE_ROUTEINFO_LINUX, 1, [Linux type routing socket]) 112 AC_MSG_RESULT(yes)], 113 [AC_EGREP_CPP(yes, [ 114#include <net/route.h> 115#ifdef RTA_GATEWAY 116yes 117#endif /* RTA_GATEWAY */ 118], [AC_DEFINE(HAVE_ROUTE_SOURCE, 1) 119 AC_DEFINE(HAVE_ROUTEINFO_BSD, 1, [BSD type routing socket]) 120 AC_MSG_RESULT(yes)], 121 [AC_MSG_RESULT([no, might result in reduced functionality]) 122 no_routeinfo=t])]) 123 124#XXXsys/socket.h? 125AC_MSG_CHECKING([for struct ip_opts in <netinet/in.h>]) 126AC_EGREP_CPP([struct.*ipoption], [ 127#include <netinet/ip_var.h> 128], [AC_DEFINE(HAVE_STRUCT_IPOPTS, 1, [ip_opts defined in netinet/in.h]) 129 AC_MSG_RESULT(yes)], 130 AC_MSG_RESULT(no)) 131 132AC_MSG_CHECKING([for struct tcp_info in <netinet/tcp.h>]) 133AC_EGREP_CPP([struct.*tcp_info], [ 134#include <netinet/tcp.h> 135], [AC_DEFINE(HAVE_TCP_INFO, 1, [tcp_info struct found in netinet/tcp.h]) 136 AC_MSG_RESULT(yes) 137 138 # check which values are found in the tcp_info struct 139 # (limitations in autoconf makes it necessary to list each name explicitly 140 # and not use a list stored in a variable) 141 142 #values not present on some older linux versions 143 L_TCPINFOCHECK(tcpi_rcv_rtt) 144 L_TCPINFOCHECK(tcpi_rcv_space) 145 L_TCPINFOCHECK(tcpi_total_retrans) 146 147 #values not present on freebsd 148 L_TCPINFOCHECK(tcpi_advmss) 149 L_TCPINFOCHECK(tcpi_ato) 150 L_TCPINFOCHECK(tcpi_backoff) 151 L_TCPINFOCHECK(tcpi_ca_state) 152 L_TCPINFOCHECK(tcpi_fackets) 153 L_TCPINFOCHECK(tcpi_last_ack_recv) 154 L_TCPINFOCHECK(tcpi_last_ack_sent) 155 L_TCPINFOCHECK(tcpi_last_data_recv) 156 L_TCPINFOCHECK(tcpi_last_data_sent) 157 L_TCPINFOCHECK(tcpi_lost) 158 L_TCPINFOCHECK(tcpi_pmtu) 159 L_TCPINFOCHECK(tcpi_probes) 160 L_TCPINFOCHECK(tcpi_rcv_rtt) 161 L_TCPINFOCHECK(tcpi_rcv_ssthresh) 162 L_TCPINFOCHECK(tcpi_reordering) 163 L_TCPINFOCHECK(tcpi_retrans) 164 L_TCPINFOCHECK(tcpi_retransmits) 165 L_TCPINFOCHECK(tcpi_sacked) 166 L_TCPINFOCHECK(tcpi_unacked)], 167 [AC_MSG_RESULT(no)]) 168 169AC_MSG_CHECKING([whether <sys/types.h> defines inline]) 170AC_EGREP_CPP(yes, [ 171#include <sys/types.h> 172#ifdef inline 173yes 174#endif 175], [AC_MSG_RESULT(yes)], 176 [AC_MSG_RESULT(no) 177 check_inline="yes"]) 178if test x"${check_inline}" = xyes; then 179 AC_C_INLINE 180fi 181 182AC_TYPE_UID_T 183AC_TYPE_OFF_T 184AC_TYPE_PID_T 185AC_TYPE_SIZE_T 186AC_HEADER_TIME 187 188AC_SYS_LARGEFILE 189 190AC_MSG_CHECKING([for in6_addr]) 191AC_TRY_COMPILE([ 192#include <sys/types.h> 193#include <sys/socket.h> 194#include <netinet/in.h> 195], [ 196struct in6_addr sin6; 197], [AC_MSG_RESULT(yes) 198 AC_DEFINE(HAVE_IN6_ADDR, 1, [in6_addr defined])], 199 [AC_MSG_RESULT(no)]) 200 201AC_MSG_CHECKING([to see if openlog accepts LOG_PERROR]) 202AC_EGREP_CPP(yes, [ 203#include <syslog.h> 204#ifdef LOG_PERROR 205yes 206#endif 207], [AC_DEFINE(HAVE_OPENLOG_LOG_PERROR, 1, [openlog supports LOG_PERROR]) 208 AC_MSG_RESULT(yes)], 209 AC_MSG_RESULT(no)) 210 211AC_MSG_CHECKING([to see if stdlib.h defines EXIT_FAILURE]) 212AC_EGREP_CPP(yes, [ 213#include <stdlib.h> 214#ifdef EXIT_FAILURE 215yes 216#endif 217], [AC_MSG_RESULT(yes)], 218 [AC_DEFINE(NEED_EXIT_FAILURE, 1, [EXIT_FAILURE not defined in stdlib.h]) 219 AC_MSG_RESULT(no)]) 220 221#XXX actually checks if AF_UNIX should be used instead of AF_LOCAL 222AC_MSG_CHECKING([whether <sys/socket.h> uses AF_UNIX]) 223AC_EGREP_CPP(yes, [ 224#include <sys/types.h> 225#include <sys/socket.h> 226#ifdef AF_LOCAL 227#else 228#ifdef AF_UNIX 229yes 230#endif 231#endif 232], [AC_DEFINE(NEED_AF_LOCAL, 1, [need AF_LOCAL definition]) 233 AC_MSG_RESULT(yes)], 234 AC_MSG_RESULT(no)) 235 236AC_MSG_CHECKING([for SIGINFO]) 237AC_EGREP_CPP(yes, [ 238#include <signal.h> 239#ifdef SIGINFO 240yes 241#endif 242], [AC_DEFINE(HAVE_SIGNAL_SIGINFO, 1, [signal.h defined SIGINFO]) 243 AC_MSG_RESULT(yes)], 244 AC_MSG_RESULT(no)) 245 246AC_MSG_CHECKING([to see if MSG_WAITALL exists]) 247AC_EGREP_CPP(yes, [ 248#include <sys/socket.h> 249#ifdef MSG_WAITALL 250yes 251#endif 252], [AC_DEFINE(HAVE_MSG_WAITALL, 1, [sys/socket.h defines MSG_WAITALL]) 253 AC_MSG_RESULT(yes)], 254 AC_MSG_RESULT(no)) 255 256AC_MSG_CHECKING([whether realloc with a NULL pointer calls malloc]) 257AC_TRY_RUN([ 258#include <stdlib.h> 259#ifndef NULL 260#define NULL (char *)0 261#endif 262 263int main() 264{ 265 /* will assume this test doesn\'t fail because of lack of memory */ 266 if (realloc(NULL, 1) == NULL) 267 return 1; 268 else 269 return 0; 270}], [AC_MSG_RESULT(yes)], 271 [AC_DEFINE(HAVE_NOMALLOC_REALLOC, 1, [realloc never calls malloc]) 272 AC_MSG_RESULT(no)], 273 [dnl assume malloc is not called when cross-compiling 274 AC_DEFINE(HAVE_NOMALLOC_REALLOC, 1, [realloc never calls malloc]) 275 AC_MSG_RESULT(no)]) 276 277# AC_MSG_CHECKING([whether free can be called with NULL]) 278# AC_TRY_RUN([ 279# #include <stdlib.h> 280# #ifndef NULL 281# #define NULL (char *)0 282# #endif 283 284# int main() 285# { 286# /* will assume core dump/seg fault if it doesn\'t work */ 287# free(NULL); 288# return 0; 289# }], [AC_MSG_RESULT(yes)], 290# [AC_DEFINE(HAVE_NONULL_FREE, 1, [free does not accept NULL parameter]) 291# AC_MSG_RESULT(no)], 292# [dnl assume NULL is not accepted when cross-compiling 293# AC_DEFINE(HAVE_NONULL_FREE, 1, [free does not accept NULL parameter]) 294# AC_MSG_RESULT(no)]) 295#XXX always set for now 296AC_DEFINE(HAVE_NONULL_FREE, 1, [free does not accept NULL parameter]) 297 298AC_MSG_CHECKING([if getsockopt needs cast]) 299AC_TRY_COMPILE([ 300#include <sys/types.h> 301#include <sys/socket.h> 302int getsockopt(int, int, int, char *, int *); 303], [ 1 ], 304 [AC_DEFINE(NEED_GETSOCKOPT_CAST, 1, [getsockopt needs cast]) 305 AC_MSG_RESULT(yes)], 306 AC_MSG_RESULT(no)) 307 308#include both <sys/ioctl.h> and <sys/sockio.h>? 309if test x$have_sys_sockio_h = xt; then 310 AC_MSG_CHECKING([to see if <sys/sockio.h> should be included]) 311 AC_EGREP_CPP(yes, [ 312#include <sys/ioctl.h> 313#ifdef SIOCATMARK 314#else 315#include <sys/sockio.h> 316#ifdef SIOCATMARK 317yes 318#endif 319#endif 320], [AC_DEFINE(NEED_SYS_SOCKIO_H, 1, [sys/sockio.h must be included]) 321 AC_MSG_RESULT(yes)], 322 AC_MSG_RESULT(no)) 323fi 324 325#XXX should be more generic, check if nonexistent 326#SV_INTERRUPT, but not SA_RESTART defined? 327AC_MSG_CHECKING([to see if SV_INTERRUPT should be used]) 328AC_EGREP_CPP(yes, [ 329#include <signal.h> 330#ifdef SA_RESTART 331#else 332# ifdef SV_INTERRUPT 333yes 334# endif 335#endif 336], [AC_DEFINE(NEED_SA_RESTART, 1, [use SA_RESTART, not SV_INTERRUPT]) 337 AC_MSG_RESULT(yes)], 338 AC_MSG_RESULT(no)) 339 340#XXX seems to be supported on Solaris2.6, but there might be some 341#defines that need to be set (should _XOPEN_SOURCE be defined on all 342#platforms?) 343AC_MSG_CHECKING([if cmsghdr exists in <sys/socket.h>]) 344case $host in 345 *) 346 AC_TRY_COMPILE([ 347#include <sys/types.h> 348#include <sys/socket.h> 349], [struct cmsghdr foo = {1,1,1}; 350 struct msghdr bar; 351 foo.cmsg_len = 0; 352 foo.cmsg_type = SCM_RIGHTS; 353 foo.cmsg_level = SOL_SOCKET; 354 bar.msg_controllen = 1; 355], [AC_DEFINE(HAVE_CMSGHDR, 1, [struct cmsghdr exists]) 356 AC_MSG_RESULT(yes)], 357 AC_MSG_RESULT(no)) 358 ;; 359esac 360 361AC_MSG_CHECKING([for CMSG_SPACE in sys/socket.h]) 362AC_TRY_LINK([ 363#include <sys/types.h> 364#include <sys/socket.h> 365], [int d = CMSG_SPACE(4); 366 return 0; 367], [AC_MSG_RESULT(yes) 368 AC_DEFINE(HAVE_CMSG_SPACE, 1, CMSG_SPACE exists)], 369 [AC_MSG_RESULT(no)]) 370 371AC_MSG_CHECKING([for CMSG_LEN in sys/socket.h]) 372AC_TRY_LINK([ 373#include <sys/types.h> 374#include <sys/socket.h> 375], [int d = CMSG_LEN(4); 376 return 0; 377], [AC_MSG_RESULT(yes) 378 AC_DEFINE(HAVE_CMSG_LEN, 1, [CMSG_LEN exists])], 379 [AC_MSG_RESULT(no)]) 380 381unset have_sa_len 382AC_MSG_CHECKING([for sa_len in sockaddr]) 383AC_TRY_COMPILE([ 384#include <sys/types.h> 385#include <sys/socket.h> 386], [struct sockaddr sa; 387sa.sa_len = 0; 388], [AC_DEFINE(HAVE_SOCKADDR_SA_LEN, 1, [sa_len exists in sockaddr]) 389 have_sa_len=t 390 AC_MSG_RESULT(yes)], 391 [AC_MSG_RESULT(no)]) 392 393if test x"${have_sa_len}" != x; then 394 AC_MSG_CHECKING([for sa_len type]) 395 oCFLAGS="$CFLAGS" 396 CFLAGS="$CFLAGS${CFLAGS:+ }$FAILWARN" 397 unset sa_len_type_found 398 for type in uint8_t "unsigned char"; do 399 AC_TRY_COMPILE([ 400#include <sys/types.h> 401#include <sys/socket.h>], [ 402struct sockaddr sa; 403$type *sa_len_ptr; 404sa_len_ptr = &sa.sa_len; 405sa_len_ptr++; /* use to avoid warning/error */], 406 [AC_DEFINE_UNQUOTED(sa_len_type, [$type], [sa_len type]) 407 sa_len_type_found=t 408 break]) 409 done 410 CFLAGS="$oCFLAGS" 411 412 if test x"${sa_len_type_found}" != x; then 413 AC_MSG_RESULT([yes]) 414 else 415 AC_MSG_RESULT([no]) 416 AC_MSG_WARN([unable to obtain sa_len type, exiting]) 417 exit 1 418 fi 419else 420 AC_DEFINE(sa_len_type, [socklen_t], [sa_len type]) 421fi 422 423unset have_ss_len 424AC_MSG_CHECKING([for sockaddr_storage ss_len in sockaddr]) 425AC_TRY_COMPILE([ 426#include <sys/types.h> 427#include <sys/socket.h> 428], [struct sockaddr_storage ss; 429ss.ss_len = 0; 430], [AC_DEFINE(HAVE_SOCKADDR_STORAGE_SS_LEN, 1, [ss_len exists in sockaddr_storage]) 431 have_ss_len=t 432 AC_MSG_RESULT(yes)], 433 [AC_MSG_RESULT(no)]) 434 435AC_MSG_CHECKING([for __res_state options type]) 436oCFLAGS="$CFLAGS" 437CFLAGS="$CFLAGS${CFLAGS:+ }$FAILWARN" 438unset res_options_type_found 439for type in "unsigned int" u_long; do 440 AC_TRY_COMPILE([ 441#include <sys/types.h> 442#include <netinet/in.h> 443#include <arpa/nameser.h> 444#include <resolv.h>], [ 445struct __res_state res; 446$type *res_options_ptr; 447res_options_ptr = &res.options; 448res_options_ptr++;], 449 [AC_DEFINE_UNQUOTED(res_options_type_t, [$type], [resolver options type]) 450 res_options_type_found=t 451 break]) 452done 453CFLAGS="$oCFLAGS" 454if test x"${res_options_type_found}" != x; then 455 AC_MSG_RESULT([yes]) 456else 457 AC_MSG_RESULT([no]) 458 AC_MSG_WARN([unable to obtain __res_state options type, setting to unsigned long]) 459 AC_DEFINE_UNQUOTED(res_options_type_t, [unsigned long], [resolver options type]) 460fi 461 462#AIX 6.1 needs sys/select.h, but can be problematic on other platforms 463AC_MSG_CHECKING([if sys/select.h is needed]) 464AC_TRY_COMPILE([ 465#include <sys/types.h> 466#include <sys/time.h> 467#include <string.h> 468#include <unistd.h> 469], [fd_set *fdp; 470 size_t p; 471 fdp = NULL; 472 p = NFDBITS * sizeof(fd_mask); 473], [AC_MSG_RESULT(no)], 474 [dnl compilation failure, try with sys/select.h (ignore if this fails) 475 AC_TRY_COMPILE([ 476#include <sys/types.h> 477#include <sys/time.h> 478#include <sys/select.h> 479#include <string.h> 480#include <unistd.h> 481], [fd_set *fdp; 482 size_t p; 483 fdp = NULL; 484 p = NFDBITS * sizeof(fd_mask);], 485 [AC_DEFINE(HAVE_SYS_SELECT_H, 1, [sys/select.h needed]) 486 AC_MSG_RESULT(yes)], 487 [AC_MSG_RESULT(no)])]) 488 489AC_MSG_CHECKING([to see if malloc_options exists]) 490AC_TRY_LINK([extern char *malloc_options;], 491[ malloc_options = 0; ], 492[AC_DEFINE(HAVE_MALLOC_OPTIONS, 1, [support for malloc debugging]) 493 AC_MSG_RESULT(yes)], 494[AC_MSG_RESULT(no)]) 495 496AC_MSG_CHECKING([to see if __progname exists]) 497AC_TRY_LINK([extern char *__progname;], 498[ __progname = 0; ], 499[AC_DEFINE(HAVE_PROGNAME, 1, [programe name symbol exists]) 500 AC_MSG_RESULT(yes)], 501[AC_MSG_RESULT(no)]) 502 503dnl Checks for libraries. 504AC_SEARCH_LIBS(crypt, crypt) 505 506#HP-UX 11.00 507AC_SEARCH_LIBS(getspnam, sec) 508 509#FreeBSD has setproctitle in -lutil 510AC_SEARCH_LIBS(setproctitle, util) 511 512#expected select behavior? 513unset nb_select_err 514L_UNCON_SELECT([], 515 [nb_select_err=t]) 516 517if test x"${nb_select_err}" = xt; then 518 AC_MSG_WARN([socksify operations on nonblocking sockets might fail on this platform]) 519fi 520 521#Linux (RedHat 5.2) defines socklen_t in <socketbits.h>, which is 522#included by <sys/socket.h>. check for this first. 523AC_MSG_CHECKING([for socklen_t]) 524AC_TRY_COMPILE([ 525#include <sys/types.h> 526#include <sys/socket.h> 527], [socklen_t foo = 1;], 528 [AC_MSG_RESULT(yes) 529 socklen_found=t], 530 [AC_MSG_RESULT(no) 531 socklen_found=""]) 532 533AH_TEMPLATE([socklen_t], [platform workaround]) 534if test x"$socklen_found" = x; then 535 case $host in 536 alpha*-dec-osf* | *-*-aix*) 537 AC_DEFINE(socklen_t, size_t) 538 ;; 539 540 *) 541 AC_DEFINE(socklen_t, int) 542 ;; 543 esac 544fi 545 546#sig_atomic_t 547AC_MSG_CHECKING([for sig_atomic_t in <signal.h>]) 548AC_EGREP_CPP(sig_atomic_t, [ 549#include <signal.h> 550], [AC_DEFINE(HAVE_SIG_ATOMIC_T, 1, [sig_atomic_t defined in signal.h]) 551 case $host in 552 *-*-aix*) 553 AC_DEFINE(HAVE_VOLATILE_SIG_ATOMIC_T, 1, [platform workaround]) 554 ;; 555 esac 556 AC_MSG_RESULT(yes)], 557 [AC_MSG_RESULT(no)]) 558 559#try to identify number of valid signal values 560SIGDEFAULT=128 561unset sigmax 562AC_MSG_CHECKING([for number of valid signal values]) 563AC_TRY_RUN([ 564#include <signal.h> 565#include <stdio.h> 566#include <stdlib.h> 567 568int main(int argc, char *argv[]) 569{ 570 FILE *fp; 571 int minval = 0; 572 int i; 573 574 for (i = 1; i < 1000; i++) { 575 if (i == SIGKILL || i == SIGSTOP) 576 continue; 577 if (signal(i, SIG_DFL) == SIG_ERR) { 578 perror("signal"); 579 break; 580 } 581 } 582 minval = i; 583 fprintf(stderr, "notice: signal() based value: %d\n", minval); 584 585#ifdef NSIG 586 if (NSIG > minval) { 587 minval = NSIG; 588 fprintf(stderr, "notice: NSIG based value: %d\n", minval); 589 } 590#endif /* NSIG */ 591 592#ifdef SIGRTMAX 593 /* note: this value might be changed at runtime (e.g., Linux) */ 594 if (SIGRTMAX > minval) { 595 minval = SIGRTMAX; 596 fprintf(stderr, "notice: SIGRTMAX based value: %d\n", minval); 597 } 598#endif /* SIGRTMAX */ 599 600 /* get base 2 value */ 601 for (i = 0; i < 10; i++) { 602 int n = 1 << i; 603 if (n > minval) { 604 minval = n; 605 fprintf(stderr, "notice: base 2 based increase: %d\n", minval); 606 break; 607 } 608 } 609 610 fprintf(stderr, "notice: setting signal max value to %d\n", minval); 611 if ((fp = fopen("conftest.out", "w")) == NULL) { 612 perror("fopen"); 613 exit(1); 614 } 615 /* write zero for no special handling needed */ 616 fprintf(fp, "%ld\n", minval); 617 fclose(fp); 618 exit(0); 619 620 return 0; 621}], [sigmax=`test -s conftest.out && cat conftest.out`], 622[], 623[dnl set a large value when cross-compiling 624 sigmax=128 625 AC_MSG_RESULT([cross-compiling, setting to $sigmax]) 626]) 627if test x"$sigmax" = x; then 628 sigmax=$SIGDEFAULT 629 AC_MSG_RESULT([got no value, setting to $sigmax]) 630else 631 AC_MSG_RESULT(setting to $sigmax) 632fi 633AC_DEFINE_UNQUOTED(SOCKS_NSIG, $sigmax, [Guess at max number of valid signals]) 634 635AC_CHECK_TYPES([int8_t, int16_t, int32_t, uint8_t, uint16_t, uint32_t, 636 in_port_t, in_addr_t], 637 , , 638[ 639#include <sys/types.h> 640#include <netinet/in.h> 641]) 642AC_CHECK_TYPE(ssize_t, int) 643 644dnl Checks for library functions. 645AC_FUNC_MEMCMP 646AC_FUNC_SETVBUF_REVERSED 647AC_TYPE_SIGNAL 648AC_FUNC_STRFTIME 649AC_FUNC_UTIME_NULL 650AC_FUNC_VPRINTF 651 652#doesn't work if test links with -lsocket (Solaris) 653AC_SEARCH_LIBS(inet_addr, nsl) 654 655#NOTE: also test for -lsocket in preload.m4. not really needed there 656# as check is also done here (for checks such as L_PIPETYPE() that 657# might need to link with -lsocket, but also having test there makes 658# code in that file easier to read. 659AC_SEARCH_LIBS(getsockopt, socket) 660 661AC_CHECK_FUNCS(getprpwnam getspnam getpwnam_shadow bindresvport) 662AC_CHECK_FUNCS(getpass) 663 664AC_MSG_CHECKING([for system V getpwnam]) 665unset getpwnam_alt 666if test x"${ac_cv_func_getprpwnam}" = xyes; then 667 getpwnam_alt=t 668fi 669 670if test x"${ac_cv_func_getspnam}" = xyes; then 671 getpwnam_alt=t 672fi 673 674#XXX 675if test x"${getpwnam_alt}" = x; then 676 AC_DEFINE(HAVE_WORKING_GETPWNAM, 1, [system V getpwnam]) 677 AC_MSG_RESULT(no) 678else 679 AC_MSG_RESULT(yes) 680fi 681 682#try to determine pipe buffer type 683L_PIPETYPE() 684 685#obtain highest valid select() timeout seconds value 686L_SELECT_MAXTIMEOUT 687 688#generate list of errno values 689ERRNOSRC="include/errorsymbols_gen.h" 690cp /dev/null $ERRNOSRC 691ERRVALFILE="errorvals.txt" #for counting unique (numeric) values 692cp /dev/null $ERRVALFILE 693unset ERRNOVALS 694L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, E2BIG) 695L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EACCES) 696L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EADDRINUSE) 697L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EADDRNOTAVAIL) 698L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EADV) 699L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EAFNOSUPPORT) 700L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EAGAIN) 701L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EALREADY) 702L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EAUTH) 703L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBADARCH) 704L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBADE) 705L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBADEXEC) 706L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBADF) 707L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBADFD) 708L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBADMACHO) 709L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBADMSG) 710L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBADR) 711L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBADRPC) 712L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBADRQC) 713L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBADSLT) 714L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBFONT) 715L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBUSY) 716L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ECANCELED) 717L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ECAPMODE) 718L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ECHILD) 719L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ECHRNG) 720L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ECOMM) 721L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ECONNABORTED) 722L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ECONNREFUSED) 723L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ECONNRESET) 724L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EDEADLK) 725L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EDEADLOCK) 726L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EDESTADDRREQ) 727L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EDEVERR) 728L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EDIRIOCTL) 729L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EDOM) 730L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EDOOFUS) 731L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EDQUOT) 732L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EEXIST) 733L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EFAULT) 734L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EFBIG) 735L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EFTYPE) 736L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EHOSTDOWN) 737L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EHOSTUNREACH) 738L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EIDRM) 739L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EILSEQ) 740L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EINPROGRESS) 741L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EINTR) 742L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EINVAL) 743L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EIO) 744L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EIPSEC) 745L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EISCONN) 746L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EISDIR) 747L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EJUSTRETURN) 748L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EL2HLT) 749L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EL2NSYNC) 750L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EL3HLT) 751L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EL3RST) 752L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ELAST) 753L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ELIBACC) 754L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ELIBBAD) 755L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ELIBEXEC) 756L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ELIBMAX) 757L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ELIBSCN) 758L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ELNRNG) 759L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ELOCKUNMAPPED) 760L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ELOOP) 761L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EMEDIUMTYPE) 762L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EMFILE) 763L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EMLINK) 764L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EMSGSIZE) 765L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EMULTIHOP) 766L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENAMETOOLONG) 767L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENEEDAUTH) 768L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENETDOWN) 769L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENETRESET) 770L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENETUNREACH) 771L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENFILE) 772L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOANO) 773L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOATTR) 774L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOBUFS) 775L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOCSI) 776L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENODATA) 777L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENODEV) 778L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOENT) 779L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOEXEC) 780L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOIOCTL) 781L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOLCK) 782L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOLINK) 783L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOMEDIUM) 784L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOMEM) 785L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOMSG) 786L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENONET) 787L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOPKG) 788L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOPOLICY) 789L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOPROTOOPT) 790L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOSPC) 791L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOSR) 792L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOSTR) 793L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOSYS) 794L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTACTIVE) 795L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTBLK) 796L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTCAPABLE) 797L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTCONN) 798L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTDIR) 799L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTEMPTY) 800L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTRECOVERABLE) 801L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTSOCK) 802L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTSUP) 803L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTTY) 804L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTUNIQ) 805L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENXIO) 806L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EOPNOTSUPP) 807L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EOVERFLOW) 808L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EOWNERDEAD) 809L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EPERM) 810L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EPFNOSUPPORT) 811L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EPIPE) 812L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EPROCLIM) 813L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EPROCUNAVAIL) 814L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EPROGMISMATCH) 815L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EPROGUNAVAIL) 816L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EPROTO) 817L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EPROTONOSUPPORT) 818L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EPROTOTYPE) 819L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EPWROFF) 820L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ERANGE) 821L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EREMCHG) 822L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EREMOTE) 823L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ERESTART) 824L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EROFS) 825L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ERPCMISMATCH) 826L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ESHLIBVERS) 827L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ESHUTDOWN) 828L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ESOCKTNOSUPPORT) 829L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ESPIPE) 830L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ESRCH) 831L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ESRMNT) 832L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ESTALE) 833L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ESTRPIPE) 834L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ETIME) 835L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ETIMEDOUT) 836L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ETOOMANYREFS) 837L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ETXTBSY) 838L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EUNATCH) 839L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EUSERS) 840L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EWOULDBLOCK) 841L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EXDEV) 842L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EXFULL) 843L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ECLONEME) 844L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ECORRUPT) 845L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EDESTADDREQ) 846L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EDIST) 847L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EFORMAT) 848L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EMEDIA) 849L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOCONNECT) 850L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTEMPTY) 851L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTREADY) 852L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTRUST) 853L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ESAD) 854L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ESOFT) 855L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ESYSERROR) 856L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EWOULDBLOCK) 857L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EWRPROTECT) 858 859if test x"$ERRNOVALS" = x; then 860 AC_MSG_FAILURE([error: no errno symbols found]) 861fi 862ERRNOCNT=`echo $ERRNOVALS | wc -w | awk '{ print $1 }'` 863 864AC_MSG_CHECKING([errno symbols]) 865unset UNIQUEVALS UNIQUESYMBOLS 866if test -s $ERRVALFILE; then 867 UNIQUEVALS=`sort $ERRVALFILE | uniq | wc -l | awk '{ print $1 }'` 868 UNIQUESYMBOLS=`cat $ERRVALFILE | wc -l | awk '{ print $1 }'` 869 if test $ERRNOCNT -ne $UNIQUESYMBOLS; then 870 AC_MSG_FAILURE([internal error: errno symbol count mismatch]) 871 fi 872 AC_DEFINE_UNQUOTED(UNIQUE_ERRNO_VALUES, $UNIQUEVALS, 873 [Number of unique errno numbers]) 874 AC_MSG_RESULT([unique symbols: $UNIQUESYMBOLS, unique values: $UNIQUEVALS]) 875else 876 AC_MSG_FAILURE([error: unable to determine errno symbol values]) 877fi 878 879changequote(<<, >>)dnl 880echo "/* NOTICE: $ERRNOSRC: Generated from by configure */" >>$ERRNOSRC 881echo "" >>$ERRNOSRC 882echo "static const errorsymboltable_t errnosymbolv[] = {" >>$ERRNOSRC 883changequote([, ])dnl 884 885#generic list 886for errno in $ERRNOVALS; do 887 echo " { \"$errno\", $errno }," >>$ERRNOSRC 888done 889 890#keyword alias list 891maxaliaslen=0 #highest number of values for an alias 892 893#errno values that can match 'no-route' keyword (if found on platform) 894ERRNO_NOROUTE="ENETUNREACH EHOSTUNREACH ENETDOWN ETIMEDOUT" 895keyword="no-route" 896keycnt=0 897for keyval in ${ERRNO_NOROUTE}; do 898 for errno in $ERRNOVALS; do 899 if test x"$keyval" = x"$errno"; then 900 echo " { \"$keyword\", $errno }," >>$ERRNOSRC 901 keycnt=`expr $keycnt + 1` 902 fi 903 done 904done 905 906#any-error; alias for all values 907keyword="system-any" 908keycnt=0 909for errno in $ERRNOVALS; do 910 echo " { \"$keyword\", $errno }," >>$ERRNOSRC 911 keycnt=`expr $keycnt + 1` 912done 913 914if test $keycnt -gt $maxaliaslen; then 915 maxaliaslen=$keycnt 916fi 917 918echo "};" >>$ERRNOSRC 919 920AC_DEFINE_UNQUOTED(MAX_ERRNO_VALUES_FOR_SYMBOL, $maxaliaslen, 921 [Max number of errno values matching any alias keyword]) 922 923 924#generate list of getaddrinfo errors 925cp /dev/null $ERRVALFILE 926unset GAIERRVALS 927L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_ADDRFAMILY) 928L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_AGAIN) 929L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_BADFLAGS) 930L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_BADHINTS) 931L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_FAIL) 932L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_FAMILY) 933L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_MEMORY) 934L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_NODATA) 935L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_NONAME) 936L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_OVERFLOW) 937L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_PROTOCOL) 938L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_SERVICE) 939L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_SOCKTYPE) 940L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_SYSTEM) 941 942L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_ALLDONE) 943L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_CANCELED) 944L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_IDN_ENCODE) 945L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_INPROGRESS) 946L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_INTR) 947L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_NOTCANCELED) 948L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_BADEXTFLAGS) 949 950if test x"$GAIERRVALS" = x; then 951 AC_MSG_FAILURE([error: no getaddrinfo() error symbols found]) 952fi 953ERRNOCNT=`echo $GAIERRVALS | wc -w | awk '{ print $1 }'` 954 955AC_MSG_CHECKING([getaddrinfo() error symbols]) 956unset UNIQUEVALS UNIQUESYMBOLS 957if test -s $ERRVALFILE; then 958 UNIQUEVALS=`sort $ERRVALFILE | uniq | wc -l | awk '{ print $1 }'` 959 if test $UNIQUEVALS -le 1; then 960 AC_MSG_FAILURE([error: getaddrinfo() error value count too low]) 961 fi 962 UNIQUESYMBOLS=`cat $ERRVALFILE | wc -l | awk '{ print $1 }'` 963 if test $UNIQUESYMBOLS -le 1; then 964 AC_MSG_FAILURE([error: getaddrinfo() error symbol count too low]) 965 fi 966 967 if test $ERRNOCNT -ne $UNIQUESYMBOLS; then 968 AC_MSG_FAILURE([internal error: errno symbol count mismatch]) 969 fi 970 AC_DEFINE_UNQUOTED(UNIQUE_GAIERR_VALUES, $UNIQUEVALS, 971 [Number of unique getaddrinfo() error numbers]) 972 AC_MSG_RESULT([unique symbols: $UNIQUESYMBOLS, unique values: $UNIQUEVALS]) 973else 974 AC_MSG_FAILURE([error: unable to determine getaddrinfo() error symbol values]) 975fi 976 977changequote(<<, >>)dnl 978echo "" >>$ERRNOSRC 979echo "static const errorsymboltable_t gaierrsymbolv[] = {" >>$ERRNOSRC 980changequote([, ])dnl 981 982#generic list 983for errno in $GAIERRVALS; do 984 echo " { \"$errno\", $errno }," >>$ERRNOSRC 985done 986 987#keyword alias list 988maxaliaslen=0 #highest number of values for an alias 989 990#error values that can match 'foo' keyword (if found on platform) 991ERRNO_foo="..." 992keyword="foo" 993keycnt=0 994for keyval in ${ERRNO_foo}; do 995 for errno in $GAIERRVALS; do 996 if test x"$keyval" = x"$errno"; then 997 echo " { \"$keyword\", $errno }," >>$ERRNOSRC 998 keycnt=`expr $keycnt + 1` 999 fi 1000 done 1001done 1002 1003#any-error; alias for all values 1004keyword="dns-any" 1005keycnt=0 1006for errno in $GAIERRVALS; do 1007 echo " { \"$keyword\", $errno }," >>$ERRNOSRC 1008 keycnt=`expr $keycnt + 1` 1009done 1010 1011if test $keycnt -gt $maxaliaslen; then 1012 maxaliaslen=$keycnt 1013fi 1014 1015echo "};" >>$ERRNOSRC 1016 1017AC_DEFINE_UNQUOTED(MAX_GAIERR_VALUES_FOR_SYMBOL, $maxaliaslen, 1018 [Max number of gataddrinfo() error values matching any alias keyword]) 1019rm -f $ERRVALFILE 1020