blob: ff9697a4eaa6203badb0ffb5464bdf4267d3ce3e [file] [log] [blame]
Igor Sysoeva8fa0a62003-11-25 20:44:56 +00001
Igor Sysoevff8da912004-09-29 16:00:49 +00002# Copyright (C) Igor Sysoev
Maxim Konovalovf8d59e32012-01-18 15:07:43 +00003# Copyright (C) Nginx, Inc.
Igor Sysoevff8da912004-09-29 16:00:49 +00004
5
Igor Sysoeve9041dd2011-05-31 08:25:10 +00006NGX_USER=${NGX_USER:-nobody}
7
8if [ -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
27fi
28
29
30ngx_feature="poll()"
31ngx_feature_name=
32ngx_feature_run=no
33ngx_feature_incs="#include <poll.h>"
34ngx_feature_path=
35ngx_feature_libs=
Maxim Dounina3bdd732012-03-27 16:44:52 +000036ngx_feature_test="int n; struct pollfd pl;
Igor Sysoeve9041dd2011-05-31 08:25:10 +000037 pl.fd = 0;
38 pl.events = 0;
39 pl.revents = 0;
Maxim Dounina3bdd732012-03-27 16:44:52 +000040 n = poll(&pl, 1, 0);
41 if (n == -1) return 1"
Igor Sysoeve9041dd2011-05-31 08:25:10 +000042. auto/feature
43
44if [ $ngx_found = no ]; then
45 EVENT_POLL=NONE
46fi
47
48
49ngx_feature="/dev/poll"
50ngx_feature_name="NGX_HAVE_DEVPOLL"
51ngx_feature_run=no
52ngx_feature_incs="#include <sys/devpoll.h>"
53ngx_feature_path=
54ngx_feature_libs=
55ngx_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;
Maxim Dounina3bdd732012-03-27 16:44:52 +000060 n = ioctl(dp, DP_POLL, &dvp);
61 if (n == -1) return 1"
Igor Sysoeve9041dd2011-05-31 08:25:10 +000062. auto/feature
63
64if [ $ngx_found = yes ]; then
65 CORE_SRCS="$CORE_SRCS $DEVPOLL_SRCS"
66 EVENT_MODULES="$EVENT_MODULES $DEVPOLL_MODULE"
67 EVENT_FOUND=YES
68fi
69
70
71if 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=
Piotr Sikoraa852d772016-06-27 15:00:03 -070078 ngx_feature_test="(void) kqueue()"
Igor Sysoeve9041dd2011-05-31 08:25:10 +000079 . 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;
Piotr Sikoraa852d772016-06-27 15:00:03 -070095 kev.fflags = NOTE_LOWAT;
96 (void) kev"
Igor Sysoeve9041dd2011-05-31 08:25:10 +000097 . auto/feature
98
99
100 ngx_feature="kqueue's EVFILT_TIMER"
101 ngx_feature_name="NGX_HAVE_TIMER_EVENT"
102 ngx_feature_run=yes
103 ngx_feature_incs="#include <sys/event.h>
104 #include <sys/time.h>"
105 ngx_feature_path=
106 ngx_feature_libs=
107 ngx_feature_test="int kq;
108 struct kevent kev;
109 struct timespec ts;
110
111 if ((kq = kqueue()) == -1) return 1;
112
113 kev.ident = 0;
114 kev.filter = EVFILT_TIMER;
115 kev.flags = EV_ADD|EV_ENABLE;
116 kev.fflags = 0;
117 kev.data = 1000;
118 kev.udata = 0;
119
120 ts.tv_sec = 0;
121 ts.tv_nsec = 0;
122
123 if (kevent(kq, &kev, 1, &kev, 1, &ts) == -1) return 1;
124
125 if (kev.flags & EV_ERROR) return 1;"
126
127 . auto/feature
128 fi
129fi
130
131
132if [ "$NGX_SYSTEM" = "NetBSD" ]; then
133
134 # NetBSD 2.0 incompatibly defines kevent.udata as "intptr_t"
135
136 cat << END >> $NGX_AUTO_CONFIG_H
137
138#define NGX_KQUEUE_UDATA_T
139
140END
141
142else
143 cat << END >> $NGX_AUTO_CONFIG_H
144
145#define NGX_KQUEUE_UDATA_T (void *)
146
147END
148
149fi
150
151
152ngx_feature="crypt()"
153ngx_feature_name=
154ngx_feature_run=no
155ngx_feature_incs=
156ngx_feature_path=
157ngx_feature_libs=
158ngx_feature_test="crypt(\"test\", \"salt\");"
159. auto/feature
160
161
162if [ $ngx_found = no ]; then
163
164 ngx_feature="crypt() in libcrypt"
165 ngx_feature_name=
166 ngx_feature_run=no
167 ngx_feature_incs=
168 ngx_feature_path=
169 ngx_feature_libs=-lcrypt
170 . auto/feature
171
172 if [ $ngx_found = yes ]; then
173 CRYPT_LIB="-lcrypt"
174 fi
175fi
176
177
178ngx_feature="F_READAHEAD"
179ngx_feature_name="NGX_HAVE_F_READAHEAD"
180ngx_feature_run=no
181ngx_feature_incs="#include <fcntl.h>"
182ngx_feature_path=
183ngx_feature_libs=
184ngx_feature_test="fcntl(0, F_READAHEAD, 1);"
185. auto/feature
186
187
188ngx_feature="posix_fadvise()"
189ngx_feature_name="NGX_HAVE_POSIX_FADVISE"
190ngx_feature_run=no
191ngx_feature_incs="#include <fcntl.h>"
192ngx_feature_path=
193ngx_feature_libs=
194ngx_feature_test="posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL);"
195. auto/feature
196
197
198ngx_feature="O_DIRECT"
199ngx_feature_name="NGX_HAVE_O_DIRECT"
200ngx_feature_run=no
201ngx_feature_incs="#include <fcntl.h>"
202ngx_feature_path=
203ngx_feature_libs=
204ngx_feature_test="fcntl(0, F_SETFL, O_DIRECT);"
205. auto/feature
206
207
208if [ $ngx_found = yes -a "$NGX_SYSTEM" = "Linux" ]; then
209 have=NGX_HAVE_ALIGNED_DIRECTIO . auto/have
210fi
211
212ngx_feature="F_NOCACHE"
213ngx_feature_name="NGX_HAVE_F_NOCACHE"
214ngx_feature_run=no
215ngx_feature_incs="#include <fcntl.h>"
216ngx_feature_path=
217ngx_feature_libs=
218ngx_feature_test="fcntl(0, F_NOCACHE, 1);"
219. auto/feature
220
221
222ngx_feature="directio()"
223ngx_feature_name="NGX_HAVE_DIRECTIO"
224ngx_feature_run=no
225ngx_feature_incs="#include <sys/types.h>
226 #include <sys/fcntl.h>"
227ngx_feature_path=
228ngx_feature_libs=
229ngx_feature_test="directio(0, DIRECTIO_ON);"
230. auto/feature
231
232
233ngx_feature="statfs()"
234ngx_feature_name="NGX_HAVE_STATFS"
235ngx_feature_run=no
236ngx_feature_incs="$NGX_INCLUDE_SYS_PARAM_H
237 $NGX_INCLUDE_SYS_MOUNT_H
238 $NGX_INCLUDE_SYS_VFS_H"
239ngx_feature_path=
240ngx_feature_libs=
241ngx_feature_test="struct statfs fs;
Ruslan Ermilov4489fa82012-03-15 20:39:38 +0000242 statfs(\".\", &fs);"
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000243. auto/feature
244
245
246ngx_feature="statvfs()"
247ngx_feature_name="NGX_HAVE_STATVFS"
248ngx_feature_run=no
249ngx_feature_incs="#include <sys/types.h>
250 #include <sys/statvfs.h>"
251ngx_feature_path=
252ngx_feature_libs=
253ngx_feature_test="struct statvfs fs;
Ruslan Ermilov4489fa82012-03-15 20:39:38 +0000254 statvfs(\".\", &fs);"
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000255. auto/feature
256
257
258ngx_feature="dlopen()"
Maxim Douninc52460c2016-02-04 18:30:21 +0300259ngx_feature_name="NGX_HAVE_DLOPEN"
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000260ngx_feature_run=no
261ngx_feature_incs="#include <dlfcn.h>"
262ngx_feature_path=
263ngx_feature_libs=
Piotr Sikora9004c482016-06-27 15:00:04 -0700264ngx_feature_test="dlopen(NULL, RTLD_NOW | RTLD_GLOBAL); dlsym(NULL, \"\")"
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000265. auto/feature
266
267
Piotr Sikora3db86562016-06-27 15:00:01 -0700268if [ $ngx_found = no ]; then
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000269
270 ngx_feature="dlopen() in libdl"
271 ngx_feature_libs="-ldl"
272 . auto/feature
273
274 if [ $ngx_found = yes ]; then
Maxim Douninc52460c2016-02-04 18:30:21 +0300275 CORE_LIBS="$CORE_LIBS -ldl"
Ruslan Ermilov9df3a0a2016-02-18 11:39:57 +0300276 NGX_LIBDL="-ldl"
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000277 fi
278fi
279
280
281ngx_feature="sched_yield()"
282ngx_feature_name="NGX_HAVE_SCHED_YIELD"
283ngx_feature_run=no
284ngx_feature_incs="#include <sched.h>"
285ngx_feature_path=
286ngx_feature_libs=
287ngx_feature_test="sched_yield()"
288. auto/feature
289
290
Piotr Sikora3db86562016-06-27 15:00:01 -0700291if [ $ngx_found = no ]; then
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000292
293 ngx_feature="sched_yield() in librt"
294 ngx_feature_libs="-lrt"
295 . auto/feature
296
297 if [ $ngx_found = yes ]; then
298 CORE_LIBS="$CORE_LIBS -lrt"
299 fi
300fi
301
Maxim Douninec8186c2011-08-21 11:37:37 +0000302
Maxim Dounin302d47a2017-05-29 16:48:30 +0300303ngx_feature="sched_setaffinity()"
304ngx_feature_name="NGX_HAVE_SCHED_SETAFFINITY"
305ngx_feature_run=no
306ngx_feature_incs="#include <sched.h>"
307ngx_feature_path=
308ngx_feature_libs=
309ngx_feature_test="cpu_set_t mask;
310 CPU_ZERO(&mask);
311 sched_setaffinity(0, sizeof(cpu_set_t), &mask)"
312. auto/feature
313
314
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000315ngx_feature="SO_SETFIB"
316ngx_feature_name="NGX_HAVE_SETFIB"
317ngx_feature_run=no
318ngx_feature_incs="#include <sys/socket.h>"
319ngx_feature_path=
320ngx_feature_libs=
Maxim Dounin328c7dd2015-05-20 15:51:13 +0300321ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_SETFIB, NULL, 0)"
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000322. auto/feature
323
324
Maxim Douninc86ce4b2015-05-20 15:51:56 +0300325ngx_feature="SO_REUSEPORT"
326ngx_feature_name="NGX_HAVE_REUSEPORT"
327ngx_feature_run=no
328ngx_feature_incs="#include <sys/socket.h>"
329ngx_feature_path=
330ngx_feature_libs=
331ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_REUSEPORT, NULL, 0)"
332. auto/feature
333
334
Maxim Douninec8186c2011-08-21 11:37:37 +0000335ngx_feature="SO_ACCEPTFILTER"
336ngx_feature_name="NGX_HAVE_DEFERRED_ACCEPT"
337ngx_feature_run=no
338ngx_feature_incs="#include <sys/socket.h>"
339ngx_feature_path=
340ngx_feature_libs=
341ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_ACCEPTFILTER, NULL, 0)"
342. auto/feature
343
344
Maxim Dounina521b002017-12-07 17:09:36 +0300345# OpenBSD bind to any address for transparent proxying
Roman Arutyunyan055c4602015-12-18 19:05:27 +0300346
347ngx_feature="SO_BINDANY"
348ngx_feature_name="NGX_HAVE_TRANSPARENT_PROXY"
349ngx_feature_run=no
350ngx_feature_incs="#include <sys/socket.h>"
351ngx_feature_path=
352ngx_feature_libs=
353ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_BINDANY, NULL, 0)"
354. auto/feature
355
356
357# Linux transparent proxying
358
359ngx_feature="IP_TRANSPARENT"
360ngx_feature_name="NGX_HAVE_TRANSPARENT_PROXY"
361ngx_feature_run=no
362ngx_feature_incs="#include <sys/socket.h>
363 #include <netinet/in.h>"
364ngx_feature_path=
365ngx_feature_libs=
366ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_TRANSPARENT, NULL, 0)"
367. auto/feature
368
369
370# FreeBSD bind to any address for transparent proxying
371
372ngx_feature="IP_BINDANY"
373ngx_feature_name="NGX_HAVE_TRANSPARENT_PROXY"
374ngx_feature_run=no
375ngx_feature_incs="#include <sys/socket.h>
376 #include <netinet/in.h>"
377ngx_feature_path=
378ngx_feature_libs=
379ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_BINDANY, NULL, 0)"
380. auto/feature
381
382
Maxim Dounin064a7152017-12-07 17:09:33 +0300383# Linux IP_BIND_ADDRESS_NO_PORT
384
385ngx_feature="IP_BIND_ADDRESS_NO_PORT"
386ngx_feature_name="NGX_HAVE_IP_BIND_ADDRESS_NO_PORT"
387ngx_feature_run=no
388ngx_feature_incs="#include <sys/socket.h>
389 #include <netinet/in.h>"
390ngx_feature_path=
391ngx_feature_libs=
392ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_BIND_ADDRESS_NO_PORT, NULL, 0)"
393. auto/feature
394
395
Roman Arutyunyan850dfaa2016-01-20 19:52:12 +0300396# BSD way to get IPv4 datagram destination address
397
398ngx_feature="IP_RECVDSTADDR"
399ngx_feature_name="NGX_HAVE_IP_RECVDSTADDR"
400ngx_feature_run=no
401ngx_feature_incs="#include <sys/socket.h>
402 #include <netinet/in.h>"
403ngx_feature_path=
404ngx_feature_libs=
405ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_RECVDSTADDR, NULL, 0)"
406. auto/feature
407
408
Roman Arutyunyan724d4712017-04-11 16:41:53 +0300409# BSD way to set IPv4 datagram source address
410
411ngx_feature="IP_SENDSRCADDR"
412ngx_feature_name="NGX_HAVE_IP_SENDSRCADDR"
413ngx_feature_run=no
414ngx_feature_incs="#include <sys/socket.h>
415 #include <netinet/in.h>"
416ngx_feature_path=
417ngx_feature_libs=
418ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_SENDSRCADDR, NULL, 0)"
419. auto/feature
420
421
Roman Arutyunyan850dfaa2016-01-20 19:52:12 +0300422# Linux way to get IPv4 datagram destination address
423
424ngx_feature="IP_PKTINFO"
425ngx_feature_name="NGX_HAVE_IP_PKTINFO"
426ngx_feature_run=no
427ngx_feature_incs="#include <sys/socket.h>
428 #include <netinet/in.h>"
429ngx_feature_path=
430ngx_feature_libs=
Roman Arutyunyan7b0bcd32017-06-01 15:44:23 +0300431ngx_feature_test="struct in_pktinfo pkt;
432 pkt.ipi_spec_dst.s_addr = INADDR_ANY;
433 (void) pkt;
434 setsockopt(0, IPPROTO_IP, IP_PKTINFO, NULL, 0)"
Roman Arutyunyan850dfaa2016-01-20 19:52:12 +0300435. auto/feature
436
437
438# RFC 3542 way to get IPv6 datagram destination address
439
440ngx_feature="IPV6_RECVPKTINFO"
441ngx_feature_name="NGX_HAVE_IPV6_RECVPKTINFO"
442ngx_feature_run=no
443ngx_feature_incs="#include <sys/socket.h>
444 #include <netinet/in.h>"
445ngx_feature_path=
446ngx_feature_libs=
447ngx_feature_test="setsockopt(0, IPPROTO_IPV6, IPV6_RECVPKTINFO, NULL, 0)"
448. auto/feature
449
450
Maxim Douninec8186c2011-08-21 11:37:37 +0000451ngx_feature="TCP_DEFER_ACCEPT"
452ngx_feature_name="NGX_HAVE_DEFERRED_ACCEPT"
453ngx_feature_run=no
454ngx_feature_incs="#include <sys/socket.h>
455 #include <netinet/in.h>
456 #include <netinet/tcp.h>"
457ngx_feature_path=
458ngx_feature_libs=
459ngx_feature_test="setsockopt(0, IPPROTO_TCP, TCP_DEFER_ACCEPT, NULL, 0)"
460. auto/feature
461
462
Maxim Dounin6e4030a2013-09-04 21:17:05 +0400463ngx_feature="TCP_KEEPIDLE"
Valentin Bartenev92edf472011-12-05 08:06:15 +0000464ngx_feature_name="NGX_HAVE_KEEPALIVE_TUNABLE"
465ngx_feature_run=no
466ngx_feature_incs="#include <sys/socket.h>
467 #include <netinet/in.h>
468 #include <netinet/tcp.h>"
469ngx_feature_path=
470ngx_feature_libs=
471ngx_feature_test="setsockopt(0, IPPROTO_TCP, TCP_KEEPIDLE, NULL, 0);
472 setsockopt(0, IPPROTO_TCP, TCP_KEEPINTVL, NULL, 0);
473 setsockopt(0, IPPROTO_TCP, TCP_KEEPCNT, NULL, 0)"
474. auto/feature
475
476
Mathew Rodley84f5c212013-12-03 22:07:03 +0400477ngx_feature="TCP_FASTOPEN"
478ngx_feature_name="NGX_HAVE_TCP_FASTOPEN"
479ngx_feature_run=no
480ngx_feature_incs="#include <sys/socket.h>
481 #include <netinet/in.h>
482 #include <netinet/tcp.h>"
483ngx_feature_path=
484ngx_feature_libs=
485ngx_feature_test="setsockopt(0, IPPROTO_TCP, TCP_FASTOPEN, NULL, 0)"
486. auto/feature
487
488
Ruslan Ermilov926ded62012-03-16 19:15:33 +0000489ngx_feature="TCP_INFO"
490ngx_feature_name="NGX_HAVE_TCP_INFO"
491ngx_feature_run=no
492ngx_feature_incs="#include <sys/socket.h>
493 #include <netinet/in.h>
494 #include <netinet/tcp.h>"
495ngx_feature_path=
496ngx_feature_libs=
497ngx_feature_test="socklen_t optlen = sizeof(struct tcp_info);
Ruslan Ermilovfd601af2012-03-21 15:35:05 +0000498 struct tcp_info ti;
499 ti.tcpi_rtt = 0;
500 ti.tcpi_rttvar = 0;
501 ti.tcpi_snd_cwnd = 0;
502 ti.tcpi_rcv_space = 0;
Maxim Dounina3bdd732012-03-27 16:44:52 +0000503 getsockopt(0, IPPROTO_TCP, TCP_INFO, &ti, &optlen)"
Ruslan Ermilov926ded62012-03-16 19:15:33 +0000504. auto/feature
505
506
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000507ngx_feature="accept4()"
508ngx_feature_name="NGX_HAVE_ACCEPT4"
509ngx_feature_run=no
510ngx_feature_incs="#include <sys/socket.h>"
511ngx_feature_path=
512ngx_feature_libs=
513ngx_feature_test="accept4(0, NULL, NULL, SOCK_NONBLOCK)"
514. auto/feature
515
516if [ $NGX_FILE_AIO = YES ]; then
517
518 ngx_feature="kqueue AIO support"
519 ngx_feature_name="NGX_HAVE_FILE_AIO"
520 ngx_feature_run=no
521 ngx_feature_incs="#include <aio.h>"
522 ngx_feature_path=
523 ngx_feature_libs=
Piotr Sikoraa852d772016-06-27 15:00:03 -0700524 ngx_feature_test="struct aiocb iocb;
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000525 iocb.aio_sigevent.sigev_notify = SIGEV_KEVENT;
Piotr Sikoraa852d772016-06-27 15:00:03 -0700526 (void) aio_read(&iocb)"
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000527 . auto/feature
528
529 if [ $ngx_found = yes ]; then
530 CORE_SRCS="$CORE_SRCS $FILE_AIO_SRCS"
Ruslan Ermilov5c170302014-05-23 16:37:05 +0400531 fi
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000532
Ruslan Ermilov5c170302014-05-23 16:37:05 +0400533 if [ $ngx_found = no ]; then
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000534
535 ngx_feature="Linux AIO support"
536 ngx_feature_name="NGX_HAVE_FILE_AIO"
537 ngx_feature_run=no
538 ngx_feature_incs="#include <linux/aio_abi.h>
Ruslan Ermilov5c170302014-05-23 16:37:05 +0400539 #include <sys/eventfd.h>"
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000540 ngx_feature_path=
541 ngx_feature_libs=
Ruslan Ermilov5c170302014-05-23 16:37:05 +0400542 ngx_feature_test="struct iocb iocb;
543 iocb.aio_lio_opcode = IOCB_CMD_PREAD;
544 iocb.aio_flags = IOCB_FLAG_RESFD;
545 iocb.aio_resfd = -1;
Piotr Sikoraa852d772016-06-27 15:00:03 -0700546 (void) iocb;
Ruslan Ermilov5c170302014-05-23 16:37:05 +0400547 (void) eventfd(0, 0)"
548 . auto/feature
549
550 if [ $ngx_found = yes ]; then
551 have=NGX_HAVE_EVENTFD . auto/have
552 have=NGX_HAVE_SYS_EVENTFD_H . auto/have
553 CORE_SRCS="$CORE_SRCS $LINUX_AIO_SRCS"
554 fi
555 fi
556
557 if [ $ngx_found = no ]; then
558
559 ngx_feature="Linux AIO support (SYS_eventfd)"
560 ngx_feature_incs="#include <linux/aio_abi.h>
561 #include <sys/syscall.h>"
Piotr Sikoraa852d772016-06-27 15:00:03 -0700562 ngx_feature_test="struct iocb iocb;
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000563 iocb.aio_lio_opcode = IOCB_CMD_PREAD;
564 iocb.aio_flags = IOCB_FLAG_RESFD;
Piotr Sikoraa852d772016-06-27 15:00:03 -0700565 iocb.aio_resfd = -1;
566 (void) iocb;
567 (void) SYS_eventfd"
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000568 . auto/feature
569
570 if [ $ngx_found = yes ]; then
571 have=NGX_HAVE_EVENTFD . auto/have
572 CORE_SRCS="$CORE_SRCS $LINUX_AIO_SRCS"
Ruslan Ermilov5c170302014-05-23 16:37:05 +0400573 fi
574 fi
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000575
Ruslan Ermilov5c170302014-05-23 16:37:05 +0400576 if [ $ngx_found = no ]; then
577 cat << END
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000578
579$0: no supported file AIO was found
580Currently file AIO is supported on FreeBSD 4.3+ and Linux 2.6.22+ only
581
582END
Ruslan Ermilov5c170302014-05-23 16:37:05 +0400583 exit 1
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000584 fi
Valentin Bartenevf76b7f32015-03-14 17:37:13 +0300585
586else
587
588 ngx_feature="eventfd()"
589 ngx_feature_name="NGX_HAVE_EVENTFD"
590 ngx_feature_run=no
591 ngx_feature_incs="#include <sys/eventfd.h>"
592 ngx_feature_path=
593 ngx_feature_libs=
594 ngx_feature_test="(void) eventfd(0, 0)"
595 . auto/feature
596
597 if [ $ngx_found = yes ]; then
598 have=NGX_HAVE_SYS_EVENTFD_H . auto/have
599 fi
600
601 if [ $ngx_found = no ]; then
602
603 ngx_feature="eventfd() (SYS_eventfd)"
604 ngx_feature_incs="#include <sys/syscall.h>"
Piotr Sikoraa852d772016-06-27 15:00:03 -0700605 ngx_feature_test="(void) SYS_eventfd"
Valentin Bartenevf76b7f32015-03-14 17:37:13 +0300606 . auto/feature
607 fi
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000608fi
609
610
Igor Sysoev02025fd2005-01-18 13:03:58 +0000611have=NGX_HAVE_UNIX_DOMAIN . auto/have
612
Igor Sysoevd3283ff2005-12-05 13:18:09 +0000613ngx_feature_libs=
Igor Sysoeva8fa0a62003-11-25 20:44:56 +0000614
Igor Sysoevd039a2e2005-02-22 14:40:13 +0000615
Igor Sysoevc0f8d912003-11-26 15:42:18 +0000616# C types
617
Igor Sysoev48fef662004-02-24 17:31:46 +0000618ngx_type="int"; . auto/types/sizeof
Igor Sysoeva8fa0a62003-11-25 20:44:56 +0000619
Igor Sysoev48fef662004-02-24 17:31:46 +0000620ngx_type="long"; . auto/types/sizeof
Igor Sysoeva8fa0a62003-11-25 20:44:56 +0000621
Igor Sysoev48fef662004-02-24 17:31:46 +0000622ngx_type="long long"; . auto/types/sizeof
Igor Sysoeva8fa0a62003-11-25 20:44:56 +0000623
Igor Sysoevc0247302004-06-27 18:01:57 +0000624ngx_type="void *"; . auto/types/sizeof; ngx_ptr_size=$ngx_size
Igor Sysoevd039a2e2005-02-22 14:40:13 +0000625ngx_param=NGX_PTR_SIZE; ngx_value=$ngx_size; . auto/types/value
Igor Sysoeva8fa0a62003-11-25 20:44:56 +0000626
627
Igor Sysoev7af6b162004-02-09 07:46:43 +0000628# POSIX types
Igor Sysoevc0f8d912003-11-26 15:42:18 +0000629
Ruslan Ermilov57bb8122015-06-17 14:15:27 +0300630NGX_INCLUDE_AUTO_CONFIG_H="#include \"ngx_auto_config.h\""
Igor Sysoevc0f8d912003-11-26 15:42:18 +0000631
Maxim Dounin0029fec2016-04-01 16:38:31 +0300632ngx_type="uint32_t"; ngx_types="u_int32_t"; . auto/types/typedef
Igor Sysoevc0247302004-06-27 18:01:57 +0000633ngx_type="uint64_t"; ngx_types="u_int64_t"; . auto/types/typedef
Igor Sysoevc0f8d912003-11-26 15:42:18 +0000634
Igor Sysoevc0247302004-06-27 18:01:57 +0000635ngx_type="sig_atomic_t"; ngx_types="int"; . auto/types/typedef
636. auto/types/sizeof
Igor Sysoevb1dfe472004-12-21 12:30:30 +0000637ngx_param=NGX_SIG_ATOMIC_T_SIZE; ngx_value=$ngx_size; . auto/types/value
Igor Sysoev92602942004-02-05 16:58:36 +0000638
Igor Sysoeve31e90b2005-05-19 13:25:22 +0000639ngx_type="socklen_t"; ngx_types="int"; . auto/types/typedef
Igor Sysoevc0f8d912003-11-26 15:42:18 +0000640
Maxim Dounin0029fec2016-04-01 16:38:31 +0300641ngx_type="in_addr_t"; ngx_types="uint32_t u_int32_t"; . auto/types/typedef
Igor Sysoevc0f8d912003-11-26 15:42:18 +0000642
Igor Sysoev59cf56c2004-09-07 15:29:22 +0000643ngx_type="in_port_t"; ngx_types="u_short"; . auto/types/typedef
644
Igor Sysoevc0247302004-06-27 18:01:57 +0000645ngx_type="rlim_t"; ngx_types="int"; . auto/types/typedef
Igor Sysoevc0f8d912003-11-26 15:42:18 +0000646
647. auto/types/uintptr_t
648
Ruslan Ermilovd4353c62012-06-08 09:41:55 +0000649. auto/endianness
Igor Sysoevc0247302004-06-27 18:01:57 +0000650
Igor Sysoev42b12b32004-12-02 18:40:46 +0000651ngx_type="size_t"; . auto/types/sizeof
Igor Sysoevb1dfe472004-12-21 12:30:30 +0000652ngx_param=NGX_MAX_SIZE_T_VALUE; ngx_value=$ngx_max_value; . auto/types/value
653ngx_param=NGX_SIZE_T_LEN; ngx_value=$ngx_max_len; . auto/types/value
Igor Sysoevc0f8d912003-11-26 15:42:18 +0000654
Igor Sysoev42b12b32004-12-02 18:40:46 +0000655ngx_type="off_t"; . auto/types/sizeof
Igor Sysoevb1dfe472004-12-21 12:30:30 +0000656ngx_param=NGX_MAX_OFF_T_VALUE; ngx_value=$ngx_max_value; . auto/types/value
657ngx_param=NGX_OFF_T_LEN; ngx_value=$ngx_max_len; . auto/types/value
Igor Sysoevc0f8d912003-11-26 15:42:18 +0000658
Igor Sysoev42b12b32004-12-02 18:40:46 +0000659ngx_type="time_t"; . auto/types/sizeof
Igor Sysoevb1dfe472004-12-21 12:30:30 +0000660ngx_param=NGX_TIME_T_SIZE; ngx_value=$ngx_size; . auto/types/value
661ngx_param=NGX_TIME_T_LEN; ngx_value=$ngx_max_len; . auto/types/value
Ruslan Ermilov8fcbfc02015-03-17 00:24:34 +0300662ngx_param=NGX_MAX_TIME_T_VALUE; ngx_value=$ngx_max_value; . auto/types/value
Igor Sysoeva8fa0a62003-11-25 20:44:56 +0000663
664
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000665# syscalls, libc calls and some features
666
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000667
Maxim Dounin4eb195b2016-10-04 16:38:14 +0300668ngx_feature="AF_INET6"
669ngx_feature_name="NGX_HAVE_INET6"
670ngx_feature_run=no
671ngx_feature_incs="#include <sys/socket.h>
672 #include <netinet/in.h>
673 #include <arpa/inet.h>"
674ngx_feature_path=
675ngx_feature_libs=
676ngx_feature_test="struct sockaddr_in6 sin6;
677 sin6.sin6_family = AF_INET6;
678 (void) sin6"
679. auto/feature
Igor Sysoeva35eacc2009-02-21 07:02:02 +0000680
681
Igor Sysoevd43bee82004-11-20 19:52:20 +0000682ngx_feature="setproctitle()"
Igor Sysoevf6906042004-11-25 16:17:31 +0000683ngx_feature_name="NGX_HAVE_SETPROCTITLE"
Igor Sysoevd43bee82004-11-20 19:52:20 +0000684ngx_feature_run=no
Ruslan Ermilov4489fa82012-03-15 20:39:38 +0000685ngx_feature_incs="#include <stdlib.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000686ngx_feature_path=
Igor Sysoev899b44e2005-05-12 14:58:06 +0000687ngx_feature_libs=$NGX_SETPROCTITLE_LIB
Igor Sysoevd43bee82004-11-20 19:52:20 +0000688ngx_feature_test="setproctitle(\"test\");"
689. auto/feature
690
691
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000692ngx_feature="pread()"
Igor Sysoevf6906042004-11-25 16:17:31 +0000693ngx_feature_name="NGX_HAVE_PREAD"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000694ngx_feature_run=no
695ngx_feature_incs=
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000696ngx_feature_path=
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000697ngx_feature_libs=
Maxim Dounina3bdd732012-03-27 16:44:52 +0000698ngx_feature_test="char buf[1]; ssize_t n; n = pread(0, buf, 1, 0);
699 if (n == -1) return 1"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000700. auto/feature
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000701
Igor Sysoeva8fa0a62003-11-25 20:44:56 +0000702
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000703ngx_feature="pwrite()"
Igor Sysoevf6906042004-11-25 16:17:31 +0000704ngx_feature_name="NGX_HAVE_PWRITE"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000705ngx_feature_run=no
706ngx_feature_incs=
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000707ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000708ngx_feature_libs=
Maxim Dounina3bdd732012-03-27 16:44:52 +0000709ngx_feature_test="char buf[1]; ssize_t n; n = pwrite(1, buf, 1, 0);
710 if (n == -1) return 1"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000711. auto/feature
Igor Sysoeva8fa0a62003-11-25 20:44:56 +0000712
713
Valentin Bartenevcbd1f972015-11-17 19:01:41 +0300714# pwritev() was introduced in FreeBSD 6 and Linux 2.6.30, glibc 2.10
715
716ngx_feature="pwritev()"
717ngx_feature_name="NGX_HAVE_PWRITEV"
718ngx_feature_run=no
719ngx_feature_incs='#include <sys/uio.h>'
720ngx_feature_path=
721ngx_feature_libs=
722ngx_feature_test="char buf[1]; struct iovec vec[1]; ssize_t n;
723 vec[0].iov_base = buf;
724 vec[0].iov_len = 1;
725 n = pwritev(1, vec, 1, 0);
726 if (n == -1) return 1"
727. auto/feature
728
729
Igor Sysoev7f31a202010-11-25 11:04:03 +0000730ngx_feature="sys_nerr"
731ngx_feature_name="NGX_SYS_NERR"
732ngx_feature_run=value
Maxim Konovalovd4a2f142011-11-21 11:51:41 +0000733ngx_feature_incs='#include <errno.h>
734 #include <stdio.h>'
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000735ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000736ngx_feature_libs=
Igor Sysoev7f31a202010-11-25 11:04:03 +0000737ngx_feature_test='printf("%d", sys_nerr);'
Igor Sysoev9eaabc62010-03-12 11:15:26 +0000738. auto/feature
739
740
Igor Sysoevbb6bd802010-12-06 14:49:17 +0000741if [ $ngx_found = no ]; then
Igor Sysoev2369c142010-12-06 14:50:27 +0000742
Igor Sysoevbb6bd802010-12-06 14:49:17 +0000743 # Cygiwn defines _sys_nerr
744 ngx_feature="_sys_nerr"
745 ngx_feature_name="NGX_SYS_NERR"
746 ngx_feature_run=value
747 ngx_feature_incs='#include <errno.h>
748 #include <stdio.h>'
749 ngx_feature_path=
750 ngx_feature_libs=
751 ngx_feature_test='printf("%d", _sys_nerr);'
752 . auto/feature
753fi
Igor Sysoevdc9d7fb2010-12-01 19:22:37 +0000754
755
Igor Sysoevadc70832010-12-06 14:51:20 +0000756if [ $ngx_found = no ]; then
757
758 # Solaris has no sys_nerr
759 ngx_feature='maximum errno'
760 ngx_feature_name=NGX_SYS_NERR
761 ngx_feature_run=value
762 ngx_feature_incs='#include <errno.h>
Igor Sysoev95052772011-05-04 12:21:25 +0000763 #include <string.h>
Igor Sysoevadc70832010-12-06 14:51:20 +0000764 #include <stdio.h>'
765 ngx_feature_path=
766 ngx_feature_libs=
767 ngx_feature_test='int n;
Igor Sysoev1143d002011-04-23 13:15:56 +0000768 char *p;
Igor Sysoevadc70832010-12-06 14:51:20 +0000769 for (n = 1; n < 1000; n++) {
770 errno = 0;
Igor Sysoev1143d002011-04-23 13:15:56 +0000771 p = strerror(n);
772 if (errno == EINVAL
773 || p == NULL
774 || strncmp(p, "Unknown error", 13) == 0)
775 {
Maxim Konovalovd4a2f142011-11-21 11:51:41 +0000776 break;
Igor Sysoevadc70832010-12-06 14:51:20 +0000777 }
Maxim Konovalovd4a2f142011-11-21 11:51:41 +0000778 }
779 printf("%d", n);'
Igor Sysoevadc70832010-12-06 14:51:20 +0000780 . auto/feature
781fi
782
783
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000784ngx_feature="localtime_r()"
Igor Sysoevf6906042004-11-25 16:17:31 +0000785ngx_feature_name="NGX_HAVE_LOCALTIME_R"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000786ngx_feature_run=no
787ngx_feature_incs="#include <time.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000788ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000789ngx_feature_libs=
790ngx_feature_test="struct tm t; time_t c=0; localtime_r(&c, &t)"
791. auto/feature
Igor Sysoevdc867cd2003-12-14 20:10:27 +0000792
793
Maxim Dounin992318f2018-03-01 20:25:50 +0300794ngx_feature="clock_gettime(CLOCK_MONOTONIC)"
795ngx_feature_name="NGX_HAVE_CLOCK_MONOTONIC"
796ngx_feature_run=no
797ngx_feature_incs="#include <time.h>"
798ngx_feature_path=
799ngx_feature_libs=
800ngx_feature_test="struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts)"
801. auto/feature
802
803
804if [ $ngx_found = no ]; then
805
806 # Linux before glibc 2.17, notably CentOS 6
807
808 ngx_feature="clock_gettime(CLOCK_MONOTONIC) in librt"
809 ngx_feature_libs="-lrt"
810 . auto/feature
811
812 if [ $ngx_found = yes ]; then
813 CORE_LIBS="$CORE_LIBS -lrt"
814 fi
815fi
816
817
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000818ngx_feature="posix_memalign()"
Igor Sysoevf6906042004-11-25 16:17:31 +0000819ngx_feature_name="NGX_HAVE_POSIX_MEMALIGN"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000820ngx_feature_run=no
821ngx_feature_incs="#include <stdlib.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000822ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000823ngx_feature_libs=
Maxim Dounina3bdd732012-03-27 16:44:52 +0000824ngx_feature_test="void *p; int n; n = posix_memalign(&p, 4096, 4096);
825 if (n != 0) return 1"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000826. auto/feature
Igor Sysoevc7a2f682004-02-10 16:23:38 +0000827
828
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000829ngx_feature="memalign()"
Igor Sysoevf6906042004-11-25 16:17:31 +0000830ngx_feature_name="NGX_HAVE_MEMALIGN"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000831ngx_feature_run=no
Ruslan Ermilov4489fa82012-03-15 20:39:38 +0000832ngx_feature_incs="#include <stdlib.h>
833 #include <malloc.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000834ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000835ngx_feature_libs=
Maxim Dounina3bdd732012-03-27 16:44:52 +0000836ngx_feature_test="void *p; p = memalign(4096, 4096);
837 if (p == NULL) return 1"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000838. auto/feature
Igor Sysoev0ab91b92004-06-06 19:49:18 +0000839
840
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000841ngx_feature="mmap(MAP_ANON|MAP_SHARED)"
Igor Sysoevf6906042004-11-25 16:17:31 +0000842ngx_feature_name="NGX_HAVE_MAP_ANON"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000843ngx_feature_run=yes
844ngx_feature_incs="#include <sys/mman.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000845ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000846ngx_feature_libs=
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000847ngx_feature_test="void *p;
848 p = mmap(NULL, 4096, PROT_READ|PROT_WRITE,
849 MAP_ANON|MAP_SHARED, -1, 0);
850 if (p == MAP_FAILED) return 1;"
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000851. auto/feature
Igor Sysoevd09f7a12004-06-15 17:47:16 +0000852
853
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000854ngx_feature='mmap("/dev/zero", MAP_SHARED)'
Igor Sysoevf6906042004-11-25 16:17:31 +0000855ngx_feature_name="NGX_HAVE_MAP_DEVZERO"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000856ngx_feature_run=yes
857ngx_feature_incs="#include <sys/mman.h>
Igor Sysoev92d543d2009-03-23 20:26:33 +0000858 #include <sys/stat.h>
859 #include <fcntl.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000860ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000861ngx_feature_libs=
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000862ngx_feature_test='void *p; int fd;
863 fd = open("/dev/zero", O_RDWR);
864 p = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
865 if (p == MAP_FAILED) return 1;'
866. auto/feature
867
868
869ngx_feature="System V shared memory"
Igor Sysoevf6906042004-11-25 16:17:31 +0000870ngx_feature_name="NGX_HAVE_SYSVSHM"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000871ngx_feature_run=yes
872ngx_feature_incs="#include <sys/ipc.h>
Igor Sysoev92d543d2009-03-23 20:26:33 +0000873 #include <sys/shm.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000874ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000875ngx_feature_libs=
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000876ngx_feature_test="int id;
877 id = shmget(IPC_PRIVATE, 4096, (SHM_R|SHM_W|IPC_CREAT));
878 if (id == -1) return 1;
879 shmctl(id, IPC_RMID, NULL);"
880. auto/feature
881
882
Igor Sysoeve2c8ad72011-05-10 11:39:13 +0000883ngx_feature="POSIX semaphores"
884ngx_feature_name="NGX_HAVE_POSIX_SEM"
885ngx_feature_run=yes
886ngx_feature_incs="#include <semaphore.h>"
887ngx_feature_path=
888ngx_feature_libs=
889ngx_feature_test="sem_t sem;
890 if (sem_init(&sem, 1, 0) == -1) return 1;
891 sem_destroy(&sem);"
892. auto/feature
893
894
Igor Sysoev0462a612011-05-31 08:17:27 +0000895if [ $ngx_found = no ]; then
896
897 # Linux has POSIX semaphores in libpthread
898 ngx_feature="POSIX semaphores in libpthread"
899 ngx_feature_libs=-lpthread
900 . auto/feature
901
902 if [ $ngx_found = yes ]; then
903 CORE_LIBS="$CORE_LIBS -lpthread"
Maxim Dounindad2f662018-03-22 15:55:57 +0300904 NGX_LIBPTHREAD="-lpthread"
Igor Sysoev0462a612011-05-31 08:17:27 +0000905 fi
906fi
907
908
Maxim Douninb4d9ee22011-08-17 08:35:54 +0000909if [ $ngx_found = no ]; then
910
911 # Solaris has POSIX semaphores in librt
912 ngx_feature="POSIX semaphores in librt"
913 ngx_feature_libs=-lrt
914 . auto/feature
915
916 if [ $ngx_found = yes ]; then
917 CORE_LIBS="$CORE_LIBS -lrt"
918 fi
919fi
920
921
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000922ngx_feature="struct msghdr.msg_control"
Igor Sysoevf6906042004-11-25 16:17:31 +0000923ngx_feature_name="NGX_HAVE_MSGHDR_MSG_CONTROL"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000924ngx_feature_run=no
Maxim Dounina3bdd732012-03-27 16:44:52 +0000925ngx_feature_incs="#include <sys/socket.h>
926 #include <stdio.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000927ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000928ngx_feature_libs=
Maxim Dounin97d7f3d2012-03-28 12:38:03 +0000929ngx_feature_test="struct msghdr msg;
930 printf(\"%d\", (int) sizeof(msg.msg_control))"
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000931. auto/feature
932
933
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000934ngx_feature="ioctl(FIONBIO)"
Igor Sysoevf6906042004-11-25 16:17:31 +0000935ngx_feature_name="NGX_HAVE_FIONBIO"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000936ngx_feature_run=no
937ngx_feature_incs="#include <sys/ioctl.h>
Maxim Dounina3bdd732012-03-27 16:44:52 +0000938 #include <stdio.h>
Igor Sysoev92d543d2009-03-23 20:26:33 +0000939 $NGX_INCLUDE_SYS_FILIO_H"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000940ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000941ngx_feature_libs=
Maxim Dounina3bdd732012-03-27 16:44:52 +0000942ngx_feature_test="int i = FIONBIO; printf(\"%d\", i)"
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000943. auto/feature
944
945
Maxim Dounindee6b632019-10-17 16:02:19 +0300946ngx_feature="ioctl(FIONREAD)"
947ngx_feature_name="NGX_HAVE_FIONREAD"
948ngx_feature_run=no
949ngx_feature_incs="#include <sys/ioctl.h>
950 #include <stdio.h>
951 $NGX_INCLUDE_SYS_FILIO_H"
952ngx_feature_path=
953ngx_feature_libs=
954ngx_feature_test="int i = FIONREAD; printf(\"%d\", i)"
955. auto/feature
956
957
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000958ngx_feature="struct tm.tm_gmtoff"
Igor Sysoevf6906042004-11-25 16:17:31 +0000959ngx_feature_name="NGX_HAVE_GMTOFF"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000960ngx_feature_run=no
Maxim Dounina3bdd732012-03-27 16:44:52 +0000961ngx_feature_incs="#include <time.h>
962 #include <stdio.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000963ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000964ngx_feature_libs=
Maxim Dounina3bdd732012-03-27 16:44:52 +0000965ngx_feature_test="struct tm tm; tm.tm_gmtoff = 0;
966 printf(\"%d\", (int) tm.tm_gmtoff)"
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000967. auto/feature
Igor Sysoevdfc8dad2008-09-05 15:43:34 +0000968
969
970ngx_feature="struct dirent.d_namlen"
971ngx_feature_name="NGX_HAVE_D_NAMLEN"
972ngx_feature_run=no
Maxim Dounina3bdd732012-03-27 16:44:52 +0000973ngx_feature_incs="#include <dirent.h>
974 #include <stdio.h>"
Igor Sysoevdfc8dad2008-09-05 15:43:34 +0000975ngx_feature_path=
976ngx_feature_libs=
Maxim Dounina3bdd732012-03-27 16:44:52 +0000977ngx_feature_test="struct dirent dir; dir.d_namlen = 0;
978 printf(\"%d\", (int) dir.d_namlen)"
Igor Sysoevdfc8dad2008-09-05 15:43:34 +0000979. auto/feature
980
981
982ngx_feature="struct dirent.d_type"
983ngx_feature_name="NGX_HAVE_D_TYPE"
984ngx_feature_run=no
Maxim Dounina3bdd732012-03-27 16:44:52 +0000985ngx_feature_incs="#include <dirent.h>
986 #include <stdio.h>"
Igor Sysoevdfc8dad2008-09-05 15:43:34 +0000987ngx_feature_path=
988ngx_feature_libs=
Maxim Dounina3bdd732012-03-27 16:44:52 +0000989ngx_feature_test="struct dirent dir; dir.d_type = DT_REG;
990 printf(\"%d\", (int) dir.d_type)"
Igor Sysoevdfc8dad2008-09-05 15:43:34 +0000991. auto/feature
Valentin Bartenev891b43d2012-02-10 11:24:19 +0000992
993
994ngx_feature="sysconf(_SC_NPROCESSORS_ONLN)"
995ngx_feature_name="NGX_HAVE_SC_NPROCESSORS_ONLN"
996ngx_feature_run=no
997ngx_feature_incs=
998ngx_feature_path=
999ngx_feature_libs=
1000ngx_feature_test="sysconf(_SC_NPROCESSORS_ONLN)"
1001. auto/feature
Andrey Belov71205c32012-02-13 16:13:21 +00001002
1003
Debayan Ghosh3cd263f2017-12-11 16:28:11 +00001004ngx_feature="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)"
1005ngx_feature_name="NGX_HAVE_LEVEL1_DCACHE_LINESIZE"
1006ngx_feature_run=no
1007ngx_feature_incs=
1008ngx_feature_path=
1009ngx_feature_libs=
1010ngx_feature_test="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)"
1011. auto/feature
1012
1013
Andrey Belov71205c32012-02-13 16:13:21 +00001014ngx_feature="openat(), fstatat()"
1015ngx_feature_name="NGX_HAVE_OPENAT"
1016ngx_feature_run=no
1017ngx_feature_incs="#include <sys/types.h>
1018 #include <sys/stat.h>
1019 #include <fcntl.h>"
1020ngx_feature_path=
1021ngx_feature_libs=
1022ngx_feature_test="struct stat sb;
1023 openat(AT_FDCWD, \".\", O_RDONLY|O_NOFOLLOW);
1024 fstatat(AT_FDCWD, \".\", &sb, AT_SYMLINK_NOFOLLOW);"
1025. auto/feature
Ruslan Ermilovb8a90c62012-12-17 12:08:53 +00001026
1027
1028ngx_feature="getaddrinfo()"
1029ngx_feature_name="NGX_HAVE_GETADDRINFO"
1030ngx_feature_run=no
1031ngx_feature_incs="#include <sys/types.h>
1032 #include <sys/socket.h>
1033 #include <netdb.h>"
1034ngx_feature_path=
1035ngx_feature_libs=
Ruslan Ermilov3693daa2013-08-05 13:44:56 +04001036ngx_feature_test='struct addrinfo *res;
1037 if (getaddrinfo("localhost", NULL, NULL, &res) != 0) return 1;
Ruslan Ermilovb8a90c62012-12-17 12:08:53 +00001038 freeaddrinfo(res)'
1039. auto/feature