Igor Sysoev | 7494490 | 2008-07-30 12:18:07 +0000 | [diff] [blame] | 1 | |
| 2 | # Copyright (C) Igor Sysoev |
Maxim Konovalov | f8d59e3 | 2012-01-18 15:07:43 +0000 | [diff] [blame] | 3 | # Copyright (C) Nginx, Inc. |
Igor Sysoev | 7494490 | 2008-07-30 12:18:07 +0000 | [diff] [blame] | 4 | |
| 5 | |
Piotr Sikora | 7d3be9a | 2015-12-01 00:00:10 -0800 | [diff] [blame] | 6 | have=NGX_DARWIN . $NGX_AUTO/have_headers |
Igor Sysoev | 7494490 | 2008-07-30 12:18:07 +0000 | [diff] [blame] | 7 | |
| 8 | CORE_INCS="$UNIX_INCS" |
| 9 | CORE_DEPS="$UNIX_DEPS $DARWIN_DEPS" |
| 10 | CORE_SRCS="$UNIX_SRCS $DARWIN_SRCS" |
| 11 | |
| 12 | |
| 13 | |
| 14 | ngx_spacer=' |
| 15 | ' |
| 16 | |
Maxim Dounin | ce1c3bd | 2016-02-04 20:25:29 +0300 | [diff] [blame] | 17 | MAIN_LINK= |
| 18 | MODULE_LINK="-shared -Wl,-undefined,dynamic_lookup" |
| 19 | |
Sergey Kandaurov | c1de6f3 | 2017-04-17 14:42:12 +0300 | [diff] [blame] | 20 | CC_AUX_FLAGS="$CC_AUX_FLAGS -D__APPLE_USE_RFC_3542" |
| 21 | |
| 22 | |
Igor Sysoev | 7494490 | 2008-07-30 12:18:07 +0000 | [diff] [blame] | 23 | # kqueue |
| 24 | |
| 25 | echo " + kqueue found" |
Piotr Sikora | 7d3be9a | 2015-12-01 00:00:10 -0800 | [diff] [blame] | 26 | have=NGX_HAVE_KQUEUE . $NGX_AUTO/have |
| 27 | have=NGX_HAVE_CLEAR_EVENT . $NGX_AUTO/have |
Igor Sysoev | 7494490 | 2008-07-30 12:18:07 +0000 | [diff] [blame] | 28 | EVENT_MODULES="$EVENT_MODULES $KQUEUE_MODULE" |
| 29 | CORE_SRCS="$CORE_SRCS $KQUEUE_SRCS" |
| 30 | EVENT_FOUND=YES |
| 31 | NGX_KQUEUE_CHECKED=YES |
| 32 | |
| 33 | ngx_feature="kqueue's EVFILT_TIMER" |
| 34 | ngx_feature_name="NGX_HAVE_TIMER_EVENT" |
| 35 | ngx_feature_run=yes |
| 36 | ngx_feature_incs="#include <sys/event.h> |
| 37 | #include <sys/time.h>" |
| 38 | ngx_feature_path= |
| 39 | ngx_feature_libs= |
| 40 | ngx_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 Sikora | 7d3be9a | 2015-12-01 00:00:10 -0800 | [diff] [blame] | 60 | . $NGX_AUTO/feature |
Igor Sysoev | 7494490 | 2008-07-30 12:18:07 +0000 | [diff] [blame] | 61 | |
| 62 | |
| 63 | ngx_feature="Darwin 64-bit kqueue millisecond timeout bug" |
| 64 | ngx_feature_name=NGX_DARWIN_KEVENT_BUG |
| 65 | ngx_feature_run=bug |
| 66 | ngx_feature_incs="#include <sys/event.h> |
| 67 | #include <sys/time.h>" |
| 68 | ngx_feature_path= |
| 69 | ngx_feature_libs= |
| 70 | ngx_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 Sikora | 7d3be9a | 2015-12-01 00:00:10 -0800 | [diff] [blame] | 87 | . $NGX_AUTO/feature |
Igor Sysoev | 7494490 | 2008-07-30 12:18:07 +0000 | [diff] [blame] | 88 | |
| 89 | |
| 90 | # sendfile() |
| 91 | |
Igor Sysoev | 7494490 | 2008-07-30 12:18:07 +0000 | [diff] [blame] | 92 | ngx_feature="sendfile()" |
| 93 | ngx_feature_name="NGX_HAVE_SENDFILE" |
| 94 | ngx_feature_run=yes |
| 95 | ngx_feature_incs="#include <sys/types.h> |
| 96 | #include <sys/socket.h> |
| 97 | #include <sys/uio.h> |
| 98 | #include <sys/errno.h>" |
| 99 | ngx_feature_path= |
| 100 | ngx_feature_libs= |
| 101 | ngx_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 Sikora | 7d3be9a | 2015-12-01 00:00:10 -0800 | [diff] [blame] | 105 | . $NGX_AUTO/feature |
Igor Sysoev | 7494490 | 2008-07-30 12:18:07 +0000 | [diff] [blame] | 106 | |
| 107 | if [ $ngx_found = yes ]; then |
Igor Sysoev | 7494490 | 2008-07-30 12:18:07 +0000 | [diff] [blame] | 108 | CORE_SRCS="$CORE_SRCS $DARWIN_SENDFILE_SRCS" |
| 109 | fi |
| 110 | |
| 111 | |
| 112 | ngx_feature="atomic(3)" |
| 113 | ngx_feature_name=NGX_DARWIN_ATOMIC |
| 114 | ngx_feature_run=no |
| 115 | ngx_feature_incs="#include <libkern/OSAtomic.h>" |
| 116 | ngx_feature_path= |
| 117 | ngx_feature_libs= |
Piotr Sikora | a852d77 | 2016-06-27 15:00:03 -0700 | [diff] [blame] | 118 | ngx_feature_test="int32_t lock = 0; |
| 119 | if (!OSAtomicCompareAndSwap32Barrier(0, 1, &lock)) return 1" |
Piotr Sikora | 7d3be9a | 2015-12-01 00:00:10 -0800 | [diff] [blame] | 120 | . $NGX_AUTO/feature |