xref: /f-stack/app/nginx-1.16.1/auto/os/darwin (revision 3da8d17d)
1
2# Copyright (C) Igor Sysoev
3# Copyright (C) Nginx, Inc.
4
5
6have=NGX_DARWIN . auto/have_headers
7
8CORE_INCS="$UNIX_INCS"
9CORE_DEPS="$UNIX_DEPS $DARWIN_DEPS"
10CORE_SRCS="$UNIX_SRCS $DARWIN_SRCS"
11
12
13
14ngx_spacer='
15'
16
17MAIN_LINK=
18MODULE_LINK="-shared -Wl,-undefined,dynamic_lookup"
19
20CC_AUX_FLAGS="$CC_AUX_FLAGS -D__APPLE_USE_RFC_3542"
21
22
23# kqueue
24
25echo " + kqueue found"
26have=NGX_HAVE_KQUEUE . auto/have
27have=NGX_HAVE_CLEAR_EVENT . auto/have
28EVENT_MODULES="$EVENT_MODULES $KQUEUE_MODULE"
29CORE_SRCS="$CORE_SRCS $KQUEUE_SRCS"
30EVENT_FOUND=YES
31NGX_KQUEUE_CHECKED=YES
32
33ngx_feature="kqueue's EVFILT_TIMER"
34ngx_feature_name="NGX_HAVE_TIMER_EVENT"
35ngx_feature_run=yes
36ngx_feature_incs="#include <sys/event.h>
37                  #include <sys/time.h>"
38ngx_feature_path=
39ngx_feature_libs=
40ngx_feature_test="int      kq;
41                  struct kevent    kev;
42                  struct timespec  ts;
43
44                  if ((kq = kqueue()) == -1) return 1;
45
46                  kev.ident = 0;
47                  kev.filter = EVFILT_TIMER;
48                  kev.flags = EV_ADD|EV_ENABLE;
49                  kev.fflags = 0;
50                  kev.data = 1000;
51                  kev.udata = 0;
52
53                  ts.tv_sec = 0;
54                  ts.tv_nsec = 0;
55
56                  if (kevent(kq, &kev, 1, &kev, 1, &ts) == -1) return 1;
57
58                  if (kev.flags & EV_ERROR) return 1;"
59
60. auto/feature
61
62
63ngx_feature="Darwin 64-bit kqueue millisecond timeout bug"
64ngx_feature_name=NGX_DARWIN_KEVENT_BUG
65ngx_feature_run=bug
66ngx_feature_incs="#include <sys/event.h>
67                  #include <sys/time.h>"
68ngx_feature_path=
69ngx_feature_libs=
70ngx_feature_test="int  kq;
71                  struct kevent    kev;
72                  struct timespec  ts;
73                  struct timeval   tv, tv0;
74
75                  kq = kqueue();
76
77                  ts.tv_sec = 0;
78                  ts.tv_nsec = 999000000;
79
80                  gettimeofday(&tv, 0);
81                  kevent(kq, NULL, 0, &kev, 1, &ts);
82                  gettimeofday(&tv0, 0);
83                  timersub(&tv0, &tv, &tv);
84
85                  if (tv.tv_sec * 1000000 + tv.tv_usec < 900000) return 1;"
86
87. auto/feature
88
89
90# sendfile()
91
92ngx_feature="sendfile()"
93ngx_feature_name="NGX_HAVE_SENDFILE"
94ngx_feature_run=yes
95ngx_feature_incs="#include <sys/types.h>
96                  #include <sys/socket.h>
97                  #include <sys/uio.h>
98                  #include <sys/errno.h>"
99ngx_feature_path=
100ngx_feature_libs=
101ngx_feature_test="int s = 0, fd = 1;
102                  off_t n; off_t off = 0;
103                  n = sendfile(s, fd, off, &n, NULL, 0);
104                  if (n == -1 && errno == ENOSYS) return 1"
105. auto/feature
106
107if [ $ngx_found = yes ]; then
108    CORE_SRCS="$CORE_SRCS $DARWIN_SENDFILE_SRCS"
109fi
110
111
112ngx_feature="atomic(3)"
113ngx_feature_name=NGX_DARWIN_ATOMIC
114ngx_feature_run=no
115ngx_feature_incs="#include <libkern/OSAtomic.h>"
116ngx_feature_path=
117ngx_feature_libs=
118ngx_feature_test="int32_t  lock = 0;
119                  if (!OSAtomicCompareAndSwap32Barrier(0, 1, &lock)) return 1"
120. auto/feature
121