blob: cf472d15678dd4ecbe30e7bb8ee8b59aa63bc98a [file] [log] [blame]
Igor Sysoev74944902008-07-30 12:18:07 +00001
2# Copyright (C) Igor Sysoev
Maxim Konovalovf8d59e32012-01-18 15:07:43 +00003# Copyright (C) Nginx, Inc.
Igor Sysoev74944902008-07-30 12:18:07 +00004
5
Piotr Sikora7d3be9a2015-12-01 00:00:10 -08006have=NGX_DARWIN . $NGX_AUTO/have_headers
Igor Sysoev74944902008-07-30 12:18:07 +00007
8CORE_INCS="$UNIX_INCS"
9CORE_DEPS="$UNIX_DEPS $DARWIN_DEPS"
10CORE_SRCS="$UNIX_SRCS $DARWIN_SRCS"
11
12
13
14ngx_spacer='
15'
16
Maxim Dounince1c3bd2016-02-04 20:25:29 +030017MAIN_LINK=
18MODULE_LINK="-shared -Wl,-undefined,dynamic_lookup"
19
Sergey Kandaurovc1de6f32017-04-17 14:42:12 +030020CC_AUX_FLAGS="$CC_AUX_FLAGS -D__APPLE_USE_RFC_3542"
21
22
Igor Sysoev74944902008-07-30 12:18:07 +000023# kqueue
24
25echo " + kqueue found"
Piotr Sikora7d3be9a2015-12-01 00:00:10 -080026have=NGX_HAVE_KQUEUE . $NGX_AUTO/have
27have=NGX_HAVE_CLEAR_EVENT . $NGX_AUTO/have
Igor Sysoev74944902008-07-30 12:18:07 +000028EVENT_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
Piotr Sikora7d3be9a2015-12-01 00:00:10 -080060. $NGX_AUTO/feature
Igor Sysoev74944902008-07-30 12:18:07 +000061
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
Piotr Sikora7d3be9a2015-12-01 00:00:10 -080087. $NGX_AUTO/feature
Igor Sysoev74944902008-07-30 12:18:07 +000088
89
90# sendfile()
91
Igor Sysoev74944902008-07-30 12:18:07 +000092ngx_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"
Piotr Sikora7d3be9a2015-12-01 00:00:10 -0800105. $NGX_AUTO/feature
Igor Sysoev74944902008-07-30 12:18:07 +0000106
107if [ $ngx_found = yes ]; then
Igor Sysoev74944902008-07-30 12:18:07 +0000108 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=
Piotr Sikoraa852d772016-06-27 15:00:03 -0700118ngx_feature_test="int32_t lock = 0;
119 if (!OSAtomicCompareAndSwap32Barrier(0, 1, &lock)) return 1"
Piotr Sikora7d3be9a2015-12-01 00:00:10 -0800120. $NGX_AUTO/feature