summaryrefslogtreecommitdiff
path: root/auto
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2008-07-30 12:18:07 +0000
committerIgor Sysoev <igor@sysoev.ru>2008-07-30 12:18:07 +0000
commit749449097847cc3bee9e4e3966122a94149b755b (patch)
tree610e6e781bd2fdcc1cdd035851c4a222e3556c08 /auto
parentec0b579f7521608e3dabc1635ead8ed11ab1a7be (diff)
*) move Darwin support to separate files
*) Darwin sendfile() support
Diffstat (limited to 'auto')
-rw-r--r--auto/os/conf22
-rw-r--r--auto/os/darwin115
-rw-r--r--auto/os/features30
-rw-r--r--auto/sources5
4 files changed, 124 insertions, 48 deletions
diff --git a/auto/os/conf b/auto/os/conf
index b34be724..f4d08cb4 100644
--- a/auto/os/conf
+++ b/auto/os/conf
@@ -18,6 +18,10 @@ case "$NGX_PLATFORM" in
. auto/os/solaris
;;
+ Darwin:*)
+ . auto/os/darwin
+ ;;
+
win32)
. auto/os/win32
;;
@@ -36,24 +40,6 @@ case "$NGX_PLATFORM" in
'
;;
- Darwin:*)
- have=NGX_DARWIN . auto/have_headers
- have=NGX_HAVE_INHERITED_NONBLOCK . auto/have
- CORE_INCS="$UNIX_INCS"
- CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
- CORE_SRCS="$UNIX_SRCS"
-
- ngx_feature="atomic(3)"
- ngx_feature_name=NGX_DARWIN_ATOMIC
- ngx_feature_run=no
- ngx_feature_incs="#include <libkern/OSAtomic.h>"
- ngx_feature_path=
- ngx_feature_libs=
- ngx_feature_test="int32_t lock, n;
- n = OSAtomicCompareAndSwap32Barrier(0, 1, lock)"
- . auto/feature
- ;;
-
HP-UX:*)
# HP/UX
have=NGX_HPUX . auto/have_headers
diff --git a/auto/os/darwin b/auto/os/darwin
new file mode 100644
index 00000000..f9953b95
--- /dev/null
+++ b/auto/os/darwin
@@ -0,0 +1,115 @@
+
+# Copyright (C) Igor Sysoev
+
+
+have=NGX_DARWIN . auto/have_headers
+
+CORE_INCS="$UNIX_INCS"
+CORE_DEPS="$UNIX_DEPS $DARWIN_DEPS"
+CORE_SRCS="$UNIX_SRCS $DARWIN_SRCS"
+
+
+
+ngx_spacer='
+'
+
+# kqueue
+
+echo " + kqueue found"
+have=NGX_HAVE_KQUEUE . auto/have
+have=NGX_HAVE_CLEAR_EVENT . auto/have
+EVENT_MODULES="$EVENT_MODULES $KQUEUE_MODULE"
+CORE_SRCS="$CORE_SRCS $KQUEUE_SRCS"
+EVENT_FOUND=YES
+NGX_KQUEUE_CHECKED=YES
+
+ngx_feature="kqueue's EVFILT_TIMER"
+ngx_feature_name="NGX_HAVE_TIMER_EVENT"
+ngx_feature_run=yes
+ngx_feature_incs="#include <sys/event.h>
+ #include <sys/time.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="int kq;
+ struct kevent kev;
+ struct timespec ts;
+
+ if ((kq = kqueue()) == -1) return 1;
+
+ kev.ident = 0;
+ kev.filter = EVFILT_TIMER;
+ kev.flags = EV_ADD|EV_ENABLE;
+ kev.fflags = 0;
+ kev.data = 1000;
+ kev.udata = 0;
+
+ ts.tv_sec = 0;
+ ts.tv_nsec = 0;
+
+ if (kevent(kq, &kev, 1, &kev, 1, &ts) == -1) return 1;
+
+ if (kev.flags & EV_ERROR) return 1;"
+
+. auto/feature
+
+
+ngx_feature="Darwin 64-bit kqueue millisecond timeout bug"
+ngx_feature_name=NGX_DARWIN_KEVENT_BUG
+ngx_feature_run=bug
+ngx_feature_incs="#include <sys/event.h>
+ #include <sys/time.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="int kq;
+ struct kevent kev;
+ struct timespec ts;
+ struct timeval tv, tv0;
+
+ kq = kqueue();
+
+ ts.tv_sec = 0;
+ ts.tv_nsec = 999000000;
+
+ gettimeofday(&tv, 0);
+ kevent(kq, NULL, 0, &kev, 1, &ts);
+ gettimeofday(&tv0, 0);
+ timersub(&tv0, &tv, &tv);
+
+ if (tv.tv_sec * 1000000 + tv.tv_usec < 900000) return 1;"
+
+. auto/feature
+
+
+# sendfile()
+
+CC_AUX_FLAGS="$CC_AUX_FLAGS"
+ngx_feature="sendfile()"
+ngx_feature_name="NGX_HAVE_SENDFILE"
+ngx_feature_run=yes
+ngx_feature_incs="#include <sys/types.h>
+ #include <sys/socket.h>
+ #include <sys/uio.h>
+ #include <sys/errno.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="int s = 0, fd = 1;
+ off_t n; off_t off = 0;
+ n = sendfile(s, fd, off, &n, NULL, 0);
+ if (n == -1 && errno == ENOSYS) return 1"
+. auto/feature
+
+if [ $ngx_found = yes ]; then
+ have=NGX_HAVE_SENDFILE . auto/have
+ CORE_SRCS="$CORE_SRCS $DARWIN_SENDFILE_SRCS"
+fi
+
+
+ngx_feature="atomic(3)"
+ngx_feature_name=NGX_DARWIN_ATOMIC
+ngx_feature_run=no
+ngx_feature_incs="#include <libkern/OSAtomic.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="int32_t lock, n;
+ n = OSAtomicCompareAndSwap32Barrier(0, 1, lock)"
+. auto/feature
diff --git a/auto/os/features b/auto/os/features
index 1e54f9d3..c542c7ee 100644
--- a/auto/os/features
+++ b/auto/os/features
@@ -122,36 +122,6 @@ if test -z "$NGX_KQUEUE_CHECKED"; then
if (kev.flags & EV_ERROR) return 1;"
. auto/feature
-
-
- if [ "$NGX_SYSTEM" = "Darwin" ]; then
-
- ngx_feature="Darwin 64-bit kqueue millisecond timeout bug"
- ngx_feature_name=NGX_DARWIN_KEVENT_BUG
- ngx_feature_run=bug
- ngx_feature_incs="#include <sys/event.h>
-#include <sys/time.h>"
- ngx_feature_path=
- ngx_feature_libs=
- ngx_feature_test="int kq;
- struct kevent kev;
- struct timespec ts;
- struct timeval tv, tv0;
-
- kq = kqueue();
-
- ts.tv_sec = 0;
- ts.tv_nsec = 999000000;
-
- gettimeofday(&tv, 0);
- kevent(kq, NULL, 0, &kev, 1, &ts);
- gettimeofday(&tv0, 0);
- timersub(&tv0, &tv, &tv);
-
- if (tv.tv_sec * 1000000 + tv.tv_usec < 900000) return 1;"
-
- . auto/feature
- fi
fi
fi
diff --git a/auto/sources b/auto/sources
index 62fb047c..12ab1b79 100644
--- a/auto/sources
+++ b/auto/sources
@@ -198,6 +198,11 @@ SOLARIS_SRCS=src/os/unix/ngx_solaris_init.c
SOLARIS_SENDFILEV_SRCS=src/os/unix/ngx_solaris_sendfilev_chain.c
+DARWIN_DEPS="src/os/unix/ngx_darwin_config.h src/os/unix/ngx_darwin.h"
+DARWIN_SRCS=src/os/unix/ngx_darwin_init.c
+DARWIN_SENDFILE_SRCS=src/os/unix/ngx_darwin_sendfile_chain.c
+
+
WIN32_INCS="$CORE_INCS $EVENT_INCS src/os/win32"
WIN32_DEPS="$CORE_DEPS $EVENT_DEPS \