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