xref: /f-stack/app/nginx-1.16.1/auto/os/linux (revision 3da8d17d)
1*3da8d17dSfengbojiang(姜凤波)
2*3da8d17dSfengbojiang(姜凤波)# Copyright (C) Igor Sysoev
3*3da8d17dSfengbojiang(姜凤波)# Copyright (C) Nginx, Inc.
4*3da8d17dSfengbojiang(姜凤波)
5*3da8d17dSfengbojiang(姜凤波)
6*3da8d17dSfengbojiang(姜凤波)have=NGX_LINUX . auto/have_headers
7*3da8d17dSfengbojiang(姜凤波)
8*3da8d17dSfengbojiang(姜凤波)CORE_INCS="$UNIX_INCS"
9*3da8d17dSfengbojiang(姜凤波)CORE_DEPS="$UNIX_DEPS $LINUX_DEPS"
10*3da8d17dSfengbojiang(姜凤波)CORE_SRCS="$UNIX_SRCS $LINUX_SRCS"
11*3da8d17dSfengbojiang(姜凤波)
12*3da8d17dSfengbojiang(姜凤波)ngx_spacer='
13*3da8d17dSfengbojiang(姜凤波)'
14*3da8d17dSfengbojiang(姜凤波)
15*3da8d17dSfengbojiang(姜凤波)cc_aux_flags="$CC_AUX_FLAGS"
16*3da8d17dSfengbojiang(姜凤波)CC_AUX_FLAGS="$cc_aux_flags -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64"
17*3da8d17dSfengbojiang(姜凤波)
18*3da8d17dSfengbojiang(姜凤波)
19*3da8d17dSfengbojiang(姜凤波)# Linux kernel version
20*3da8d17dSfengbojiang(姜凤波)
21*3da8d17dSfengbojiang(姜凤波)version=$((`uname -r \
22*3da8d17dSfengbojiang(姜凤波)    | sed -n -e 's/^\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/ \
23*3da8d17dSfengbojiang(姜凤波)                                                 \1*256*256+\2*256+\3/p' \
24*3da8d17dSfengbojiang(姜凤波)             -e 's/^\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\1*256*256+\2*256/p'`))
25*3da8d17dSfengbojiang(姜凤波)
26*3da8d17dSfengbojiang(姜凤波)version=${version:-0}
27*3da8d17dSfengbojiang(姜凤波)
28*3da8d17dSfengbojiang(姜凤波)
29*3da8d17dSfengbojiang(姜凤波)# posix_fadvise64() had been implemented in 2.5.60
30*3da8d17dSfengbojiang(姜凤波)
31*3da8d17dSfengbojiang(姜凤波)if [ $version -lt 132412 ]; then
32*3da8d17dSfengbojiang(姜凤波)    have=NGX_HAVE_POSIX_FADVISE . auto/nohave
33*3da8d17dSfengbojiang(姜凤波)fi
34*3da8d17dSfengbojiang(姜凤波)
35*3da8d17dSfengbojiang(姜凤波)# epoll, EPOLLET version
36*3da8d17dSfengbojiang(姜凤波)
37*3da8d17dSfengbojiang(姜凤波)ngx_feature="epoll"
38*3da8d17dSfengbojiang(姜凤波)ngx_feature_name="NGX_HAVE_EPOLL"
39*3da8d17dSfengbojiang(姜凤波)ngx_feature_run=yes
40*3da8d17dSfengbojiang(姜凤波)ngx_feature_incs="#include <sys/epoll.h>"
41*3da8d17dSfengbojiang(姜凤波)ngx_feature_path=
42*3da8d17dSfengbojiang(姜凤波)ngx_feature_libs=
43*3da8d17dSfengbojiang(姜凤波)ngx_feature_test="int efd = 0;
44*3da8d17dSfengbojiang(姜凤波)                  struct epoll_event ee;
45*3da8d17dSfengbojiang(姜凤波)                  ee.events = EPOLLIN|EPOLLOUT|EPOLLET;
46*3da8d17dSfengbojiang(姜凤波)                  ee.data.ptr = NULL;
47*3da8d17dSfengbojiang(姜凤波)                  (void) ee;
48*3da8d17dSfengbojiang(姜凤波)                  efd = epoll_create(100);
49*3da8d17dSfengbojiang(姜凤波)                  if (efd == -1) return 1;"
50*3da8d17dSfengbojiang(姜凤波). auto/feature
51*3da8d17dSfengbojiang(姜凤波)
52*3da8d17dSfengbojiang(姜凤波)if [ $ngx_found = yes ]; then
53*3da8d17dSfengbojiang(姜凤波)    have=NGX_HAVE_CLEAR_EVENT . auto/have
54*3da8d17dSfengbojiang(姜凤波)    CORE_SRCS="$CORE_SRCS $EPOLL_SRCS"
55*3da8d17dSfengbojiang(姜凤波)    EVENT_MODULES="$EVENT_MODULES $EPOLL_MODULE"
56*3da8d17dSfengbojiang(姜凤波)    EVENT_FOUND=YES
57*3da8d17dSfengbojiang(姜凤波)
58*3da8d17dSfengbojiang(姜凤波)
59*3da8d17dSfengbojiang(姜凤波)    # EPOLLRDHUP appeared in Linux 2.6.17, glibc 2.8
60*3da8d17dSfengbojiang(姜凤波)
61*3da8d17dSfengbojiang(姜凤波)    ngx_feature="EPOLLRDHUP"
62*3da8d17dSfengbojiang(姜凤波)    ngx_feature_name="NGX_HAVE_EPOLLRDHUP"
63*3da8d17dSfengbojiang(姜凤波)    ngx_feature_run=no
64*3da8d17dSfengbojiang(姜凤波)    ngx_feature_incs="#include <sys/epoll.h>"
65*3da8d17dSfengbojiang(姜凤波)    ngx_feature_path=
66*3da8d17dSfengbojiang(姜凤波)    ngx_feature_libs=
67*3da8d17dSfengbojiang(姜凤波)    ngx_feature_test="int efd = 0, fd = 0;
68*3da8d17dSfengbojiang(姜凤波)                      struct epoll_event ee;
69*3da8d17dSfengbojiang(姜凤波)                      ee.events = EPOLLIN|EPOLLRDHUP|EPOLLET;
70*3da8d17dSfengbojiang(姜凤波)                      ee.data.ptr = NULL;
71*3da8d17dSfengbojiang(姜凤波)                      epoll_ctl(efd, EPOLL_CTL_ADD, fd, &ee)"
72*3da8d17dSfengbojiang(姜凤波)    . auto/feature
73*3da8d17dSfengbojiang(姜凤波)
74*3da8d17dSfengbojiang(姜凤波)
75*3da8d17dSfengbojiang(姜凤波)    # EPOLLEXCLUSIVE appeared in Linux 4.5, glibc 2.24
76*3da8d17dSfengbojiang(姜凤波)
77*3da8d17dSfengbojiang(姜凤波)    ngx_feature="EPOLLEXCLUSIVE"
78*3da8d17dSfengbojiang(姜凤波)    ngx_feature_name="NGX_HAVE_EPOLLEXCLUSIVE"
79*3da8d17dSfengbojiang(姜凤波)    ngx_feature_run=no
80*3da8d17dSfengbojiang(姜凤波)    ngx_feature_incs="#include <sys/epoll.h>"
81*3da8d17dSfengbojiang(姜凤波)    ngx_feature_path=
82*3da8d17dSfengbojiang(姜凤波)    ngx_feature_libs=
83*3da8d17dSfengbojiang(姜凤波)    ngx_feature_test="int efd = 0, fd = 0;
84*3da8d17dSfengbojiang(姜凤波)                      struct epoll_event ee;
85*3da8d17dSfengbojiang(姜凤波)                      ee.events = EPOLLIN|EPOLLEXCLUSIVE;
86*3da8d17dSfengbojiang(姜凤波)                      ee.data.ptr = NULL;
87*3da8d17dSfengbojiang(姜凤波)                      epoll_ctl(efd, EPOLL_CTL_ADD, fd, &ee)"
88*3da8d17dSfengbojiang(姜凤波)#    . auto/feature
89*3da8d17dSfengbojiang(姜凤波)fi
90*3da8d17dSfengbojiang(姜凤波)
91*3da8d17dSfengbojiang(姜凤波)
92*3da8d17dSfengbojiang(姜凤波)# O_PATH and AT_EMPTY_PATH were introduced in 2.6.39, glibc 2.14
93*3da8d17dSfengbojiang(姜凤波)
94*3da8d17dSfengbojiang(姜凤波)ngx_feature="O_PATH"
95*3da8d17dSfengbojiang(姜凤波)ngx_feature_name="NGX_HAVE_O_PATH"
96*3da8d17dSfengbojiang(姜凤波)ngx_feature_run=no
97*3da8d17dSfengbojiang(姜凤波)ngx_feature_incs="#include <sys/types.h>
98*3da8d17dSfengbojiang(姜凤波)                  #include <sys/stat.h>
99*3da8d17dSfengbojiang(姜凤波)                  #include <fcntl.h>"
100*3da8d17dSfengbojiang(姜凤波)ngx_feature_path=
101*3da8d17dSfengbojiang(姜凤波)ngx_feature_libs=
102*3da8d17dSfengbojiang(姜凤波)ngx_feature_test="int fd; struct stat sb;
103*3da8d17dSfengbojiang(姜凤波)                  fd = openat(AT_FDCWD, \".\", O_PATH|O_DIRECTORY|O_NOFOLLOW);
104*3da8d17dSfengbojiang(姜凤波)                  if (fstatat(fd, \"\", &sb, AT_EMPTY_PATH) != 0) return 1"
105*3da8d17dSfengbojiang(姜凤波). auto/feature
106*3da8d17dSfengbojiang(姜凤波)
107*3da8d17dSfengbojiang(姜凤波)
108*3da8d17dSfengbojiang(姜凤波)# sendfile()
109*3da8d17dSfengbojiang(姜凤波)
110*3da8d17dSfengbojiang(姜凤波)CC_AUX_FLAGS="$cc_aux_flags -D_GNU_SOURCE"
111*3da8d17dSfengbojiang(姜凤波)ngx_feature="sendfile()"
112*3da8d17dSfengbojiang(姜凤波)ngx_feature_name="NGX_HAVE_SENDFILE"
113*3da8d17dSfengbojiang(姜凤波)ngx_feature_run=yes
114*3da8d17dSfengbojiang(姜凤波)ngx_feature_incs="#include <sys/sendfile.h>
115*3da8d17dSfengbojiang(姜凤波)                  #include <errno.h>"
116*3da8d17dSfengbojiang(姜凤波)ngx_feature_path=
117*3da8d17dSfengbojiang(姜凤波)ngx_feature_libs=
118*3da8d17dSfengbojiang(姜凤波)ngx_feature_test="int s = 0, fd = 1;
119*3da8d17dSfengbojiang(姜凤波)                  ssize_t n; off_t off = 0;
120*3da8d17dSfengbojiang(姜凤波)                  n = sendfile(s, fd, &off, 1);
121*3da8d17dSfengbojiang(姜凤波)                  if (n == -1 && errno == ENOSYS) return 1"
122*3da8d17dSfengbojiang(姜凤波). auto/feature
123*3da8d17dSfengbojiang(姜凤波)
124*3da8d17dSfengbojiang(姜凤波)if [ $ngx_found = yes ]; then
125*3da8d17dSfengbojiang(姜凤波)    CORE_SRCS="$CORE_SRCS $LINUX_SENDFILE_SRCS"
126*3da8d17dSfengbojiang(姜凤波)fi
127*3da8d17dSfengbojiang(姜凤波)
128*3da8d17dSfengbojiang(姜凤波)
129*3da8d17dSfengbojiang(姜凤波)# sendfile64()
130*3da8d17dSfengbojiang(姜凤波)
131*3da8d17dSfengbojiang(姜凤波)CC_AUX_FLAGS="$cc_aux_flags -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64"
132*3da8d17dSfengbojiang(姜凤波)ngx_feature="sendfile64()"
133*3da8d17dSfengbojiang(姜凤波)ngx_feature_name="NGX_HAVE_SENDFILE64"
134*3da8d17dSfengbojiang(姜凤波)ngx_feature_run=yes
135*3da8d17dSfengbojiang(姜凤波)ngx_feature_incs="#include <sys/sendfile.h>
136*3da8d17dSfengbojiang(姜凤波)                  #include <errno.h>"
137*3da8d17dSfengbojiang(姜凤波)ngx_feature_path=
138*3da8d17dSfengbojiang(姜凤波)ngx_feature_libs=
139*3da8d17dSfengbojiang(姜凤波)ngx_feature_test="int s = 0, fd = 1;
140*3da8d17dSfengbojiang(姜凤波)                  ssize_t n; off_t off = 0;
141*3da8d17dSfengbojiang(姜凤波)                  n = sendfile(s, fd, &off, 1);
142*3da8d17dSfengbojiang(姜凤波)                  if (n == -1 && errno == ENOSYS) return 1"
143*3da8d17dSfengbojiang(姜凤波). auto/feature
144*3da8d17dSfengbojiang(姜凤波)
145*3da8d17dSfengbojiang(姜凤波)
146*3da8d17dSfengbojiang(姜凤波)ngx_include="sys/prctl.h"; . auto/include
147*3da8d17dSfengbojiang(姜凤波)
148*3da8d17dSfengbojiang(姜凤波)# prctl(PR_SET_DUMPABLE)
149*3da8d17dSfengbojiang(姜凤波)
150*3da8d17dSfengbojiang(姜凤波)ngx_feature="prctl(PR_SET_DUMPABLE)"
151*3da8d17dSfengbojiang(姜凤波)ngx_feature_name="NGX_HAVE_PR_SET_DUMPABLE"
152*3da8d17dSfengbojiang(姜凤波)ngx_feature_run=yes
153*3da8d17dSfengbojiang(姜凤波)ngx_feature_incs="#include <sys/prctl.h>"
154*3da8d17dSfengbojiang(姜凤波)ngx_feature_path=
155*3da8d17dSfengbojiang(姜凤波)ngx_feature_libs=
156*3da8d17dSfengbojiang(姜凤波)ngx_feature_test="if (prctl(PR_SET_DUMPABLE, 1, 0, 0, 0) == -1) return 1"
157*3da8d17dSfengbojiang(姜凤波). auto/feature
158*3da8d17dSfengbojiang(姜凤波)
159*3da8d17dSfengbojiang(姜凤波)
160*3da8d17dSfengbojiang(姜凤波)# prctl(PR_SET_KEEPCAPS)
161*3da8d17dSfengbojiang(姜凤波)
162*3da8d17dSfengbojiang(姜凤波)ngx_feature="prctl(PR_SET_KEEPCAPS)"
163*3da8d17dSfengbojiang(姜凤波)ngx_feature_name="NGX_HAVE_PR_SET_KEEPCAPS"
164*3da8d17dSfengbojiang(姜凤波)ngx_feature_run=yes
165*3da8d17dSfengbojiang(姜凤波)ngx_feature_incs="#include <sys/prctl.h>"
166*3da8d17dSfengbojiang(姜凤波)ngx_feature_path=
167*3da8d17dSfengbojiang(姜凤波)ngx_feature_libs=
168*3da8d17dSfengbojiang(姜凤波)ngx_feature_test="if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) == -1) return 1"
169*3da8d17dSfengbojiang(姜凤波). auto/feature
170*3da8d17dSfengbojiang(姜凤波)
171*3da8d17dSfengbojiang(姜凤波)
172*3da8d17dSfengbojiang(姜凤波)# capabilities
173*3da8d17dSfengbojiang(姜凤波)
174*3da8d17dSfengbojiang(姜凤波)ngx_feature="capabilities"
175*3da8d17dSfengbojiang(姜凤波)ngx_feature_name="NGX_HAVE_CAPABILITIES"
176*3da8d17dSfengbojiang(姜凤波)ngx_feature_run=no
177*3da8d17dSfengbojiang(姜凤波)ngx_feature_incs="#include <linux/capability.h>
178*3da8d17dSfengbojiang(姜凤波)                  #include <sys/syscall.h>"
179*3da8d17dSfengbojiang(姜凤波)ngx_feature_path=
180*3da8d17dSfengbojiang(姜凤波)ngx_feature_libs=
181*3da8d17dSfengbojiang(姜凤波)ngx_feature_test="struct __user_cap_data_struct    data;
182*3da8d17dSfengbojiang(姜凤波)                  struct __user_cap_header_struct  header;
183*3da8d17dSfengbojiang(姜凤波)
184*3da8d17dSfengbojiang(姜凤波)                  header.version = _LINUX_CAPABILITY_VERSION_1;
185*3da8d17dSfengbojiang(姜凤波)                  data.effective = CAP_TO_MASK(CAP_NET_RAW);
186*3da8d17dSfengbojiang(姜凤波)                  data.permitted = 0;
187*3da8d17dSfengbojiang(姜凤波)
188*3da8d17dSfengbojiang(姜凤波)                  (void) header;
189*3da8d17dSfengbojiang(姜凤波)                  (void) data;
190*3da8d17dSfengbojiang(姜凤波)                  (void) SYS_capset"
191*3da8d17dSfengbojiang(姜凤波). auto/feature
192*3da8d17dSfengbojiang(姜凤波)
193*3da8d17dSfengbojiang(姜凤波)
194*3da8d17dSfengbojiang(姜凤波)# crypt_r()
195*3da8d17dSfengbojiang(姜凤波)
196*3da8d17dSfengbojiang(姜凤波)ngx_feature="crypt_r()"
197*3da8d17dSfengbojiang(姜凤波)ngx_feature_name="NGX_HAVE_GNU_CRYPT_R"
198*3da8d17dSfengbojiang(姜凤波)ngx_feature_run=no
199*3da8d17dSfengbojiang(姜凤波)ngx_feature_incs="#include <crypt.h>"
200*3da8d17dSfengbojiang(姜凤波)ngx_feature_path=
201*3da8d17dSfengbojiang(姜凤波)ngx_feature_libs=-lcrypt
202*3da8d17dSfengbojiang(姜凤波)ngx_feature_test="struct crypt_data  cd;
203*3da8d17dSfengbojiang(姜凤波)                  crypt_r(\"key\", \"salt\", &cd);"
204*3da8d17dSfengbojiang(姜凤波). auto/feature
205*3da8d17dSfengbojiang(姜凤波)
206*3da8d17dSfengbojiang(姜凤波)
207*3da8d17dSfengbojiang(姜凤波)ngx_include="sys/vfs.h";     . auto/include
208*3da8d17dSfengbojiang(姜凤波)
209*3da8d17dSfengbojiang(姜凤波)
210*3da8d17dSfengbojiang(姜凤波)CC_AUX_FLAGS="$cc_aux_flags -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64"
211