Annotation of embedaddon/nginx/auto/unix, revision 1.1
1.1 ! misho 1:
! 2: # Copyright (C) Igor Sysoev
! 3: # Copyright (C) Nginx, Inc.
! 4:
! 5:
! 6: NGX_USER=${NGX_USER:-nobody}
! 7:
! 8: if [ -z "$NGX_GROUP" ]; then
! 9: if [ $NGX_USER = nobody ]; then
! 10: if grep nobody /etc/group 2>&1 >/dev/null; then
! 11: echo "checking for nobody group ... found"
! 12: NGX_GROUP=nobody
! 13: else
! 14: echo "checking for nobody group ... not found"
! 15:
! 16: if grep nogroup /etc/group 2>&1 >/dev/null; then
! 17: echo "checking for nogroup group ... found"
! 18: NGX_GROUP=nogroup
! 19: else
! 20: echo "checking for nogroup group ... not found"
! 21: NGX_GROUP=nobody
! 22: fi
! 23: fi
! 24: else
! 25: NGX_GROUP=$NGX_USER
! 26: fi
! 27: fi
! 28:
! 29:
! 30: ngx_feature="poll()"
! 31: ngx_feature_name=
! 32: ngx_feature_run=no
! 33: ngx_feature_incs="#include <poll.h>"
! 34: ngx_feature_path=
! 35: ngx_feature_libs=
! 36: ngx_feature_test="int n; struct pollfd pl;
! 37: pl.fd = 0;
! 38: pl.events = 0;
! 39: pl.revents = 0;
! 40: n = poll(&pl, 1, 0);
! 41: if (n == -1) return 1"
! 42: . auto/feature
! 43:
! 44: if [ $ngx_found = no ]; then
! 45: EVENT_POLL=NONE
! 46: fi
! 47:
! 48:
! 49: ngx_feature="/dev/poll"
! 50: ngx_feature_name="NGX_HAVE_DEVPOLL"
! 51: ngx_feature_run=no
! 52: ngx_feature_incs="#include <sys/devpoll.h>"
! 53: ngx_feature_path=
! 54: ngx_feature_libs=
! 55: ngx_feature_test="int n, dp; struct dvpoll dvp;
! 56: dp = 0;
! 57: dvp.dp_fds = NULL;
! 58: dvp.dp_nfds = 0;
! 59: dvp.dp_timeout = 0;
! 60: n = ioctl(dp, DP_POLL, &dvp);
! 61: if (n == -1) return 1"
! 62: . auto/feature
! 63:
! 64: if [ $ngx_found = yes ]; then
! 65: CORE_SRCS="$CORE_SRCS $DEVPOLL_SRCS"
! 66: EVENT_MODULES="$EVENT_MODULES $DEVPOLL_MODULE"
! 67: EVENT_FOUND=YES
! 68: fi
! 69:
! 70:
! 71: if test -z "$NGX_KQUEUE_CHECKED"; then
! 72: ngx_feature="kqueue"
! 73: ngx_feature_name="NGX_HAVE_KQUEUE"
! 74: ngx_feature_run=no
! 75: ngx_feature_incs="#include <sys/event.h>"
! 76: ngx_feature_path=
! 77: ngx_feature_libs=
! 78: ngx_feature_test="int kq; kq = kqueue()"
! 79: . auto/feature
! 80:
! 81: if [ $ngx_found = yes ]; then
! 82:
! 83: have=NGX_HAVE_CLEAR_EVENT . auto/have
! 84: EVENT_MODULES="$EVENT_MODULES $KQUEUE_MODULE"
! 85: CORE_SRCS="$CORE_SRCS $KQUEUE_SRCS"
! 86: EVENT_FOUND=YES
! 87:
! 88: ngx_feature="kqueue's NOTE_LOWAT"
! 89: ngx_feature_name="NGX_HAVE_LOWAT_EVENT"
! 90: ngx_feature_run=no
! 91: ngx_feature_incs="#include <sys/event.h>"
! 92: ngx_feature_path=
! 93: ngx_feature_libs=
! 94: ngx_feature_test="struct kevent kev;
! 95: kev.fflags = NOTE_LOWAT;"
! 96: . auto/feature
! 97:
! 98:
! 99: ngx_feature="kqueue's EVFILT_TIMER"
! 100: ngx_feature_name="NGX_HAVE_TIMER_EVENT"
! 101: ngx_feature_run=yes
! 102: ngx_feature_incs="#include <sys/event.h>
! 103: #include <sys/time.h>"
! 104: ngx_feature_path=
! 105: ngx_feature_libs=
! 106: ngx_feature_test="int kq;
! 107: struct kevent kev;
! 108: struct timespec ts;
! 109:
! 110: if ((kq = kqueue()) == -1) return 1;
! 111:
! 112: kev.ident = 0;
! 113: kev.filter = EVFILT_TIMER;
! 114: kev.flags = EV_ADD|EV_ENABLE;
! 115: kev.fflags = 0;
! 116: kev.data = 1000;
! 117: kev.udata = 0;
! 118:
! 119: ts.tv_sec = 0;
! 120: ts.tv_nsec = 0;
! 121:
! 122: if (kevent(kq, &kev, 1, &kev, 1, &ts) == -1) return 1;
! 123:
! 124: if (kev.flags & EV_ERROR) return 1;"
! 125:
! 126: . auto/feature
! 127: fi
! 128: fi
! 129:
! 130:
! 131: if [ "$NGX_SYSTEM" = "NetBSD" ]; then
! 132:
! 133: # NetBSD 2.0 incompatibly defines kevent.udata as "intptr_t"
! 134:
! 135: cat << END >> $NGX_AUTO_CONFIG_H
! 136:
! 137: #define NGX_KQUEUE_UDATA_T
! 138:
! 139: END
! 140:
! 141: else
! 142: cat << END >> $NGX_AUTO_CONFIG_H
! 143:
! 144: #define NGX_KQUEUE_UDATA_T (void *)
! 145:
! 146: END
! 147:
! 148: fi
! 149:
! 150:
! 151: ngx_feature="crypt()"
! 152: ngx_feature_name=
! 153: ngx_feature_run=no
! 154: ngx_feature_incs=
! 155: ngx_feature_path=
! 156: ngx_feature_libs=
! 157: ngx_feature_test="crypt(\"test\", \"salt\");"
! 158: . auto/feature
! 159:
! 160:
! 161: if [ $ngx_found = no ]; then
! 162:
! 163: ngx_feature="crypt() in libcrypt"
! 164: ngx_feature_name=
! 165: ngx_feature_run=no
! 166: ngx_feature_incs=
! 167: ngx_feature_path=
! 168: ngx_feature_libs=-lcrypt
! 169: . auto/feature
! 170:
! 171: if [ $ngx_found = yes ]; then
! 172: CRYPT_LIB="-lcrypt"
! 173: fi
! 174: fi
! 175:
! 176:
! 177: ngx_feature="F_READAHEAD"
! 178: ngx_feature_name="NGX_HAVE_F_READAHEAD"
! 179: ngx_feature_run=no
! 180: ngx_feature_incs="#include <fcntl.h>"
! 181: ngx_feature_path=
! 182: ngx_feature_libs=
! 183: ngx_feature_test="fcntl(0, F_READAHEAD, 1);"
! 184: . auto/feature
! 185:
! 186:
! 187: ngx_feature="posix_fadvise()"
! 188: ngx_feature_name="NGX_HAVE_POSIX_FADVISE"
! 189: ngx_feature_run=no
! 190: ngx_feature_incs="#include <fcntl.h>"
! 191: ngx_feature_path=
! 192: ngx_feature_libs=
! 193: ngx_feature_test="posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL);"
! 194: . auto/feature
! 195:
! 196:
! 197: ngx_feature="O_DIRECT"
! 198: ngx_feature_name="NGX_HAVE_O_DIRECT"
! 199: ngx_feature_run=no
! 200: ngx_feature_incs="#include <fcntl.h>"
! 201: ngx_feature_path=
! 202: ngx_feature_libs=
! 203: ngx_feature_test="fcntl(0, F_SETFL, O_DIRECT);"
! 204: . auto/feature
! 205:
! 206:
! 207: if [ $ngx_found = yes -a "$NGX_SYSTEM" = "Linux" ]; then
! 208: have=NGX_HAVE_ALIGNED_DIRECTIO . auto/have
! 209: fi
! 210:
! 211: ngx_feature="F_NOCACHE"
! 212: ngx_feature_name="NGX_HAVE_F_NOCACHE"
! 213: ngx_feature_run=no
! 214: ngx_feature_incs="#include <fcntl.h>"
! 215: ngx_feature_path=
! 216: ngx_feature_libs=
! 217: ngx_feature_test="fcntl(0, F_NOCACHE, 1);"
! 218: . auto/feature
! 219:
! 220:
! 221: ngx_feature="directio()"
! 222: ngx_feature_name="NGX_HAVE_DIRECTIO"
! 223: ngx_feature_run=no
! 224: ngx_feature_incs="#include <sys/types.h>
! 225: #include <sys/fcntl.h>"
! 226: ngx_feature_path=
! 227: ngx_feature_libs=
! 228: ngx_feature_test="directio(0, DIRECTIO_ON);"
! 229: . auto/feature
! 230:
! 231:
! 232: ngx_feature="statfs()"
! 233: ngx_feature_name="NGX_HAVE_STATFS"
! 234: ngx_feature_run=no
! 235: ngx_feature_incs="$NGX_INCLUDE_SYS_PARAM_H
! 236: $NGX_INCLUDE_SYS_MOUNT_H
! 237: $NGX_INCLUDE_SYS_VFS_H"
! 238: ngx_feature_path=
! 239: ngx_feature_libs=
! 240: ngx_feature_test="struct statfs fs;
! 241: statfs(\".\", &fs);"
! 242: . auto/feature
! 243:
! 244:
! 245: ngx_feature="statvfs()"
! 246: ngx_feature_name="NGX_HAVE_STATVFS"
! 247: ngx_feature_run=no
! 248: ngx_feature_incs="#include <sys/types.h>
! 249: #include <sys/statvfs.h>"
! 250: ngx_feature_path=
! 251: ngx_feature_libs=
! 252: ngx_feature_test="struct statvfs fs;
! 253: statvfs(\".\", &fs);"
! 254: . auto/feature
! 255:
! 256:
! 257: ngx_feature="dlopen()"
! 258: ngx_feature_name=
! 259: ngx_feature_run=no
! 260: ngx_feature_incs="#include <dlfcn.h>"
! 261: ngx_feature_path=
! 262: ngx_feature_libs=
! 263: ngx_feature_test="dlopen(NULL, 0)"
! 264: . auto/feature
! 265:
! 266:
! 267: if [ $ngx_found != yes ]; then
! 268:
! 269: ngx_feature="dlopen() in libdl"
! 270: ngx_feature_libs="-ldl"
! 271: . auto/feature
! 272:
! 273: if [ $ngx_found = yes ]; then
! 274: NGX_LIBDL="-ldl"
! 275: fi
! 276: fi
! 277:
! 278:
! 279: ngx_feature="sched_yield()"
! 280: ngx_feature_name="NGX_HAVE_SCHED_YIELD"
! 281: ngx_feature_run=no
! 282: ngx_feature_incs="#include <sched.h>"
! 283: ngx_feature_path=
! 284: ngx_feature_libs=
! 285: ngx_feature_test="sched_yield()"
! 286: . auto/feature
! 287:
! 288:
! 289: if [ $ngx_found != yes ]; then
! 290:
! 291: ngx_feature="sched_yield() in librt"
! 292: ngx_feature_libs="-lrt"
! 293: . auto/feature
! 294:
! 295: if [ $ngx_found = yes ]; then
! 296: CORE_LIBS="$CORE_LIBS -lrt"
! 297: fi
! 298: fi
! 299:
! 300:
! 301: ngx_feature="SO_SETFIB"
! 302: ngx_feature_name="NGX_HAVE_SETFIB"
! 303: ngx_feature_run=no
! 304: ngx_feature_incs="#include <sys/socket.h>"
! 305: ngx_feature_path=
! 306: ngx_feature_libs=
! 307: ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_SETFIB, NULL, 4)"
! 308: . auto/feature
! 309:
! 310:
! 311: ngx_feature="SO_ACCEPTFILTER"
! 312: ngx_feature_name="NGX_HAVE_DEFERRED_ACCEPT"
! 313: ngx_feature_run=no
! 314: ngx_feature_incs="#include <sys/socket.h>"
! 315: ngx_feature_path=
! 316: ngx_feature_libs=
! 317: ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_ACCEPTFILTER, NULL, 0)"
! 318: . auto/feature
! 319:
! 320:
! 321: ngx_feature="TCP_DEFER_ACCEPT"
! 322: ngx_feature_name="NGX_HAVE_DEFERRED_ACCEPT"
! 323: ngx_feature_run=no
! 324: ngx_feature_incs="#include <sys/socket.h>
! 325: #include <netinet/in.h>
! 326: #include <netinet/tcp.h>"
! 327: ngx_feature_path=
! 328: ngx_feature_libs=
! 329: ngx_feature_test="setsockopt(0, IPPROTO_TCP, TCP_DEFER_ACCEPT, NULL, 0)"
! 330: . auto/feature
! 331:
! 332:
! 333: ngx_feature="TCP_KEEPIDLE, TCP_KEEPINTVL, TCP_KEEPCNT"
! 334: ngx_feature_name="NGX_HAVE_KEEPALIVE_TUNABLE"
! 335: ngx_feature_run=no
! 336: ngx_feature_incs="#include <sys/socket.h>
! 337: #include <netinet/in.h>
! 338: #include <netinet/tcp.h>"
! 339: ngx_feature_path=
! 340: ngx_feature_libs=
! 341: ngx_feature_test="setsockopt(0, IPPROTO_TCP, TCP_KEEPIDLE, NULL, 0);
! 342: setsockopt(0, IPPROTO_TCP, TCP_KEEPINTVL, NULL, 0);
! 343: setsockopt(0, IPPROTO_TCP, TCP_KEEPCNT, NULL, 0)"
! 344: . auto/feature
! 345:
! 346:
! 347: ngx_feature="TCP_INFO"
! 348: ngx_feature_name="NGX_HAVE_TCP_INFO"
! 349: ngx_feature_run=no
! 350: ngx_feature_incs="#include <sys/socket.h>
! 351: #include <netinet/in.h>
! 352: #include <netinet/tcp.h>"
! 353: ngx_feature_path=
! 354: ngx_feature_libs=
! 355: ngx_feature_test="socklen_t optlen = sizeof(struct tcp_info);
! 356: struct tcp_info ti;
! 357: ti.tcpi_rtt = 0;
! 358: ti.tcpi_rttvar = 0;
! 359: ti.tcpi_snd_cwnd = 0;
! 360: ti.tcpi_rcv_space = 0;
! 361: getsockopt(0, IPPROTO_TCP, TCP_INFO, &ti, &optlen)"
! 362: . auto/feature
! 363:
! 364:
! 365: ngx_feature="accept4()"
! 366: ngx_feature_name="NGX_HAVE_ACCEPT4"
! 367: ngx_feature_run=no
! 368: ngx_feature_incs="#include <sys/socket.h>"
! 369: ngx_feature_path=
! 370: ngx_feature_libs=
! 371: ngx_feature_test="accept4(0, NULL, NULL, SOCK_NONBLOCK)"
! 372: . auto/feature
! 373:
! 374: if [ $NGX_FILE_AIO = YES ]; then
! 375:
! 376: ngx_feature="kqueue AIO support"
! 377: ngx_feature_name="NGX_HAVE_FILE_AIO"
! 378: ngx_feature_run=no
! 379: ngx_feature_incs="#include <aio.h>"
! 380: ngx_feature_path=
! 381: ngx_feature_libs=
! 382: ngx_feature_test="int n; struct aiocb iocb;
! 383: iocb.aio_sigevent.sigev_notify = SIGEV_KEVENT;
! 384: n = aio_read(&iocb)"
! 385: . auto/feature
! 386:
! 387: if [ $ngx_found = yes ]; then
! 388: CORE_SRCS="$CORE_SRCS $FILE_AIO_SRCS"
! 389:
! 390: elif [ $ngx_found = no ]; then
! 391:
! 392: ngx_feature="Linux AIO support"
! 393: ngx_feature_name="NGX_HAVE_FILE_AIO"
! 394: ngx_feature_run=no
! 395: ngx_feature_incs="#include <linux/aio_abi.h>
! 396: #include <sys/syscall.h>"
! 397: ngx_feature_path=
! 398: ngx_feature_libs=
! 399: ngx_feature_test="int n = SYS_eventfd;
! 400: struct iocb iocb;
! 401: iocb.aio_lio_opcode = IOCB_CMD_PREAD;
! 402: iocb.aio_flags = IOCB_FLAG_RESFD;
! 403: iocb.aio_resfd = -1;"
! 404: . auto/feature
! 405:
! 406: if [ $ngx_found = yes ]; then
! 407: have=NGX_HAVE_EVENTFD . auto/have
! 408: CORE_SRCS="$CORE_SRCS $LINUX_AIO_SRCS"
! 409:
! 410: else
! 411: cat << END
! 412:
! 413: $0: no supported file AIO was found
! 414: Currently file AIO is supported on FreeBSD 4.3+ and Linux 2.6.22+ only
! 415:
! 416: END
! 417: exit 1
! 418: fi
! 419: fi
! 420: fi
! 421:
! 422:
! 423: have=NGX_HAVE_UNIX_DOMAIN . auto/have
! 424:
! 425: ngx_feature_libs=
! 426:
! 427:
! 428: # C types
! 429:
! 430: ngx_type="int"; . auto/types/sizeof
! 431:
! 432: ngx_type="long"; . auto/types/sizeof
! 433:
! 434: ngx_type="long long"; . auto/types/sizeof
! 435:
! 436: ngx_type="void *"; . auto/types/sizeof; ngx_ptr_size=$ngx_size
! 437: ngx_param=NGX_PTR_SIZE; ngx_value=$ngx_size; . auto/types/value
! 438:
! 439:
! 440: # POSIX types
! 441:
! 442: case "$NGX_AUTO_CONFIG_H" in
! 443: /*)
! 444: NGX_INCLUDE_AUTO_CONFIG_H="#include \"$NGX_AUTO_CONFIG_H\""
! 445: ;;
! 446: *)
! 447: NGX_INCLUDE_AUTO_CONFIG_H="#include \"../$NGX_AUTO_CONFIG_H\""
! 448: ;;
! 449: esac
! 450:
! 451: ngx_type="uint64_t"; ngx_types="u_int64_t"; . auto/types/typedef
! 452:
! 453: ngx_type="sig_atomic_t"; ngx_types="int"; . auto/types/typedef
! 454: . auto/types/sizeof
! 455: ngx_param=NGX_SIG_ATOMIC_T_SIZE; ngx_value=$ngx_size; . auto/types/value
! 456:
! 457: ngx_type="socklen_t"; ngx_types="int"; . auto/types/typedef
! 458:
! 459: ngx_type="in_addr_t"; ngx_types="uint32_t"; . auto/types/typedef
! 460:
! 461: ngx_type="in_port_t"; ngx_types="u_short"; . auto/types/typedef
! 462:
! 463: ngx_type="rlim_t"; ngx_types="int"; . auto/types/typedef
! 464:
! 465: . auto/types/uintptr_t
! 466:
! 467: . auto/endianness
! 468:
! 469: ngx_type="size_t"; . auto/types/sizeof
! 470: ngx_param=NGX_MAX_SIZE_T_VALUE; ngx_value=$ngx_max_value; . auto/types/value
! 471: ngx_param=NGX_SIZE_T_LEN; ngx_value=$ngx_max_len; . auto/types/value
! 472:
! 473: ngx_type="off_t"; . auto/types/sizeof
! 474: ngx_param=NGX_MAX_OFF_T_VALUE; ngx_value=$ngx_max_value; . auto/types/value
! 475: ngx_param=NGX_OFF_T_LEN; ngx_value=$ngx_max_len; . auto/types/value
! 476:
! 477: ngx_type="time_t"; . auto/types/sizeof
! 478: ngx_param=NGX_TIME_T_SIZE; ngx_value=$ngx_size; . auto/types/value
! 479: ngx_param=NGX_TIME_T_LEN; ngx_value=$ngx_max_len; . auto/types/value
! 480:
! 481:
! 482: # syscalls, libc calls and some features
! 483:
! 484:
! 485: if [ $NGX_IPV6 = YES ]; then
! 486: ngx_feature="AF_INET6"
! 487: ngx_feature_name="NGX_HAVE_INET6"
! 488: ngx_feature_run=no
! 489: ngx_feature_incs="#include <sys/socket.h>
! 490: #include <netinet/in.h>
! 491: #include <arpa/inet.h>"
! 492: ngx_feature_path=
! 493: ngx_feature_libs=
! 494: ngx_feature_test="struct sockaddr_in6 sin6;
! 495: sin6.sin6_family = AF_INET6;"
! 496: . auto/feature
! 497: fi
! 498:
! 499:
! 500: ngx_feature="setproctitle()"
! 501: ngx_feature_name="NGX_HAVE_SETPROCTITLE"
! 502: ngx_feature_run=no
! 503: ngx_feature_incs="#include <stdlib.h>"
! 504: ngx_feature_path=
! 505: ngx_feature_libs=$NGX_SETPROCTITLE_LIB
! 506: ngx_feature_test="setproctitle(\"test\");"
! 507: . auto/feature
! 508:
! 509:
! 510: ngx_feature="pread()"
! 511: ngx_feature_name="NGX_HAVE_PREAD"
! 512: ngx_feature_run=no
! 513: ngx_feature_incs=
! 514: ngx_feature_path=
! 515: ngx_feature_libs=
! 516: ngx_feature_test="char buf[1]; ssize_t n; n = pread(0, buf, 1, 0);
! 517: if (n == -1) return 1"
! 518: . auto/feature
! 519:
! 520:
! 521: ngx_feature="pwrite()"
! 522: ngx_feature_name="NGX_HAVE_PWRITE"
! 523: ngx_feature_run=no
! 524: ngx_feature_incs=
! 525: ngx_feature_path=
! 526: ngx_feature_libs=
! 527: ngx_feature_test="char buf[1]; ssize_t n; n = pwrite(1, buf, 1, 0);
! 528: if (n == -1) return 1"
! 529: . auto/feature
! 530:
! 531:
! 532: ngx_feature="sys_nerr"
! 533: ngx_feature_name="NGX_SYS_NERR"
! 534: ngx_feature_run=value
! 535: ngx_feature_incs='#include <errno.h>
! 536: #include <stdio.h>'
! 537: ngx_feature_path=
! 538: ngx_feature_libs=
! 539: ngx_feature_test='printf("%d", sys_nerr);'
! 540: . auto/feature
! 541:
! 542:
! 543: if [ $ngx_found = no ]; then
! 544:
! 545: # Cygiwn defines _sys_nerr
! 546: ngx_feature="_sys_nerr"
! 547: ngx_feature_name="NGX_SYS_NERR"
! 548: ngx_feature_run=value
! 549: ngx_feature_incs='#include <errno.h>
! 550: #include <stdio.h>'
! 551: ngx_feature_path=
! 552: ngx_feature_libs=
! 553: ngx_feature_test='printf("%d", _sys_nerr);'
! 554: . auto/feature
! 555: fi
! 556:
! 557:
! 558: if [ $ngx_found = no ]; then
! 559:
! 560: # Solaris has no sys_nerr
! 561: ngx_feature='maximum errno'
! 562: ngx_feature_name=NGX_SYS_NERR
! 563: ngx_feature_run=value
! 564: ngx_feature_incs='#include <errno.h>
! 565: #include <string.h>
! 566: #include <stdio.h>'
! 567: ngx_feature_path=
! 568: ngx_feature_libs=
! 569: ngx_feature_test='int n;
! 570: char *p;
! 571: for (n = 1; n < 1000; n++) {
! 572: errno = 0;
! 573: p = strerror(n);
! 574: if (errno == EINVAL
! 575: || p == NULL
! 576: || strncmp(p, "Unknown error", 13) == 0)
! 577: {
! 578: break;
! 579: }
! 580: }
! 581: printf("%d", n);'
! 582: . auto/feature
! 583: fi
! 584:
! 585:
! 586: ngx_feature="localtime_r()"
! 587: ngx_feature_name="NGX_HAVE_LOCALTIME_R"
! 588: ngx_feature_run=no
! 589: ngx_feature_incs="#include <time.h>"
! 590: ngx_feature_path=
! 591: ngx_feature_libs=
! 592: ngx_feature_test="struct tm t; time_t c=0; localtime_r(&c, &t)"
! 593: . auto/feature
! 594:
! 595:
! 596: ngx_feature="posix_memalign()"
! 597: ngx_feature_name="NGX_HAVE_POSIX_MEMALIGN"
! 598: ngx_feature_run=no
! 599: ngx_feature_incs="#include <stdlib.h>"
! 600: ngx_feature_path=
! 601: ngx_feature_libs=
! 602: ngx_feature_test="void *p; int n; n = posix_memalign(&p, 4096, 4096);
! 603: if (n != 0) return 1"
! 604: . auto/feature
! 605:
! 606:
! 607: ngx_feature="memalign()"
! 608: ngx_feature_name="NGX_HAVE_MEMALIGN"
! 609: ngx_feature_run=no
! 610: ngx_feature_incs="#include <stdlib.h>
! 611: #include <malloc.h>"
! 612: ngx_feature_path=
! 613: ngx_feature_libs=
! 614: ngx_feature_test="void *p; p = memalign(4096, 4096);
! 615: if (p == NULL) return 1"
! 616: . auto/feature
! 617:
! 618:
! 619: ngx_feature="mmap(MAP_ANON|MAP_SHARED)"
! 620: ngx_feature_name="NGX_HAVE_MAP_ANON"
! 621: ngx_feature_run=yes
! 622: ngx_feature_incs="#include <sys/mman.h>"
! 623: ngx_feature_path=
! 624: ngx_feature_libs=
! 625: ngx_feature_test="void *p;
! 626: p = mmap(NULL, 4096, PROT_READ|PROT_WRITE,
! 627: MAP_ANON|MAP_SHARED, -1, 0);
! 628: if (p == MAP_FAILED) return 1;"
! 629: . auto/feature
! 630:
! 631:
! 632: ngx_feature='mmap("/dev/zero", MAP_SHARED)'
! 633: ngx_feature_name="NGX_HAVE_MAP_DEVZERO"
! 634: ngx_feature_run=yes
! 635: ngx_feature_incs="#include <sys/mman.h>
! 636: #include <sys/stat.h>
! 637: #include <fcntl.h>"
! 638: ngx_feature_path=
! 639: ngx_feature_libs=
! 640: ngx_feature_test='void *p; int fd;
! 641: fd = open("/dev/zero", O_RDWR);
! 642: p = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
! 643: if (p == MAP_FAILED) return 1;'
! 644: . auto/feature
! 645:
! 646:
! 647: ngx_feature="System V shared memory"
! 648: ngx_feature_name="NGX_HAVE_SYSVSHM"
! 649: ngx_feature_run=yes
! 650: ngx_feature_incs="#include <sys/ipc.h>
! 651: #include <sys/shm.h>"
! 652: ngx_feature_path=
! 653: ngx_feature_libs=
! 654: ngx_feature_test="int id;
! 655: id = shmget(IPC_PRIVATE, 4096, (SHM_R|SHM_W|IPC_CREAT));
! 656: if (id == -1) return 1;
! 657: shmctl(id, IPC_RMID, NULL);"
! 658: . auto/feature
! 659:
! 660:
! 661: ngx_feature="POSIX semaphores"
! 662: ngx_feature_name="NGX_HAVE_POSIX_SEM"
! 663: ngx_feature_run=yes
! 664: ngx_feature_incs="#include <semaphore.h>"
! 665: ngx_feature_path=
! 666: ngx_feature_libs=
! 667: ngx_feature_test="sem_t sem;
! 668: if (sem_init(&sem, 1, 0) == -1) return 1;
! 669: sem_destroy(&sem);"
! 670: . auto/feature
! 671:
! 672:
! 673: if [ $ngx_found = no ]; then
! 674:
! 675: # Linux has POSIX semaphores in libpthread
! 676: ngx_feature="POSIX semaphores in libpthread"
! 677: ngx_feature_libs=-lpthread
! 678: . auto/feature
! 679:
! 680: if [ $ngx_found = yes ]; then
! 681: CORE_LIBS="$CORE_LIBS -lpthread"
! 682: fi
! 683: fi
! 684:
! 685:
! 686: if [ $ngx_found = no ]; then
! 687:
! 688: # Solaris has POSIX semaphores in librt
! 689: ngx_feature="POSIX semaphores in librt"
! 690: ngx_feature_libs=-lrt
! 691: . auto/feature
! 692:
! 693: if [ $ngx_found = yes ]; then
! 694: CORE_LIBS="$CORE_LIBS -lrt"
! 695: fi
! 696: fi
! 697:
! 698:
! 699: ngx_feature="struct msghdr.msg_control"
! 700: ngx_feature_name="NGX_HAVE_MSGHDR_MSG_CONTROL"
! 701: ngx_feature_run=no
! 702: ngx_feature_incs="#include <sys/socket.h>
! 703: #include <stdio.h>"
! 704: ngx_feature_path=
! 705: ngx_feature_libs=
! 706: ngx_feature_test="struct msghdr msg;
! 707: printf(\"%d\", (int) sizeof(msg.msg_control))"
! 708: . auto/feature
! 709:
! 710:
! 711: ngx_feature="ioctl(FIONBIO)"
! 712: ngx_feature_name="NGX_HAVE_FIONBIO"
! 713: ngx_feature_run=no
! 714: ngx_feature_incs="#include <sys/ioctl.h>
! 715: #include <stdio.h>
! 716: $NGX_INCLUDE_SYS_FILIO_H"
! 717: ngx_feature_path=
! 718: ngx_feature_libs=
! 719: ngx_feature_test="int i = FIONBIO; printf(\"%d\", i)"
! 720: . auto/feature
! 721:
! 722:
! 723: ngx_feature="struct tm.tm_gmtoff"
! 724: ngx_feature_name="NGX_HAVE_GMTOFF"
! 725: ngx_feature_run=no
! 726: ngx_feature_incs="#include <time.h>
! 727: #include <stdio.h>"
! 728: ngx_feature_path=
! 729: ngx_feature_libs=
! 730: ngx_feature_test="struct tm tm; tm.tm_gmtoff = 0;
! 731: printf(\"%d\", (int) tm.tm_gmtoff)"
! 732: . auto/feature
! 733:
! 734:
! 735: ngx_feature="struct dirent.d_namlen"
! 736: ngx_feature_name="NGX_HAVE_D_NAMLEN"
! 737: ngx_feature_run=no
! 738: ngx_feature_incs="#include <dirent.h>
! 739: #include <stdio.h>"
! 740: ngx_feature_path=
! 741: ngx_feature_libs=
! 742: ngx_feature_test="struct dirent dir; dir.d_namlen = 0;
! 743: printf(\"%d\", (int) dir.d_namlen)"
! 744: . auto/feature
! 745:
! 746:
! 747: ngx_feature="struct dirent.d_type"
! 748: ngx_feature_name="NGX_HAVE_D_TYPE"
! 749: ngx_feature_run=no
! 750: ngx_feature_incs="#include <dirent.h>
! 751: #include <stdio.h>"
! 752: ngx_feature_path=
! 753: ngx_feature_libs=
! 754: ngx_feature_test="struct dirent dir; dir.d_type = DT_REG;
! 755: printf(\"%d\", (int) dir.d_type)"
! 756: . auto/feature
! 757:
! 758:
! 759: ngx_feature="sysconf(_SC_NPROCESSORS_ONLN)"
! 760: ngx_feature_name="NGX_HAVE_SC_NPROCESSORS_ONLN"
! 761: ngx_feature_run=no
! 762: ngx_feature_incs=
! 763: ngx_feature_path=
! 764: ngx_feature_libs=
! 765: ngx_feature_test="sysconf(_SC_NPROCESSORS_ONLN)"
! 766: . auto/feature
! 767:
! 768:
! 769: ngx_feature="openat(), fstatat()"
! 770: ngx_feature_name="NGX_HAVE_OPENAT"
! 771: ngx_feature_run=no
! 772: ngx_feature_incs="#include <sys/types.h>
! 773: #include <sys/stat.h>
! 774: #include <fcntl.h>"
! 775: ngx_feature_path=
! 776: ngx_feature_libs=
! 777: ngx_feature_test="struct stat sb;
! 778: openat(AT_FDCWD, \".\", O_RDONLY|O_NOFOLLOW);
! 779: fstatat(AT_FDCWD, \".\", &sb, AT_SYMLINK_NOFOLLOW);"
! 780: . auto/feature
! 781:
! 782:
! 783: ngx_feature="getaddrinfo()"
! 784: ngx_feature_name="NGX_HAVE_GETADDRINFO"
! 785: ngx_feature_run=no
! 786: ngx_feature_incs="#include <sys/types.h>
! 787: #include <sys/socket.h>
! 788: #include <netdb.h>"
! 789: ngx_feature_path=
! 790: ngx_feature_libs=
! 791: ngx_feature_test='struct addrinfo *res;
! 792: if (getaddrinfo("localhost", NULL, NULL, &res) != 0) return 1;
! 793: freeaddrinfo(res)'
! 794: . auto/feature
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>