Annotation of embedaddon/nginx/auto/unix, revision 1.1.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>