nginx-0.0.2-2004-02-03-00:19:52 import
diff --git a/auto/os/conf b/auto/os/conf
index 27e0123..99de323 100644
--- a/auto/os/conf
+++ b/auto/os/conf
@@ -43,6 +43,18 @@
 esac
 
 
+if [ $EVENT_SELECT = YES -o $EVENT_FOUND = NO ]; then
+    CORE_SRCS="$CORE_SRCS $SELECT_SRCS"
+    EVENT_MODULES="$EVENT_MODULES $SELECT_MODULE"
+fi
+
+
+if [ $EVENT_POLL = YES -o $EVENT_FOUND = NO ]; then
+    CORE_SRCS="$CORE_SRCS $POLL_SRCS"
+    EVENT_MODULES="$EVENT_MODULES $POLL_MODULE"
+fi
+
+
 if [ $TEST_BUILD_DEVPOLL = YES ]; then
     CFLAGS="$CFLAGS -D HAVE_DEVPOLL=1 -D TEST_BUILD_DEVPOLL=1"
     EVENT_MODULES="$EVENT_MODULES $DEVPOLL_MODULE"
diff --git a/auto/os/freebsd b/auto/os/freebsd
index 9684102..ee68543 100644
--- a/auto/os/freebsd
+++ b/auto/os/freebsd
@@ -7,16 +7,6 @@
 MD5_LIB="-lmd"
 ZLIB_LIB="-lz"
 
-if [ $SELECT = YES ]; then
-    CORE_SRCS="$CORE_SRCS $SELECT_SRCS"
-    EVENT_MODULES="$EVENT_MODULES $SELECT_MODULE"
-fi
-
-if [ $POLL = YES ]; then
-    CORE_SRCS="$CORE_SRCS $POLL_SRCS"
-    EVENT_MODULES="$EVENT_MODULES $POLL_MODULE"
-fi
-
 version=`grep "#define __FreeBSD_version" /usr/include/osreldate.h \
          | sed -e 's/^.* \(.*\)$/\1/'`
 
@@ -24,7 +14,7 @@
 # sendfile
 
 if [ $version -gt 300007 ]; then
-    CFLAGS="$CFLAGS -D HAVE_SENDFILE=1"
+    have=HAVE_SENDFILE . auto/have
     CORE_SRCS="$CORE_SRCS $FREEBSD_SENDFILE_SRCS"
 fi
 
@@ -34,9 +24,11 @@
 if [ \( $version -lt 500000 -a $version -ge 410000 \) \
      -o $version -ge 500011 ]
 then
-    CFLAGS="$CFLAGS -D HAVE_KQUEUE=1 -D HAVE_CLEAR_EVENT=1"
+    have=HAVE_KQUEUE . auto/have
+    have=HAVE_CLEAR_EVENT . auto/have
     CORE_SRCS="$CORE_SRCS $KQUEUE_SRCS"
     EVENT_MODULES="$EVENT_MODULES $KQUEUE_MODULE"
+    EVENT_FOUND=YES
 fi
 
 
@@ -45,5 +37,11 @@
 if [ \( $version -lt 500000 -a $version -ge 430000 \) \
      -o $version -ge 500018 ]
 then
-    CFLAGS="$CFLAGS -D HAVE_LOWAT_EVENT=1"
+    have=HAVE_LOWAT_EVENT . auto/have
+fi
+
+
+if [ $EVENT_AIO = YES ]; then
+    CORE_SRCS="$CORE_SRCS $AIO_SRCS"
+    EVENT_MODULES="$EVENT_MODULES $AIO_MODULE"
 fi
diff --git a/auto/os/linux b/auto/os/linux
index 8990e6d..effb472 100644
--- a/auto/os/linux
+++ b/auto/os/linux
@@ -6,19 +6,49 @@
 
 ZLIB_LIB="-lz"
 
+CC_TEST_FLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE"
 
-NGX_INC="sys/epoll.h"; . auto/inc
 
-if [ $NGX_FOUND=YES ]; then
+# epoll, EPOLLET version
+
+ngx_func="epoll";
+ngx_func_inc="#include <sys/epoll.h>"
+ngx_func_test="int fd = 1; int n;
+               struct epoll_event ee;
+               ee.events = EPOLLIN|EPOLLOUT|EPOLLET;
+               ee.data.ptr = NULL;
+               n = epoll_ctl(efd, EPOLL_CTL_ADD, fd, &ee)"
+. auto/func
+
+if [ $ngx_found = yes ]; then
     CFLAGS="$CFLAGS -D HAVE_EPOLL=1"
-    EVENT_MODULES="$EVENT_MODULES $EPOLL_MODULE"
     CORE_SRCS="$CORE_SRCS $EPOLL_SRCS"
+    EVENT_MODULES="$EVENT_MODULES $EPOLL_MODULE"
+    EVENT_FOUND=YES
 fi
 
 
-# TODO check sendfile64()
+# sendfile()
+
+CC_TEST_FLAGS="-D_GNU_SOURCE"
+ngx_func="sendfile()";
+ngx_func_inc="#include <sys/sendfile.h>"
+ngx_func_test="int s = 0, fd = 1;
+               ssize_t n; off_t off = 0;
+               n = sendfile(s, fd, &off, 1)"
+. auto/func
+
+if [ $ngx_found = yes ]; then
+    CFLAGS="$CFLAGS -D HAVE_SENDFILE=1"
+    CORE_SRCS="$CORE_SRCS $LINUX_SENDFILE_SRCS"
+fi
+
+
+# sendfile64()
 
 CC_TEST_FLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE"
+ngx_func="sendfile64()"; . auto/func
 
-# STUB
-CORE_SRCS="$CORE_SRCS $LINUX_SENDFILE_SRCS"
+if [ $ngx_found = yes ]; then
+    CFLAGS="$CFLAGS -D HAVE_SENDFILE64=1"
+fi
diff --git a/auto/os/solaris b/auto/os/solaris
index 6bc2a6f..2fd479f 100644
--- a/auto/os/solaris
+++ b/auto/os/solaris
@@ -6,29 +6,31 @@
 
 MD5_LIB="-lmd5"
 ZLIB_LIB="-lz"
+CORE_LIBS="$CORE_LIBS -lsocket -lnsl"
 
 CC_TEST_FLAGS="-D_FILE_OFFSET_BITS=64"
 
-CORE_LIBS="$CORE_LIBS -lsocket -lnsl"
 
+ngx_inc="sys/devpoll.h"; . auto/inc
 
-NGX_INC="sys/devpoll.h"; . auto/inc
-
-if [ $NGX_FOUND=YES ]; then
+if [ $ngx_found = yes ]; then
     CFLAGS="$CFLAGS -D HAVE_DEVPOLL=1"
-    EVENT_MODULES="$EVENT_MODULES $DEVPOLL_MODULE"
     CORE_SRCS="$CORE_SRCS $DEVPOLL_SRCS"
+    EVENT_MODULES="$EVENT_MODULES $DEVPOLL_MODULE"
+    EVENT_FOUND=YES
 fi
 
 
-NGX_FUNC_INC="#include <sys/sendfile.h>"
-NGX_FUNC_LIBS="-lsendfile"
-NGX_FUNC_TEST="int fd = 1; sendfilevec_t vec[1];
+ngx_func="sendfilev()";
+ngx_func_inc="#include <sys/sendfile.h>"
+ngx_func_libs="-lsendfile"
+ngx_func_test="int fd = 1; sendfilevec_t vec[1];
                size_t sent = 1; ssize_t n;
                n = sendfilev(fd, vec, 1, &sent)"
-NGX_FUNC="sendfilev()"; . auto/func
+. auto/func
 
-if [ $NGX_FOUND=YES ]; then
+
+if [ $ngx_found = yes ]; then
     CFLAGS="$CFLAGS -D HAVE_SENDFILE=1"
     CORE_SRCS="$CORE_SRCS $SOLARIS_SENDFILEV_SRCS"
     CORE_LIBS="$CORE_LIBS -lsendfile"