blob: 502c27e19a1b17da114f7d88fb7761089ded6676 [file] [log] [blame]
Igor Sysoeva8fa0a62003-11-25 20:44:56 +00001
Igor Sysoevff8da912004-09-29 16:00:49 +00002# Copyright (C) Igor Sysoev
3
4
Igor Sysoev02025fd2005-01-18 13:03:58 +00005have=NGX_HAVE_UNIX_DOMAIN . auto/have
6
Igor Sysoevd3283ff2005-12-05 13:18:09 +00007ngx_feature_libs=
Igor Sysoeva8fa0a62003-11-25 20:44:56 +00008
Igor Sysoevd039a2e2005-02-22 14:40:13 +00009
Igor Sysoevc0f8d912003-11-26 15:42:18 +000010# C types
11
Igor Sysoev48fef662004-02-24 17:31:46 +000012ngx_type="int"; . auto/types/sizeof
Igor Sysoeva8fa0a62003-11-25 20:44:56 +000013
Igor Sysoev48fef662004-02-24 17:31:46 +000014ngx_type="long"; . auto/types/sizeof
Igor Sysoeva8fa0a62003-11-25 20:44:56 +000015
Igor Sysoev48fef662004-02-24 17:31:46 +000016ngx_type="long long"; . auto/types/sizeof
Igor Sysoeva8fa0a62003-11-25 20:44:56 +000017
Igor Sysoevc0247302004-06-27 18:01:57 +000018ngx_type="void *"; . auto/types/sizeof; ngx_ptr_size=$ngx_size
Igor Sysoevd039a2e2005-02-22 14:40:13 +000019ngx_param=NGX_PTR_SIZE; ngx_value=$ngx_size; . auto/types/value
Igor Sysoeva8fa0a62003-11-25 20:44:56 +000020
21
Igor Sysoev7af6b162004-02-09 07:46:43 +000022# POSIX types
Igor Sysoevc0f8d912003-11-26 15:42:18 +000023
Igor Sysoevbb28b6d2006-07-11 13:20:19 +000024case "$NGX_AUTO_CONFIG_H" in
25 /*)
26 NGX_INCLUDE_AUTO_CONFIG_H="#include \"$NGX_AUTO_CONFIG_H\""
27 ;;
28 *)
29 NGX_INCLUDE_AUTO_CONFIG_H="#include \"../$NGX_AUTO_CONFIG_H\""
30 ;;
31esac
Igor Sysoevc0f8d912003-11-26 15:42:18 +000032
Igor Sysoevc0247302004-06-27 18:01:57 +000033ngx_type="uint64_t"; ngx_types="u_int64_t"; . auto/types/typedef
Igor Sysoevc0f8d912003-11-26 15:42:18 +000034
Igor Sysoevc0247302004-06-27 18:01:57 +000035ngx_type="sig_atomic_t"; ngx_types="int"; . auto/types/typedef
36. auto/types/sizeof
Igor Sysoevb1dfe472004-12-21 12:30:30 +000037ngx_param=NGX_SIG_ATOMIC_T_SIZE; ngx_value=$ngx_size; . auto/types/value
Igor Sysoev92602942004-02-05 16:58:36 +000038
Igor Sysoeve31e90b2005-05-19 13:25:22 +000039ngx_type="socklen_t"; ngx_types="int"; . auto/types/typedef
Igor Sysoevc0f8d912003-11-26 15:42:18 +000040
Igor Sysoevc0247302004-06-27 18:01:57 +000041ngx_type="in_addr_t"; ngx_types="uint32_t"; . auto/types/typedef
Igor Sysoevc0f8d912003-11-26 15:42:18 +000042
Igor Sysoev59cf56c2004-09-07 15:29:22 +000043ngx_type="in_port_t"; ngx_types="u_short"; . auto/types/typedef
44
Igor Sysoevc0247302004-06-27 18:01:57 +000045ngx_type="rlim_t"; ngx_types="int"; . auto/types/typedef
Igor Sysoevc0f8d912003-11-26 15:42:18 +000046
47. auto/types/uintptr_t
48
Igor Sysoevc0247302004-06-27 18:01:57 +000049. auto/endianess
50
Igor Sysoev42b12b32004-12-02 18:40:46 +000051ngx_type="size_t"; . auto/types/sizeof
Igor Sysoevb1dfe472004-12-21 12:30:30 +000052ngx_param=NGX_MAX_SIZE_T_VALUE; ngx_value=$ngx_max_value; . auto/types/value
53ngx_param=NGX_SIZE_T_LEN; ngx_value=$ngx_max_len; . auto/types/value
Igor Sysoevc0f8d912003-11-26 15:42:18 +000054
Igor Sysoev42b12b32004-12-02 18:40:46 +000055ngx_type="off_t"; . auto/types/sizeof
Igor Sysoevb1dfe472004-12-21 12:30:30 +000056ngx_param=NGX_MAX_OFF_T_VALUE; ngx_value=$ngx_max_value; . auto/types/value
57ngx_param=NGX_OFF_T_LEN; ngx_value=$ngx_max_len; . auto/types/value
Igor Sysoevc0f8d912003-11-26 15:42:18 +000058
Igor Sysoev42b12b32004-12-02 18:40:46 +000059ngx_type="time_t"; . auto/types/sizeof
Igor Sysoevb1dfe472004-12-21 12:30:30 +000060ngx_param=NGX_TIME_T_SIZE; ngx_value=$ngx_size; . auto/types/value
61ngx_param=NGX_TIME_T_LEN; ngx_value=$ngx_max_len; . auto/types/value
Igor Sysoeva8fa0a62003-11-25 20:44:56 +000062
63
Igor Sysoev415b1ce2004-06-17 17:18:53 +000064# syscalls, libc calls and some features
65
Igor Sysoevc0edbcc2004-10-21 15:34:38 +000066
Igor Sysoeva35eacc2009-02-21 07:02:02 +000067if [ $NGX_IPV6 = YES ]; then
68 ngx_feature="AF_INET6"
69 ngx_feature_name="NGX_HAVE_INET6"
70 ngx_feature_run=no
71 ngx_feature_incs="#include <sys/socket.h>
72 #include <netinet/in.h>
73 #include <arpa/inet.h>"
74 ngx_feature_path=
75 ngx_feature_libs=
76 ngx_feature_test="struct sockaddr_in6 sin6;
77 sin6.sin6_family = AF_INET6;"
78 . auto/feature
79fi
80
81
Igor Sysoevd43bee82004-11-20 19:52:20 +000082ngx_feature="setproctitle()"
Igor Sysoevf6906042004-11-25 16:17:31 +000083ngx_feature_name="NGX_HAVE_SETPROCTITLE"
Igor Sysoevd43bee82004-11-20 19:52:20 +000084ngx_feature_run=no
85ngx_feature_incs=
Igor Sysoev0ec09f92006-11-27 11:07:09 +000086ngx_feature_path=
Igor Sysoev899b44e2005-05-12 14:58:06 +000087ngx_feature_libs=$NGX_SETPROCTITLE_LIB
Igor Sysoevd43bee82004-11-20 19:52:20 +000088ngx_feature_test="setproctitle(\"test\");"
89. auto/feature
90
91
Igor Sysoevc0edbcc2004-10-21 15:34:38 +000092ngx_feature="pread()"
Igor Sysoevf6906042004-11-25 16:17:31 +000093ngx_feature_name="NGX_HAVE_PREAD"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +000094ngx_feature_run=no
95ngx_feature_incs=
Igor Sysoev0ec09f92006-11-27 11:07:09 +000096ngx_feature_path=
Igor Sysoev415b1ce2004-06-17 17:18:53 +000097ngx_feature_libs=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +000098ngx_feature_test="char buf[1]; ssize_t n; n = pread(0, buf, 1, 0)"
99. auto/feature
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000100
Igor Sysoeva8fa0a62003-11-25 20:44:56 +0000101
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000102ngx_feature="pwrite()"
Igor Sysoevf6906042004-11-25 16:17:31 +0000103ngx_feature_name="NGX_HAVE_PWRITE"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000104ngx_feature_run=no
105ngx_feature_incs=
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000106ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000107ngx_feature_libs=
108ngx_feature_test="char buf[1]; ssize_t n; n = pwrite(1, buf, 1, 0)"
109. auto/feature
Igor Sysoeva8fa0a62003-11-25 20:44:56 +0000110
111
Igor Sysoev7f31a202010-11-25 11:04:03 +0000112ngx_feature="sys_nerr"
113ngx_feature_name="NGX_SYS_NERR"
114ngx_feature_run=value
115ngx_feature_incs='#include <stdio.h>'
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000116ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000117ngx_feature_libs=
Igor Sysoev7f31a202010-11-25 11:04:03 +0000118ngx_feature_test='printf("%d", sys_nerr);'
Igor Sysoev9eaabc62010-03-12 11:15:26 +0000119. auto/feature
120
121
Igor Sysoevbb6bd802010-12-06 14:49:17 +0000122if [ $ngx_found = no ]; then
Igor Sysoev2369c142010-12-06 14:50:27 +0000123
Igor Sysoevbb6bd802010-12-06 14:49:17 +0000124 # Cygiwn defines _sys_nerr
125 ngx_feature="_sys_nerr"
126 ngx_feature_name="NGX_SYS_NERR"
127 ngx_feature_run=value
128 ngx_feature_incs='#include <errno.h>
129 #include <stdio.h>'
130 ngx_feature_path=
131 ngx_feature_libs=
132 ngx_feature_test='printf("%d", _sys_nerr);'
133 . auto/feature
134fi
Igor Sysoevdc9d7fb2010-12-01 19:22:37 +0000135
136
Igor Sysoevadc70832010-12-06 14:51:20 +0000137if [ $ngx_found = no ]; then
138
139 # Solaris has no sys_nerr
140 ngx_feature='maximum errno'
141 ngx_feature_name=NGX_SYS_NERR
142 ngx_feature_run=value
143 ngx_feature_incs='#include <errno.h>
Igor Sysoev95052772011-05-04 12:21:25 +0000144 #include <string.h>
Igor Sysoevadc70832010-12-06 14:51:20 +0000145 #include <stdio.h>'
146 ngx_feature_path=
147 ngx_feature_libs=
148 ngx_feature_test='int n;
Igor Sysoev1143d002011-04-23 13:15:56 +0000149 char *p;
Igor Sysoevadc70832010-12-06 14:51:20 +0000150 for (n = 1; n < 1000; n++) {
151 errno = 0;
Igor Sysoev1143d002011-04-23 13:15:56 +0000152 p = strerror(n);
153 if (errno == EINVAL
154 || p == NULL
155 || strncmp(p, "Unknown error", 13) == 0)
156 {
Igor Sysoevadc70832010-12-06 14:51:20 +0000157 printf("%d", n);
158 return 0;
159 }
160 }'
161 . auto/feature
162fi
163
164
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000165ngx_feature="localtime_r()"
Igor Sysoevf6906042004-11-25 16:17:31 +0000166ngx_feature_name="NGX_HAVE_LOCALTIME_R"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000167ngx_feature_run=no
168ngx_feature_incs="#include <time.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000169ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000170ngx_feature_libs=
171ngx_feature_test="struct tm t; time_t c=0; localtime_r(&c, &t)"
172. auto/feature
Igor Sysoevdc867cd2003-12-14 20:10:27 +0000173
174
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000175ngx_feature="posix_memalign()"
Igor Sysoevf6906042004-11-25 16:17:31 +0000176ngx_feature_name="NGX_HAVE_POSIX_MEMALIGN"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000177ngx_feature_run=no
178ngx_feature_incs="#include <stdlib.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000179ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000180ngx_feature_libs=
181ngx_feature_test="void *p; int n; n = posix_memalign(&p, 4096, 4096)"
182. auto/feature
Igor Sysoevc7a2f682004-02-10 16:23:38 +0000183
184
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000185ngx_feature="memalign()"
Igor Sysoevf6906042004-11-25 16:17:31 +0000186ngx_feature_name="NGX_HAVE_MEMALIGN"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000187ngx_feature_run=no
188ngx_feature_incs="#include <stdlib.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000189ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000190ngx_feature_libs=
191ngx_feature_test="void *p; p = memalign(4096, 4096)"
192. auto/feature
Igor Sysoev0ab91b92004-06-06 19:49:18 +0000193
194
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000195ngx_feature="mmap(MAP_ANON|MAP_SHARED)"
Igor Sysoevf6906042004-11-25 16:17:31 +0000196ngx_feature_name="NGX_HAVE_MAP_ANON"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000197ngx_feature_run=yes
198ngx_feature_incs="#include <sys/mman.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000199ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000200ngx_feature_libs=
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000201ngx_feature_test="void *p;
202 p = mmap(NULL, 4096, PROT_READ|PROT_WRITE,
203 MAP_ANON|MAP_SHARED, -1, 0);
204 if (p == MAP_FAILED) return 1;"
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000205. auto/feature
Igor Sysoevd09f7a12004-06-15 17:47:16 +0000206
207
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000208ngx_feature='mmap("/dev/zero", MAP_SHARED)'
Igor Sysoevf6906042004-11-25 16:17:31 +0000209ngx_feature_name="NGX_HAVE_MAP_DEVZERO"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000210ngx_feature_run=yes
211ngx_feature_incs="#include <sys/mman.h>
Igor Sysoev92d543d2009-03-23 20:26:33 +0000212 #include <sys/stat.h>
213 #include <fcntl.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000214ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000215ngx_feature_libs=
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000216ngx_feature_test='void *p; int fd;
217 fd = open("/dev/zero", O_RDWR);
218 p = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
219 if (p == MAP_FAILED) return 1;'
220. auto/feature
221
222
223ngx_feature="System V shared memory"
Igor Sysoevf6906042004-11-25 16:17:31 +0000224ngx_feature_name="NGX_HAVE_SYSVSHM"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000225ngx_feature_run=yes
226ngx_feature_incs="#include <sys/ipc.h>
Igor Sysoev92d543d2009-03-23 20:26:33 +0000227 #include <sys/shm.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000228ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000229ngx_feature_libs=
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000230ngx_feature_test="int id;
231 id = shmget(IPC_PRIVATE, 4096, (SHM_R|SHM_W|IPC_CREAT));
232 if (id == -1) return 1;
233 shmctl(id, IPC_RMID, NULL);"
234. auto/feature
235
236
Igor Sysoeve2c8ad72011-05-10 11:39:13 +0000237ngx_feature="POSIX semaphores"
238ngx_feature_name="NGX_HAVE_POSIX_SEM"
239ngx_feature_run=yes
240ngx_feature_incs="#include <semaphore.h>"
241ngx_feature_path=
242ngx_feature_libs=
243ngx_feature_test="sem_t sem;
244 if (sem_init(&sem, 1, 0) == -1) return 1;
245 sem_destroy(&sem);"
246. auto/feature
247
248
Igor Sysoev0462a612011-05-31 08:17:27 +0000249if [ $ngx_found = no ]; then
250
251 # Linux has POSIX semaphores in libpthread
252 ngx_feature="POSIX semaphores in libpthread"
253 ngx_feature_libs=-lpthread
254 . auto/feature
255
256 if [ $ngx_found = yes ]; then
257 CORE_LIBS="$CORE_LIBS -lpthread"
258 fi
259fi
260
261
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000262ngx_feature="struct msghdr.msg_control"
Igor Sysoevf6906042004-11-25 16:17:31 +0000263ngx_feature_name="NGX_HAVE_MSGHDR_MSG_CONTROL"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000264ngx_feature_run=no
265ngx_feature_incs="#include <sys/socket.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000266ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000267ngx_feature_libs=
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000268ngx_feature_test="struct msghdr msg; msg.msg_control = NULL"
269. auto/feature
270
271
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000272ngx_feature="ioctl(FIONBIO)"
Igor Sysoevf6906042004-11-25 16:17:31 +0000273ngx_feature_name="NGX_HAVE_FIONBIO"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000274ngx_feature_run=no
275ngx_feature_incs="#include <sys/ioctl.h>
Igor Sysoev92d543d2009-03-23 20:26:33 +0000276 $NGX_INCLUDE_SYS_FILIO_H"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000277ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000278ngx_feature_libs=
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000279ngx_feature_test="int i; i = FIONBIO"
280. auto/feature
281
282
283ngx_feature="struct tm.tm_gmtoff"
Igor Sysoevf6906042004-11-25 16:17:31 +0000284ngx_feature_name="NGX_HAVE_GMTOFF"
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000285ngx_feature_run=no
286ngx_feature_incs="#include <time.h>"
Igor Sysoev0ec09f92006-11-27 11:07:09 +0000287ngx_feature_path=
Igor Sysoevc0edbcc2004-10-21 15:34:38 +0000288ngx_feature_libs=
Igor Sysoev415b1ce2004-06-17 17:18:53 +0000289ngx_feature_test="struct tm tm; tm.tm_gmtoff = 0"
290. auto/feature
Igor Sysoevdfc8dad2008-09-05 15:43:34 +0000291
292
293ngx_feature="struct dirent.d_namlen"
294ngx_feature_name="NGX_HAVE_D_NAMLEN"
295ngx_feature_run=no
296ngx_feature_incs="#include <dirent.h>"
297ngx_feature_path=
298ngx_feature_libs=
299ngx_feature_test="struct dirent dir; dir.d_namlen = 0"
300. auto/feature
301
302
303ngx_feature="struct dirent.d_type"
304ngx_feature_name="NGX_HAVE_D_TYPE"
305ngx_feature_run=no
306ngx_feature_incs="#include <dirent.h>"
307ngx_feature_path=
308ngx_feature_libs=
309ngx_feature_test="struct dirent dir; dir.d_type = DT_REG"
310. auto/feature