64
|
1
|
|
2 # Copyright (C) Igor Sysoev
|
|
3
|
|
4
|
|
5 NGX_USER=${NGX_USER:-nobody}
|
|
6
|
256
|
7 if [ -z "$NGX_GROUP" ]; then
|
|
8 if [ $NGX_USER = nobody ]; then
|
|
9 if grep nobody /etc/group 2>&1 >/dev/null; then
|
|
10 echo "checking for nobody group ... found"
|
|
11 NGX_GROUP=nobody
|
|
12 else
|
|
13 echo "checking for nobody group ... not found"
|
64
|
14
|
256
|
15 if grep nogroup /etc/group 2>&1 >/dev/null; then
|
|
16 echo "checking for nogroup group ... found"
|
|
17 NGX_GROUP=nogroup
|
|
18 else
|
|
19 echo "checking for nogroup group ... not found"
|
|
20 NGX_GROUP=nobody
|
|
21 fi
|
64
|
22 fi
|
256
|
23 else
|
|
24 NGX_GROUP=$NGX_USER
|
64
|
25 fi
|
|
26 fi
|
126
|
27
|
64
|
28
|
|
29 ngx_feature="poll()"
|
|
30 ngx_feature_name=
|
|
31 ngx_feature_run=no
|
|
32 ngx_feature_incs="#include <poll.h>"
|
258
|
33 ngx_feature_path=
|
64
|
34 ngx_feature_libs=
|
|
35 ngx_feature_test="int n, dp; struct pollfd pl;
|
126
|
36 dp = 0;
|
64
|
37 pl.fd = 0;
|
|
38 pl.events = 0;
|
|
39 pl.revents = 0;
|
|
40 n = poll(&pl, 1, 0)"
|
|
41 . auto/feature
|
126
|
42
|
64
|
43 if [ $ngx_found = no ]; then
|
|
44 EVENT_POLL=NONE
|
|
45 fi
|
126
|
46
|
64
|
47
|
|
48 ngx_feature="/dev/poll"
|
|
49 ngx_feature_name="NGX_HAVE_DEVPOLL"
|
|
50 ngx_feature_run=no
|
|
51 ngx_feature_incs="#include <sys/devpoll.h>"
|
258
|
52 ngx_feature_path=
|
64
|
53 ngx_feature_libs=
|
|
54 ngx_feature_test="int n, dp; struct dvpoll dvp;
|
|
55 dp = 0;
|
|
56 dvp.dp_fds = NULL;
|
|
57 dvp.dp_nfds = 0;
|
|
58 dvp.dp_timeout = 0;
|
|
59 n = ioctl(dp, DP_POLL, &dvp)"
|
|
60 . auto/feature
|
|
61
|
|
62 if [ $ngx_found = yes ]; then
|
|
63 CORE_SRCS="$CORE_SRCS $DEVPOLL_SRCS"
|
|
64 EVENT_MODULES="$EVENT_MODULES $DEVPOLL_MODULE"
|
|
65 EVENT_FOUND=YES
|
|
66 fi
|
|
67
|
|
68
|
|
69 if test -z "$NGX_KQUEUE_CHECKED"; then
|
|
70 ngx_feature="kqueue"
|
|
71 ngx_feature_name="NGX_HAVE_KQUEUE"
|
|
72 ngx_feature_run=no
|
|
73 ngx_feature_incs="#include <sys/event.h>"
|
258
|
74 ngx_feature_path=
|
64
|
75 ngx_feature_libs=
|
|
76 ngx_feature_test="int kq; kq = kqueue()"
|
|
77 . auto/feature
|
|
78
|
|
79 if [ $ngx_found = yes ]; then
|
|
80
|
|
81 have=NGX_HAVE_CLEAR_EVENT . auto/have
|
|
82 EVENT_MODULES="$EVENT_MODULES $KQUEUE_MODULE"
|
|
83 CORE_SRCS="$CORE_SRCS $KQUEUE_SRCS"
|
|
84 EVENT_FOUND=YES
|
|
85
|
|
86 ngx_feature="kqueue's NOTE_LOWAT"
|
|
87 ngx_feature_name="NGX_HAVE_LOWAT_EVENT"
|
|
88 ngx_feature_run=no
|
|
89 ngx_feature_incs="#include <sys/event.h>"
|
258
|
90 ngx_feature_path=
|
64
|
91 ngx_feature_libs=
|
|
92 ngx_feature_test="struct kevent kev;
|
|
93 kev.fflags = NOTE_LOWAT;"
|
|
94 . auto/feature
|
168
|
95
|
|
96
|
|
97 ngx_feature="kqueue's EVFILT_TIMER"
|
|
98 ngx_feature_name="NGX_HAVE_TIMER_EVENT"
|
|
99 ngx_feature_run=yes
|
|
100 ngx_feature_incs="#include <sys/event.h>
|
505
|
101 #include <sys/time.h>"
|
258
|
102 ngx_feature_path=
|
168
|
103 ngx_feature_libs=
|
|
104 ngx_feature_test="int kq;
|
|
105 struct kevent kev;
|
|
106 struct timespec ts;
|
|
107
|
|
108 if ((kq = kqueue()) == -1) return 1;
|
|
109
|
|
110 kev.ident = 0;
|
|
111 kev.filter = EVFILT_TIMER;
|
|
112 kev.flags = EV_ADD|EV_ENABLE;
|
|
113 kev.fflags = 0;
|
|
114 kev.data = 1000;
|
|
115 kev.udata = 0;
|
|
116
|
|
117 ts.tv_sec = 0;
|
|
118 ts.tv_nsec = 0;
|
|
119
|
|
120 if (kevent(kq, &kev, 1, &kev, 1, &ts) == -1) return 1;
|
|
121
|
|
122 if (kev.flags & EV_ERROR) return 1;"
|
|
123
|
|
124 . auto/feature
|
64
|
125 fi
|
|
126 fi
|
|
127
|
168
|
128
|
|
129 if [ "$NGX_SYSTEM" = "NetBSD" ]; then
|
112
|
130
|
64
|
131 # NetBSD 2.0 incompatibly defines kevent.udata as "intptr_t"
|
|
132
|
|
133 cat << END >> $NGX_AUTO_CONFIG_H
|
|
134
|
|
135 #define NGX_KQUEUE_UDATA_T
|
|
136
|
|
137 END
|
|
138
|
|
139 else
|
|
140 cat << END >> $NGX_AUTO_CONFIG_H
|
|
141
|
|
142 #define NGX_KQUEUE_UDATA_T (void *)
|
|
143
|
|
144 END
|
|
145
|
|
146 fi
|
|
147
|
|
148
|
|
149 ngx_feature="crypt()"
|
|
150 ngx_feature_name=
|
|
151 ngx_feature_run=no
|
|
152 ngx_feature_incs=
|
258
|
153 ngx_feature_path=
|
64
|
154 ngx_feature_libs=
|
|
155 ngx_feature_test="crypt(\"test\", \"salt\");"
|
|
156 . auto/feature
|
|
157
|
|
158
|
|
159 if [ $ngx_found = no ]; then
|
|
160
|
|
161 ngx_feature="crypt() in libcrypt"
|
258
|
162 ngx_feature_name=
|
|
163 ngx_feature_run=no
|
|
164 ngx_feature_incs=
|
|
165 ngx_feature_path=
|
64
|
166 ngx_feature_libs=-lcrypt
|
|
167 . auto/feature
|
|
168
|
|
169 if [ $ngx_found = yes ]; then
|
|
170 CRYPT_LIB="-lcrypt"
|
|
171 fi
|
|
172 fi
|
390
|
173
|
|
174
|
575
|
175 ngx_feature="F_READAHEAD"
|
|
176 ngx_feature_name="NGX_HAVE_F_READAHEAD"
|
|
177 ngx_feature_run=no
|
|
178 ngx_feature_incs="#include <fcntl.h>"
|
|
179 ngx_feature_path=
|
|
180 ngx_feature_libs=
|
|
181 ngx_feature_test="fcntl(0, F_READAHEAD, 1);"
|
|
182 . auto/feature
|
|
183
|
|
184
|
|
185 ngx_feature="posix_fadvise()"
|
|
186 ngx_feature_name="NGX_HAVE_POSIX_FADVISE"
|
|
187 ngx_feature_run=no
|
|
188 ngx_feature_incs="#include <fcntl.h>"
|
|
189 ngx_feature_path=
|
|
190 ngx_feature_libs=
|
|
191 ngx_feature_test="posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL);"
|
|
192 . auto/feature
|
|
193
|
|
194
|
390
|
195 ngx_feature="O_DIRECT"
|
|
196 ngx_feature_name="NGX_HAVE_O_DIRECT"
|
|
197 ngx_feature_run=no
|
|
198 ngx_feature_incs="#include <fcntl.h>"
|
|
199 ngx_feature_path=
|
|
200 ngx_feature_libs=
|
|
201 ngx_feature_test="fcntl(0, F_SETFL, O_DIRECT);"
|
|
202 . auto/feature
|
|
203
|
|
204
|
437
|
205 if [ $ngx_found = yes -a "$NGX_SYSTEM" = "Linux" ]; then
|
|
206 have=NGX_HAVE_ALIGNED_DIRECTIO . auto/have
|
|
207 fi
|
|
208
|
390
|
209 ngx_feature="F_NOCACHE"
|
|
210 ngx_feature_name="NGX_HAVE_F_NOCACHE"
|
|
211 ngx_feature_run=no
|
|
212 ngx_feature_incs="#include <fcntl.h>"
|
|
213 ngx_feature_path=
|
|
214 ngx_feature_libs=
|
|
215 ngx_feature_test="fcntl(0, F_NOCACHE, 1);"
|
|
216 . auto/feature
|
392
|
217
|
|
218
|
|
219 ngx_feature="directio()"
|
|
220 ngx_feature_name="NGX_HAVE_DIRECTIO"
|
|
221 ngx_feature_run=no
|
|
222 ngx_feature_incs="#include <sys/types.h>
|
|
223 #include <sys/fcntl.h>"
|
|
224 ngx_feature_path=
|
|
225 ngx_feature_libs=
|
|
226 ngx_feature_test="directio(0, DIRECTIO_ON);"
|
|
227 . auto/feature
|
507
|
228
|
|
229
|
|
230 ngx_feature="statfs()"
|
|
231 ngx_feature_name="NGX_HAVE_STATFS"
|
|
232 ngx_feature_run=no
|
509
|
233 ngx_feature_incs="$NGX_INCLUDE_SYS_PARAM_H
|
|
234 $NGX_INCLUDE_SYS_MOUNT_H
|
507
|
235 $NGX_INCLUDE_SYS_VFS_H"
|
|
236 ngx_feature_path=
|
|
237 ngx_feature_libs=
|
|
238 ngx_feature_test="struct statfs fs;
|
|
239 statfs(NULL, &fs);"
|
|
240 . auto/feature
|
|
241
|
|
242
|
|
243 ngx_feature="statvfs()"
|
|
244 ngx_feature_name="NGX_HAVE_STATVFS"
|
|
245 ngx_feature_run=no
|
|
246 ngx_feature_incs="#include <sys/types.h>
|
|
247 #include <sys/statvfs.h>"
|
|
248 ngx_feature_path=
|
|
249 ngx_feature_libs=
|
|
250 ngx_feature_test="struct statvfs fs;
|
|
251 statvfs(NULL, &fs);"
|
|
252 . auto/feature
|
534
|
253
|
|
254
|
|
255 ngx_feature="dlopen()"
|
|
256 ngx_feature_name=
|
|
257 ngx_feature_run=no
|
|
258 ngx_feature_incs="#include <dlfcn.h>"
|
|
259 ngx_feature_path=
|
|
260 ngx_feature_libs=
|
|
261 ngx_feature_test="dlopen(NULL, 0)"
|
|
262 . auto/feature
|
|
263
|
|
264
|
|
265 if [ $ngx_found != yes ]; then
|
|
266
|
|
267 ngx_feature="dlopen() in libdl"
|
|
268 ngx_feature_libs="-ldl"
|
|
269 . auto/feature
|
|
270
|
|
271 if [ $ngx_found = yes ]; then
|
|
272 NGX_LIBDL="-ldl"
|
|
273 fi
|
|
274 fi
|
538
|
275
|
|
276
|
|
277 ngx_feature="sched_yield()"
|
|
278 ngx_feature_name="NGX_HAVE_SCHED_YIELD"
|
|
279 ngx_feature_run=no
|
|
280 ngx_feature_incs="#include <sched.h>"
|
|
281 ngx_feature_path=
|
|
282 ngx_feature_libs=
|
|
283 ngx_feature_test="sched_yield()"
|
|
284 . auto/feature
|
|
285
|
|
286
|
|
287 if [ $ngx_found != yes ]; then
|
|
288
|
|
289 ngx_feature="sched_yield() in librt"
|
|
290 ngx_feature_libs="-lrt"
|
|
291 . auto/feature
|
|
292
|
|
293 if [ $ngx_found = yes ]; then
|
|
294 CORE_LIBS="$CORE_LIBS -lrt"
|
|
295 fi
|
|
296 fi
|
558
|
297
|
627
|
298 ngx_feature="SO_SETFIB"
|
|
299 ngx_feature_name="NGX_HAVE_SETFIB"
|
|
300 ngx_feature_run=no
|
|
301 ngx_feature_incs="#include <sys/socket.h>"
|
|
302 ngx_feature_path=
|
|
303 ngx_feature_libs=
|
|
304 ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_SETFIB, NULL, 4)"
|
|
305 . auto/feature
|
|
306
|
558
|
307
|
|
308 if [ $NGX_FILE_AIO = YES ]; then
|
566
|
309
|
558
|
310 ngx_feature="kqueue AIO support"
|
|
311 ngx_feature_name="NGX_HAVE_FILE_AIO"
|
|
312 ngx_feature_run=no
|
|
313 ngx_feature_incs="#include <aio.h>"
|
|
314 ngx_feature_path=
|
|
315 ngx_feature_libs=
|
|
316 ngx_feature_test="int n; struct aiocb iocb;
|
|
317 iocb.aio_sigevent.sigev_notify = SIGEV_KEVENT;
|
|
318 n = aio_read(&iocb)"
|
|
319 . auto/feature
|
|
320
|
|
321 if [ $ngx_found = yes ]; then
|
|
322 CORE_SRCS="$CORE_SRCS $FILE_AIO_SRCS"
|
566
|
323
|
|
324 elif [ $ngx_found = no ]; then
|
|
325
|
|
326 ngx_feature="Linux AIO support"
|
|
327 ngx_feature_name="NGX_HAVE_FILE_AIO"
|
|
328 ngx_feature_run=no
|
|
329 ngx_feature_incs="#include <linux/aio_abi.h>
|
|
330 #include <sys/syscall.h>"
|
|
331 ngx_feature_path=
|
|
332 ngx_feature_libs=
|
|
333 ngx_feature_test="int n = SYS_eventfd;
|
|
334 struct iocb iocb;
|
|
335 iocb.aio_lio_opcode = IOCB_CMD_PREAD;
|
|
336 iocb.aio_flags = IOCB_FLAG_RESFD;
|
|
337 iocb.aio_resfd = -1;"
|
|
338 . auto/feature
|
|
339
|
|
340 if [ $ngx_found = yes ]; then
|
|
341 have=NGX_HAVE_EVENTFD . auto/have
|
|
342 CORE_SRCS="$CORE_SRCS $LINUX_AIO_SRCS"
|
|
343
|
|
344 else
|
|
345 cat << END
|
|
346
|
|
347 $0: no supported file AIO was found
|
|
348 Currently file AIO is supported on FreeBSD 4.3+ and Linux 2.6.22+ only
|
|
349
|
|
350 END
|
|
351 exit 1
|
|
352 fi
|
558
|
353 fi
|
|
354 fi
|