File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / nginx / auto / unix
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Oct 14 09:20:38 2013 UTC (10 years, 8 months ago) by misho
Branches: nginx, MAIN
CVS tags: v1_4_3p0, v1_4_3, HEAD
v 1.4.3

    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>