blob: e6396ef2a25b050695bb9b71a436d8b08d9b6e55 [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=
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
128fi
129
130
131if [ "$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
139END
140
141else
142 cat << END >> $NGX_AUTO_CONFIG_H
143
144#define NGX_KQUEUE_UDATA_T (void *)
145
146END
147
148fi
149
150
151ngx_feature="crypt()"
152ngx_feature_name=
153ngx_feature_run=no
154ngx_feature_incs=
155ngx_feature_path=
156ngx_feature_libs=
157ngx_feature_test="crypt(\"test\", \"salt\");"
158. auto/feature
159
160
161if [ $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
174fi
175
176
177ngx_feature="F_READAHEAD"
178ngx_feature_name="NGX_HAVE_F_READAHEAD"
179ngx_feature_run=no
180ngx_feature_incs="#include <fcntl.h>"
181ngx_feature_path=
182ngx_feature_libs=
183ngx_feature_test="fcntl(0, F_READAHEAD, 1);"
184. auto/feature
185
186
187ngx_feature="posix_fadvise()"
188ngx_feature_name="NGX_HAVE_POSIX_FADVISE"
189ngx_feature_run=no
190ngx_feature_incs="#include <fcntl.h>"
191ngx_feature_path=
192ngx_feature_libs=
193ngx_feature_test="posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL);"
194. auto/feature
195
196
197ngx_feature="O_DIRECT"
198ngx_feature_name="NGX_HAVE_O_DIRECT"
199ngx_feature_run=no
200ngx_feature_incs="#include <fcntl.h>"
201ngx_feature_path=
202ngx_feature_libs=
203ngx_feature_test="fcntl(0, F_SETFL, O_DIRECT);"
204. auto/feature
205
206
207if [ $ngx_found = yes -a "$NGX_SYSTEM" = "Linux" ]; then
208 have=NGX_HAVE_ALIGNED_DIRECTIO . auto/have
209fi
210
211ngx_feature="F_NOCACHE"
212ngx_feature_name="NGX_HAVE_F_NOCACHE"
213ngx_feature_run=no
214ngx_feature_incs="#include <fcntl.h>"
215ngx_feature_path=
216ngx_feature_libs=
217ngx_feature_test="fcntl(0, F_NOCACHE, 1);"
218. auto/feature
219
220
221ngx_feature="directio()"
222ngx_feature_name="NGX_HAVE_DIRECTIO"
223ngx_feature_run=no
224ngx_feature_incs="#include <sys/types.h>
225 #include <sys/fcntl.h>"
226ngx_feature_path=
227ngx_feature_libs=
228ngx_feature_test="directio(0, DIRECTIO_ON);"
229. auto/feature
230
231
232ngx_feature="statfs()"
233ngx_feature_name="NGX_HAVE_STATFS"
234ngx_feature_run=no
235ngx_feature_incs="$NGX_INCLUDE_SYS_PARAM_H
236 $NGX_INCLUDE_SYS_MOUNT_H
237 $NGX_INCLUDE_SYS_VFS_H"
238ngx_feature_path=
239ngx_feature_libs=
240ngx_feature_test="struct statfs fs;
Ruslan Ermilov4489fa82012-03-15 20:39:38 +0000241 statfs(\".\", &fs);"
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000242. auto/feature
243
244
245ngx_feature="statvfs()"
246ngx_feature_name="NGX_HAVE_STATVFS"
247ngx_feature_run=no
248ngx_feature_incs="#include <sys/types.h>
249 #include <sys/statvfs.h>"
250ngx_feature_path=
251ngx_feature_libs=
252ngx_feature_test="struct statvfs fs;
Ruslan Ermilov4489fa82012-03-15 20:39:38 +0000253 statvfs(\".\", &fs);"
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000254. auto/feature
255
256
257ngx_feature="dlopen()"
Maxim Douninc52460c2016-02-04 18:30:21 +0300258ngx_feature_name="NGX_HAVE_DLOPEN"
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000259ngx_feature_run=no
260ngx_feature_incs="#include <dlfcn.h>"
261ngx_feature_path=
262ngx_feature_libs=
Maxim Dounin0029fec2016-04-01 16:38:31 +0300263ngx_feature_test="dlopen(NULL, RTLD_NOW | RTLD_GLOBAL); dlsym(NULL, NULL)"
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000264. auto/feature
265
266
267if [ $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
Maxim Douninc52460c2016-02-04 18:30:21 +0300274 CORE_LIBS="$CORE_LIBS -ldl"
Ruslan Ermilov9df3a0a2016-02-18 11:39:57 +0300275 NGX_LIBDL="-ldl"
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000276 fi
277fi
278
279
280ngx_feature="sched_yield()"
281ngx_feature_name="NGX_HAVE_SCHED_YIELD"
282ngx_feature_run=no
283ngx_feature_incs="#include <sched.h>"
284ngx_feature_path=
285ngx_feature_libs=
286ngx_feature_test="sched_yield()"
287. auto/feature
288
289
290if [ $ngx_found != yes ]; then
291
292 ngx_feature="sched_yield() in librt"
293 ngx_feature_libs="-lrt"
294 . auto/feature
295
296 if [ $ngx_found = yes ]; then
297 CORE_LIBS="$CORE_LIBS -lrt"
298 fi
299fi
300
Maxim Douninec8186c2011-08-21 11:37:37 +0000301
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000302ngx_feature="SO_SETFIB"
303ngx_feature_name="NGX_HAVE_SETFIB"
304ngx_feature_run=no
305ngx_feature_incs="#include <sys/socket.h>"
306ngx_feature_path=
307ngx_feature_libs=
Maxim Dounin328c7dd2015-05-20 15:51:13 +0300308ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_SETFIB, NULL, 0)"
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000309. auto/feature
310
311
Maxim Douninc86ce4b2015-05-20 15:51:56 +0300312ngx_feature="SO_REUSEPORT"
313ngx_feature_name="NGX_HAVE_REUSEPORT"
314ngx_feature_run=no
315ngx_feature_incs="#include <sys/socket.h>"
316ngx_feature_path=
317ngx_feature_libs=
318ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_REUSEPORT, NULL, 0)"
319. auto/feature
320
321
Maxim Douninec8186c2011-08-21 11:37:37 +0000322ngx_feature="SO_ACCEPTFILTER"
323ngx_feature_name="NGX_HAVE_DEFERRED_ACCEPT"
324ngx_feature_run=no
325ngx_feature_incs="#include <sys/socket.h>"
326ngx_feature_path=
327ngx_feature_libs=
328ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_ACCEPTFILTER, NULL, 0)"
329. auto/feature
330
331
Roman Arutyunyan055c4602015-12-18 19:05:27 +0300332# NetBSD bind to any address for transparent proxying
333
334ngx_feature="SO_BINDANY"
335ngx_feature_name="NGX_HAVE_TRANSPARENT_PROXY"
336ngx_feature_run=no
337ngx_feature_incs="#include <sys/socket.h>"
338ngx_feature_path=
339ngx_feature_libs=
340ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_BINDANY, NULL, 0)"
341. auto/feature
342
343
344# Linux transparent proxying
345
346ngx_feature="IP_TRANSPARENT"
347ngx_feature_name="NGX_HAVE_TRANSPARENT_PROXY"
348ngx_feature_run=no
349ngx_feature_incs="#include <sys/socket.h>
350 #include <netinet/in.h>"
351ngx_feature_path=
352ngx_feature_libs=
353ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_TRANSPARENT, NULL, 0)"
354. auto/feature
355
356
357# FreeBSD bind to any address for transparent proxying
358
359ngx_feature="IP_BINDANY"
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_BINDANY, NULL, 0)"
367. auto/feature
368
369
Roman Arutyunyan850dfaa2016-01-20 19:52:12 +0300370# BSD way to get IPv4 datagram destination address
371
372ngx_feature="IP_RECVDSTADDR"
373ngx_feature_name="NGX_HAVE_IP_RECVDSTADDR"
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_RECVDSTADDR, NULL, 0)"
380. auto/feature
381
382
383# Linux way to get IPv4 datagram destination address
384
385ngx_feature="IP_PKTINFO"
386ngx_feature_name="NGX_HAVE_IP_PKTINFO"
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_PKTINFO, NULL, 0)"
393. auto/feature
394
395
396# RFC 3542 way to get IPv6 datagram destination address
397
398ngx_feature="IPV6_RECVPKTINFO"
399ngx_feature_name="NGX_HAVE_IPV6_RECVPKTINFO"
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_IPV6, IPV6_RECVPKTINFO, NULL, 0)"
406. auto/feature
407
408
Maxim Douninec8186c2011-08-21 11:37:37 +0000409ngx_feature="TCP_DEFER_ACCEPT"
410ngx_feature_name="NGX_HAVE_DEFERRED_ACCEPT"
411ngx_feature_run=no
412ngx_feature_incs="#include <sys/socket.h>
413 #include <netinet/in.h>
414 #include <netinet/tcp.h>"
415ngx_feature_path=
416ngx_feature_libs=
417ngx_feature_test="setsockopt(0, IPPROTO_TCP, TCP_DEFER_ACCEPT, NULL, 0)"
418. auto/feature
419
420
Maxim Dounin6e4030a2013-09-04 21:17:05 +0400421ngx_feature="TCP_KEEPIDLE"
Valentin Bartenev92edf472011-12-05 08:06:15 +0000422ngx_feature_name="NGX_HAVE_KEEPALIVE_TUNABLE"
423ngx_feature_run=no
424ngx_feature_incs="#include <sys/socket.h>
425 #include <netinet/in.h>
426 #include <netinet/tcp.h>"
427ngx_feature_path=
428ngx_feature_libs=
429ngx_feature_test="setsockopt(0, IPPROTO_TCP, TCP_KEEPIDLE, NULL, 0);
430 setsockopt(0, IPPROTO_TCP, TCP_KEEPINTVL, NULL, 0);
431 setsockopt(0, IPPROTO_TCP, TCP_KEEPCNT, NULL, 0)"
432. auto/feature
433
434
Mathew Rodley84f5c212013-12-03 22:07:03 +0400435ngx_feature="TCP_FASTOPEN"
436ngx_feature_name="NGX_HAVE_TCP_FASTOPEN"
437ngx_feature_run=no
438ngx_feature_incs="#include <sys/socket.h>
439 #include <netinet/in.h>
440 #include <netinet/tcp.h>"
441ngx_feature_path=
442ngx_feature_libs=
443ngx_feature_test="setsockopt(0, IPPROTO_TCP, TCP_FASTOPEN, NULL, 0)"
444. auto/feature
445
446
Ruslan Ermilov926ded62012-03-16 19:15:33 +0000447ngx_feature="TCP_INFO"
448ngx_feature_name="NGX_HAVE_TCP_INFO"
449ngx_feature_run=no
450ngx_feature_incs="#include <sys/socket.h>
451 #include <netinet/in.h>
452 #include <netinet/tcp.h>"
453ngx_feature_path=
454ngx_feature_libs=
455ngx_feature_test="socklen_t optlen = sizeof(struct tcp_info);
Ruslan Ermilovfd601af2012-03-21 15:35:05 +0000456 struct tcp_info ti;
457 ti.tcpi_rtt = 0;
458 ti.tcpi_rttvar = 0;
459 ti.tcpi_snd_cwnd = 0;
460 ti.tcpi_rcv_space = 0;
Maxim Dounina3bdd732012-03-27 16:44:52 +0000461 getsockopt(0, IPPROTO_TCP, TCP_INFO, &ti, &optlen)"
Ruslan Ermilov926ded62012-03-16 19:15:33 +0000462. auto/feature
463
464
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000465ngx_feature="accept4()"
466ngx_feature_name="NGX_HAVE_ACCEPT4"
467ngx_feature_run=no
468ngx_feature_incs="#include <sys/socket.h>"
469ngx_feature_path=
470ngx_feature_libs=
471ngx_feature_test="accept4(0, NULL, NULL, SOCK_NONBLOCK)"
472. auto/feature
473
474if [ $NGX_FILE_AIO = YES ]; then
475
476 ngx_feature="kqueue AIO support"
477 ngx_feature_name="NGX_HAVE_FILE_AIO"
478 ngx_feature_run=no
479 ngx_feature_incs="#include <aio.h>"
480 ngx_feature_path=
481 ngx_feature_libs=
482 ngx_feature_test="int n; struct aiocb iocb;
483 iocb.aio_sigevent.sigev_notify = SIGEV_KEVENT;
484 n = aio_read(&iocb)"
485 . auto/feature
486
487 if [ $ngx_found = yes ]; then
488 CORE_SRCS="$CORE_SRCS $FILE_AIO_SRCS"
Ruslan Ermilov5c170302014-05-23 16:37:05 +0400489 fi
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000490
Ruslan Ermilov5c170302014-05-23 16:37:05 +0400491 if [ $ngx_found = no ]; then
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000492
493 ngx_feature="Linux AIO support"
494 ngx_feature_name="NGX_HAVE_FILE_AIO"
495 ngx_feature_run=no
496 ngx_feature_incs="#include <linux/aio_abi.h>
Ruslan Ermilov5c170302014-05-23 16:37:05 +0400497 #include <sys/eventfd.h>"
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000498 ngx_feature_path=
499 ngx_feature_libs=
Ruslan Ermilov5c170302014-05-23 16:37:05 +0400500 ngx_feature_test="struct iocb iocb;
501 iocb.aio_lio_opcode = IOCB_CMD_PREAD;
502 iocb.aio_flags = IOCB_FLAG_RESFD;
503 iocb.aio_resfd = -1;
504 (void) eventfd(0, 0)"
505 . auto/feature
506
507 if [ $ngx_found = yes ]; then
508 have=NGX_HAVE_EVENTFD . auto/have
509 have=NGX_HAVE_SYS_EVENTFD_H . auto/have
510 CORE_SRCS="$CORE_SRCS $LINUX_AIO_SRCS"
511 fi
512 fi
513
514 if [ $ngx_found = no ]; then
515
516 ngx_feature="Linux AIO support (SYS_eventfd)"
517 ngx_feature_incs="#include <linux/aio_abi.h>
518 #include <sys/syscall.h>"
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000519 ngx_feature_test="int n = SYS_eventfd;
520 struct iocb iocb;
521 iocb.aio_lio_opcode = IOCB_CMD_PREAD;
522 iocb.aio_flags = IOCB_FLAG_RESFD;
523 iocb.aio_resfd = -1;"
524 . auto/feature
525
526 if [ $ngx_found = yes ]; then
527 have=NGX_HAVE_EVENTFD . auto/have
528 CORE_SRCS="$CORE_SRCS $LINUX_AIO_SRCS"
Ruslan Ermilov5c170302014-05-23 16:37:05 +0400529 fi
530 fi
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000531
Ruslan Ermilov5c170302014-05-23 16:37:05 +0400532 if [ $ngx_found = no ]; then
533 cat << END
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000534
535$0: no supported file AIO was found
536Currently file AIO is supported on FreeBSD 4.3+ and Linux 2.6.22+ only
537
538END
Ruslan Ermilov5c170302014-05-23 16:37:05 +0400539 exit 1
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000540 fi
Valentin Bartenevf76b7f32015-03-14 17:37:13 +0300541
542else
543
544 ngx_feature="eventfd()"
545 ngx_feature_name="NGX_HAVE_EVENTFD"
546 ngx_feature_run=no
547 ngx_feature_incs="#include <sys/eventfd.h>"
548 ngx_feature_path=
549 ngx_feature_libs=
550 ngx_feature_test="(void) eventfd(0, 0)"
551 . auto/feature
552
553 if [ $ngx_found = yes ]; then
554 have=NGX_HAVE_SYS_EVENTFD_H . auto/have
555 fi
556
557 if [ $ngx_found = no ]; then
558
559 ngx_feature="eventfd() (SYS_eventfd)"
560 ngx_feature_incs="#include <sys/syscall.h>"
561 ngx_feature_test="int n = SYS_eventfd"
562 . auto/feature
563 fi
Igor Sysoeve9041dd2011-05-31 08:25:10 +0000564fi
565
566
Igor Sysoev02025fd2005-01-18 13:03:58 +0000567have=NGX_HAVE_UNIX_DOMAIN . auto/have
568
Igor Sysoevd3283ff2005-12-05 13:18:09 +0000569ngx_feature_libs=
Igor Sysoeva8fa0a62003-11-25 20:44:56 +0000570
Igor Sysoevd039a2e2005-02-22 14:40:13 +0000571
Igor Sysoevc0f8d912003-11-26 15:42:18 +0000572# C types
573
Igor Sysoev48fef662004-02-24 17:31:46 +0000574ngx_type="int"; . auto/types/sizeof
Igor Sysoeva8fa0a62003-11-25 20:44:56 +0000575
Igor Sysoev48fef662004-02-24 17:31:46 +0000576ngx_type="long"; . auto/types/sizeof
Igor Sysoeva8fa0a62003-11-25 20:44:56 +0000577
Igor Sysoev48fef662004-02-24 17:31:46 +0000578ngx_type="long long"; . auto/types/sizeof
Igor Sysoeva8fa0a62003-11-25 20:44:56 +0000579
Igor Sysoevc0247302004-06-27 18:01:57 +0000580ngx_type="void *"; . auto/types/sizeof; ngx_ptr_size=$ngx_size
Igor Sysoevd039a2e2005-02-22 14:40:13 +0000581ngx_param=NGX_PTR_SIZE; ngx_value=$ngx_size; . auto/types/value
Igor Sysoeva8fa0a62003-11-25 20:44:56 +0000582
583
Igor Sysoev7af6b162004-02-09 07:46:43 +0000584# POSIX types
Igor Sysoevc0f8d912003-11-26 15:42:18 +0000585
Ruslan Ermilov57bb8122015-06-17 14:15:27 +0300586NGX_INCLUDE_AUTO_CONFIG_H="#include \"ngx_auto_config.h\""
Igor Sysoevc0f8d912003-11-26 15:42:18 +0000587
Maxim Dounin0029fec2016-04-01 16:38:31 +0300588ngx_type="uint32_t"; ngx_types="u_int32_t"; . auto/types/typedef
Igor Sysoevc0247302004-06-27 18:01:57 +0000589ngx_type="uint64_t"; ngx_types="u_int64_t"; . auto/types/typedef
Igor Sysoevc0f8d912003-11-26 15:42:18 +0000590
Igor Sysoevc0247302004-06-27 18:01:57 +0000591ngx_type="sig_atomic_t"; ngx_types="int"; . auto/types/typedef
592. auto/types/sizeof
Igor Sysoevb1dfe472004-12-21 12:30:30 +0000593ngx_param=NGX_SIG_ATOMIC_T_SIZE; ngx_value=$ngx_size; . auto/types/value
Igor Sysoev92602942004-02-05 16:58:36 +0000594
Igor Sysoeve31e90b2005-05-19 13:25:22 +0000595ngx_type="socklen_t"; ngx_types="int"; . auto/types/typedef
Igor Sysoevc0f8d912003-11-26 15:42:18 +0000596
Maxim Dounin0029fec2016-04-01 16:38:31 +0300597ngx_type="in_addr_t"; ngx_types="uint32_t u_int32_t"; . auto/types/typedef
Igor Sysoevc0f8d912003-11-26 15:42:18 +0000598
Igor Sysoev59cf56c2004-09-07 15:29:22 +0000599ngx_type="in_port_t"; ngx_types="u_short"; . auto/types/typedef
600
Igor Sysoevc0247302004-06-27 18:01:57 +0000601ngx_type="rlim_t"; ngx_types="int"; . auto/types/typedef
Igor Sysoevc0f8d912003-11-26 15:42:18 +0000602
603. auto/types/uintptr_t
604
Ruslan Ermilovd4353c62012-06-08 09:41:55 +0000605. auto/endianness
Igor Sysoevc0247302004-06-27 18:01:57 +0000606
Igor Sysoev42b12b32004-12-02 18:40:46 +0000607ngx_type="size_t"; . auto/types/sizeof
Igor Sysoevb1dfe472004-12-21 12:30:30 +0000608ngx_param=NGX_MAX_SIZE_T_VALUE; ngx_value=$ngx_max_value; . auto/types/value
609ngx_param=NGX_SIZE_T_LEN; ngx_value=$ngx_max_len; . auto/types/value
Igor Sysoevc0f8d912003-11-26 15:42:18 +0000610
Igor Sysoev42b12b32004-12-02 18:40:46 +0000611ngx_type="off_t"; . auto/types/sizeof
Igor Sysoevb1dfe472004-12-21 12:30:30 +0000612ngx_param=NGX_MAX_OFF_T_VALUE; ngx_value=$ngx_max_value; . auto/types/value
613ngx_param=NGX_OFF_T_LEN; ngx_value=$ngx_max_len; . auto/types/value
Igor Sysoevc0f8d912003-11-26 15:42:18 +0000614
Igor Sysoev42b12b32004-12-02 18:40:46 +0000615ngx_type="time_t"; . auto/types/sizeof
Igor Sysoevb1dfe472004-12-21 12:30:30 +0000616ngx_param=NGX_TIME_T_SIZE; ngx_value=$ngx_size; . auto/types/value
617ngx_param=NGX_TIME_T_LEN; ngx_value=$ngx_max_len; . auto/types/value
Ruslan Ermilov8fcbfc02015-03-17 00:24:34 +0300618ngx_param=NGX_MAX_TIME_T_VALUE; ngx_value=$ngx_max_value; . auto/types/value
Igor Sysoeva8fa0a62003-11-25 20:44:56 +0000619
620
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000621# syscalls, libc calls and some features
622
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000623
Igor Sysoeva35eacc2009-02-21 07:02:02 +0000624if [ $NGX_IPV6 = YES ]; then
625 ngx_feature="AF_INET6"
626 ngx_feature_name="NGX_HAVE_INET6"
627 ngx_feature_run=no
628 ngx_feature_incs="#include <sys/socket.h>
629 #include <netinet/in.h>
630 #include <arpa/inet.h>"
631 ngx_feature_path=
632 ngx_feature_libs=
633 ngx_feature_test="struct sockaddr_in6 sin6;
634 sin6.sin6_family = AF_INET6;"
635 . auto/feature
636fi
637
638
Igor Sysoevd43bee82004-11-20 19:52:20 +0000639ngx_feature="setproctitle()"
Igor Sysoevf6906042004-11-25 16:17:31 +0000640ngx_feature_name="NGX_HAVE_SETPROCTITLE"
Igor Sysoevd43bee82004-11-20 19:52:20 +0000641ngx_feature_run=no
Ruslan Ermilov4489fa82012-03-15 20:39:38 +0000642ngx_feature_incs="#include <stdlib.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000643ngx_feature_path=
Igor Sysoev899b44e2005-05-12 14:58:06 +0000644ngx_feature_libs=$NGX_SETPROCTITLE_LIB
Igor Sysoevd43bee82004-11-20 19:52:20 +0000645ngx_feature_test="setproctitle(\"test\");"
646. auto/feature
647
648
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000649ngx_feature="pread()"
Igor Sysoevf6906042004-11-25 16:17:31 +0000650ngx_feature_name="NGX_HAVE_PREAD"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000651ngx_feature_run=no
652ngx_feature_incs=
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000653ngx_feature_path=
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000654ngx_feature_libs=
Maxim Dounina3bdd732012-03-27 16:44:52 +0000655ngx_feature_test="char buf[1]; ssize_t n; n = pread(0, buf, 1, 0);
656 if (n == -1) return 1"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000657. auto/feature
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000658
Igor Sysoeva8fa0a62003-11-25 20:44:56 +0000659
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000660ngx_feature="pwrite()"
Igor Sysoevf6906042004-11-25 16:17:31 +0000661ngx_feature_name="NGX_HAVE_PWRITE"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000662ngx_feature_run=no
663ngx_feature_incs=
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000664ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000665ngx_feature_libs=
Maxim Dounina3bdd732012-03-27 16:44:52 +0000666ngx_feature_test="char buf[1]; ssize_t n; n = pwrite(1, buf, 1, 0);
667 if (n == -1) return 1"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000668. auto/feature
Igor Sysoeva8fa0a62003-11-25 20:44:56 +0000669
670
Valentin Bartenevcbd1f972015-11-17 19:01:41 +0300671# pwritev() was introduced in FreeBSD 6 and Linux 2.6.30, glibc 2.10
672
673ngx_feature="pwritev()"
674ngx_feature_name="NGX_HAVE_PWRITEV"
675ngx_feature_run=no
676ngx_feature_incs='#include <sys/uio.h>'
677ngx_feature_path=
678ngx_feature_libs=
679ngx_feature_test="char buf[1]; struct iovec vec[1]; ssize_t n;
680 vec[0].iov_base = buf;
681 vec[0].iov_len = 1;
682 n = pwritev(1, vec, 1, 0);
683 if (n == -1) return 1"
684. auto/feature
685
686
Igor Sysoev7f31a202010-11-25 11:04:03 +0000687ngx_feature="sys_nerr"
688ngx_feature_name="NGX_SYS_NERR"
689ngx_feature_run=value
Maxim Konovalovd4a2f142011-11-21 11:51:41 +0000690ngx_feature_incs='#include <errno.h>
691 #include <stdio.h>'
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000692ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000693ngx_feature_libs=
Igor Sysoev7f31a202010-11-25 11:04:03 +0000694ngx_feature_test='printf("%d", sys_nerr);'
Igor Sysoev9eaabc62010-03-12 11:15:26 +0000695. auto/feature
696
697
Igor Sysoevbb6bd802010-12-06 14:49:17 +0000698if [ $ngx_found = no ]; then
Igor Sysoev2369c142010-12-06 14:50:27 +0000699
Igor Sysoevbb6bd802010-12-06 14:49:17 +0000700 # Cygiwn defines _sys_nerr
701 ngx_feature="_sys_nerr"
702 ngx_feature_name="NGX_SYS_NERR"
703 ngx_feature_run=value
704 ngx_feature_incs='#include <errno.h>
705 #include <stdio.h>'
706 ngx_feature_path=
707 ngx_feature_libs=
708 ngx_feature_test='printf("%d", _sys_nerr);'
709 . auto/feature
710fi
Igor Sysoevdc9d7fb2010-12-01 19:22:37 +0000711
712
Igor Sysoevadc70832010-12-06 14:51:20 +0000713if [ $ngx_found = no ]; then
714
715 # Solaris has no sys_nerr
716 ngx_feature='maximum errno'
717 ngx_feature_name=NGX_SYS_NERR
718 ngx_feature_run=value
719 ngx_feature_incs='#include <errno.h>
Igor Sysoev95052772011-05-04 12:21:25 +0000720 #include <string.h>
Igor Sysoevadc70832010-12-06 14:51:20 +0000721 #include <stdio.h>'
722 ngx_feature_path=
723 ngx_feature_libs=
724 ngx_feature_test='int n;
Igor Sysoev1143d002011-04-23 13:15:56 +0000725 char *p;
Igor Sysoevadc70832010-12-06 14:51:20 +0000726 for (n = 1; n < 1000; n++) {
727 errno = 0;
Igor Sysoev1143d002011-04-23 13:15:56 +0000728 p = strerror(n);
729 if (errno == EINVAL
730 || p == NULL
731 || strncmp(p, "Unknown error", 13) == 0)
732 {
Maxim Konovalovd4a2f142011-11-21 11:51:41 +0000733 break;
Igor Sysoevadc70832010-12-06 14:51:20 +0000734 }
Maxim Konovalovd4a2f142011-11-21 11:51:41 +0000735 }
736 printf("%d", n);'
Igor Sysoevadc70832010-12-06 14:51:20 +0000737 . auto/feature
738fi
739
740
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000741ngx_feature="localtime_r()"
Igor Sysoevf6906042004-11-25 16:17:31 +0000742ngx_feature_name="NGX_HAVE_LOCALTIME_R"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000743ngx_feature_run=no
744ngx_feature_incs="#include <time.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000745ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000746ngx_feature_libs=
747ngx_feature_test="struct tm t; time_t c=0; localtime_r(&c, &t)"
748. auto/feature
Igor Sysoevdc867cd2003-12-14 20:10:27 +0000749
750
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000751ngx_feature="posix_memalign()"
Igor Sysoevf6906042004-11-25 16:17:31 +0000752ngx_feature_name="NGX_HAVE_POSIX_MEMALIGN"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000753ngx_feature_run=no
754ngx_feature_incs="#include <stdlib.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000755ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000756ngx_feature_libs=
Maxim Dounina3bdd732012-03-27 16:44:52 +0000757ngx_feature_test="void *p; int n; n = posix_memalign(&p, 4096, 4096);
758 if (n != 0) return 1"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000759. auto/feature
Igor Sysoevc7a2f682004-02-10 16:23:38 +0000760
761
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000762ngx_feature="memalign()"
Igor Sysoevf6906042004-11-25 16:17:31 +0000763ngx_feature_name="NGX_HAVE_MEMALIGN"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000764ngx_feature_run=no
Ruslan Ermilov4489fa82012-03-15 20:39:38 +0000765ngx_feature_incs="#include <stdlib.h>
766 #include <malloc.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000767ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000768ngx_feature_libs=
Maxim Dounina3bdd732012-03-27 16:44:52 +0000769ngx_feature_test="void *p; p = memalign(4096, 4096);
770 if (p == NULL) return 1"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000771. auto/feature
Igor Sysoev0ab91b92004-06-06 19:49:18 +0000772
773
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000774ngx_feature="mmap(MAP_ANON|MAP_SHARED)"
Igor Sysoevf6906042004-11-25 16:17:31 +0000775ngx_feature_name="NGX_HAVE_MAP_ANON"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000776ngx_feature_run=yes
777ngx_feature_incs="#include <sys/mman.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000778ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000779ngx_feature_libs=
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000780ngx_feature_test="void *p;
781 p = mmap(NULL, 4096, PROT_READ|PROT_WRITE,
782 MAP_ANON|MAP_SHARED, -1, 0);
783 if (p == MAP_FAILED) return 1;"
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000784. auto/feature
Igor Sysoevd09f7a12004-06-15 17:47:16 +0000785
786
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000787ngx_feature='mmap("/dev/zero", MAP_SHARED)'
Igor Sysoevf6906042004-11-25 16:17:31 +0000788ngx_feature_name="NGX_HAVE_MAP_DEVZERO"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000789ngx_feature_run=yes
790ngx_feature_incs="#include <sys/mman.h>
Igor Sysoev92d543d2009-03-23 20:26:33 +0000791 #include <sys/stat.h>
792 #include <fcntl.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000793ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000794ngx_feature_libs=
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000795ngx_feature_test='void *p; int fd;
796 fd = open("/dev/zero", O_RDWR);
797 p = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
798 if (p == MAP_FAILED) return 1;'
799. auto/feature
800
801
802ngx_feature="System V shared memory"
Igor Sysoevf6906042004-11-25 16:17:31 +0000803ngx_feature_name="NGX_HAVE_SYSVSHM"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000804ngx_feature_run=yes
805ngx_feature_incs="#include <sys/ipc.h>
Igor Sysoev92d543d2009-03-23 20:26:33 +0000806 #include <sys/shm.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000807ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000808ngx_feature_libs=
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000809ngx_feature_test="int id;
810 id = shmget(IPC_PRIVATE, 4096, (SHM_R|SHM_W|IPC_CREAT));
811 if (id == -1) return 1;
812 shmctl(id, IPC_RMID, NULL);"
813. auto/feature
814
815
Igor Sysoeve2c8ad72011-05-10 11:39:13 +0000816ngx_feature="POSIX semaphores"
817ngx_feature_name="NGX_HAVE_POSIX_SEM"
818ngx_feature_run=yes
819ngx_feature_incs="#include <semaphore.h>"
820ngx_feature_path=
821ngx_feature_libs=
822ngx_feature_test="sem_t sem;
823 if (sem_init(&sem, 1, 0) == -1) return 1;
824 sem_destroy(&sem);"
825. auto/feature
826
827
Igor Sysoev0462a612011-05-31 08:17:27 +0000828if [ $ngx_found = no ]; then
829
830 # Linux has POSIX semaphores in libpthread
831 ngx_feature="POSIX semaphores in libpthread"
832 ngx_feature_libs=-lpthread
833 . auto/feature
834
835 if [ $ngx_found = yes ]; then
836 CORE_LIBS="$CORE_LIBS -lpthread"
837 fi
838fi
839
840
Maxim Douninb4d9ee22011-08-17 08:35:54 +0000841if [ $ngx_found = no ]; then
842
843 # Solaris has POSIX semaphores in librt
844 ngx_feature="POSIX semaphores in librt"
845 ngx_feature_libs=-lrt
846 . auto/feature
847
848 if [ $ngx_found = yes ]; then
849 CORE_LIBS="$CORE_LIBS -lrt"
850 fi
851fi
852
853
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000854ngx_feature="struct msghdr.msg_control"
Igor Sysoevf6906042004-11-25 16:17:31 +0000855ngx_feature_name="NGX_HAVE_MSGHDR_MSG_CONTROL"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000856ngx_feature_run=no
Maxim Dounina3bdd732012-03-27 16:44:52 +0000857ngx_feature_incs="#include <sys/socket.h>
858 #include <stdio.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000859ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000860ngx_feature_libs=
Maxim Dounin97d7f3d2012-03-28 12:38:03 +0000861ngx_feature_test="struct msghdr msg;
862 printf(\"%d\", (int) sizeof(msg.msg_control))"
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000863. auto/feature
864
865
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000866ngx_feature="ioctl(FIONBIO)"
Igor Sysoevf6906042004-11-25 16:17:31 +0000867ngx_feature_name="NGX_HAVE_FIONBIO"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000868ngx_feature_run=no
869ngx_feature_incs="#include <sys/ioctl.h>
Maxim Dounina3bdd732012-03-27 16:44:52 +0000870 #include <stdio.h>
Igor Sysoev92d543d2009-03-23 20:26:33 +0000871 $NGX_INCLUDE_SYS_FILIO_H"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000872ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000873ngx_feature_libs=
Maxim Dounina3bdd732012-03-27 16:44:52 +0000874ngx_feature_test="int i = FIONBIO; printf(\"%d\", i)"
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000875. auto/feature
876
877
878ngx_feature="struct tm.tm_gmtoff"
Igor Sysoevf6906042004-11-25 16:17:31 +0000879ngx_feature_name="NGX_HAVE_GMTOFF"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000880ngx_feature_run=no
Maxim Dounina3bdd732012-03-27 16:44:52 +0000881ngx_feature_incs="#include <time.h>
882 #include <stdio.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000883ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000884ngx_feature_libs=
Maxim Dounina3bdd732012-03-27 16:44:52 +0000885ngx_feature_test="struct tm tm; tm.tm_gmtoff = 0;
886 printf(\"%d\", (int) tm.tm_gmtoff)"
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000887. auto/feature
Igor Sysoevdfc8dad2008-09-05 15:43:34 +0000888
889
890ngx_feature="struct dirent.d_namlen"
891ngx_feature_name="NGX_HAVE_D_NAMLEN"
892ngx_feature_run=no
Maxim Dounina3bdd732012-03-27 16:44:52 +0000893ngx_feature_incs="#include <dirent.h>
894 #include <stdio.h>"
Igor Sysoevdfc8dad2008-09-05 15:43:34 +0000895ngx_feature_path=
896ngx_feature_libs=
Maxim Dounina3bdd732012-03-27 16:44:52 +0000897ngx_feature_test="struct dirent dir; dir.d_namlen = 0;
898 printf(\"%d\", (int) dir.d_namlen)"
Igor Sysoevdfc8dad2008-09-05 15:43:34 +0000899. auto/feature
900
901
902ngx_feature="struct dirent.d_type"
903ngx_feature_name="NGX_HAVE_D_TYPE"
904ngx_feature_run=no
Maxim Dounina3bdd732012-03-27 16:44:52 +0000905ngx_feature_incs="#include <dirent.h>
906 #include <stdio.h>"
Igor Sysoevdfc8dad2008-09-05 15:43:34 +0000907ngx_feature_path=
908ngx_feature_libs=
Maxim Dounina3bdd732012-03-27 16:44:52 +0000909ngx_feature_test="struct dirent dir; dir.d_type = DT_REG;
910 printf(\"%d\", (int) dir.d_type)"
Igor Sysoevdfc8dad2008-09-05 15:43:34 +0000911. auto/feature
Valentin Bartenev891b43d2012-02-10 11:24:19 +0000912
913
914ngx_feature="sysconf(_SC_NPROCESSORS_ONLN)"
915ngx_feature_name="NGX_HAVE_SC_NPROCESSORS_ONLN"
916ngx_feature_run=no
917ngx_feature_incs=
918ngx_feature_path=
919ngx_feature_libs=
920ngx_feature_test="sysconf(_SC_NPROCESSORS_ONLN)"
921. auto/feature
Andrey Belov71205c32012-02-13 16:13:21 +0000922
923
924ngx_feature="openat(), fstatat()"
925ngx_feature_name="NGX_HAVE_OPENAT"
926ngx_feature_run=no
927ngx_feature_incs="#include <sys/types.h>
928 #include <sys/stat.h>
929 #include <fcntl.h>"
930ngx_feature_path=
931ngx_feature_libs=
932ngx_feature_test="struct stat sb;
933 openat(AT_FDCWD, \".\", O_RDONLY|O_NOFOLLOW);
934 fstatat(AT_FDCWD, \".\", &sb, AT_SYMLINK_NOFOLLOW);"
935. auto/feature
Ruslan Ermilovb8a90c62012-12-17 12:08:53 +0000936
937
938ngx_feature="getaddrinfo()"
939ngx_feature_name="NGX_HAVE_GETADDRINFO"
940ngx_feature_run=no
941ngx_feature_incs="#include <sys/types.h>
942 #include <sys/socket.h>
943 #include <netdb.h>"
944ngx_feature_path=
945ngx_feature_libs=
Ruslan Ermilov3693daa2013-08-05 13:44:56 +0400946ngx_feature_test='struct addrinfo *res;
947 if (getaddrinfo("localhost", NULL, NULL, &res) != 0) return 1;
Ruslan Ermilovb8a90c62012-12-17 12:08:53 +0000948 freeaddrinfo(res)'
949. auto/feature