nginx-0.0.2-2004-02-03-00:19:52 import
diff --git a/auto/configure b/auto/configure
index 6d3fc52..4287a4e 100755
--- a/auto/configure
+++ b/auto/configure
@@ -3,15 +3,17 @@
 . auto/init
 . auto/sources
 
+echo > $NGX_AUTO_CONFIG_H
+
 . auto/os/conf
+. auto/modules
 
 . auto/cc
 . auto/lib/conf
+
 . auto/make
 . auto/lib/make
 
-echo > $NGX_AUTO_CONFIG_H
-
 if [ "$PLATFORM" != win32 ]; then
     . auto/unix
 fi
diff --git a/auto/have b/auto/have
new file mode 100644
index 0000000..04cc103
--- /dev/null
+++ b/auto/have
@@ -0,0 +1,8 @@
+
+cat << END >> $NGX_AUTO_CONFIG_H
+
+#ifndef $have
+#define $have  1
+#endif
+
+END
diff --git a/auto/lib/md5/conf b/auto/lib/md5/conf
index e1755c1..1a54ed5 100644
--- a/auto/lib/md5/conf
+++ b/auto/lib/md5/conf
@@ -4,7 +4,7 @@
     if grep MD5_Init $MD5/md5.h >/dev/null; then
         # OpenSSL md5
         OPENSSL_MD5=YES
-        CFLAGS="$CFLAGS -D HAVE_OPENSSL_MD5"
+        have=HAVE_OPENSSL_MD5 . auto/have
     else
         # rsaref md5
         OPENSSL_MD5=NO
@@ -60,7 +60,7 @@
 
 
     if [ $ngx_found = yes ]; then
-        CFLAGS="$CFLAGS -D HAVE_OPENSSL_MD5"
+        have=HAVE_OPENSSL_MD5 . auto/have
         CORE_LIBS="$CORE_LIBS $ngx_libs"
         MD5=YES
     fi
diff --git a/auto/make b/auto/make
index a44963e..1394a1d 100644
--- a/auto/make
+++ b/auto/make
@@ -4,35 +4,6 @@
          $OBJS/src/http $OBJS/src/http/modules $OBJS/src/http/modules/proxy
 
 
-HTTP_FILTER_MODULES="$HTTP_FILTER_MODULES \
-                     $HTTP_CHUNKED_FILTER_MODULE \
-                     $HTTP_RANGE_FILTER_MODULE \
-                     $HTTP_CHARSET_FILTER_MODULE"
-
-HTTP_MODULES="$HTTP_MODULES $HTTP_STATIC_MODULE $HTTP_INDEX_MODULE"
-
-if [ $HTTP_REWRITE = YES ]; then
-    HTTP_MODULES="$HTTP_MODULES $HTTP_REWRITE_MODULE"
-    HTTP_SRCS="$HTTP_SRCS $HTTP_REWRITE_SRCS"
-fi
-
-if [ $HTTP_GZIP = YES ]; then
-    HTTP_FILTER_MODULES="$HTTP_FILTER_MODULES $HTTP_GZIP_FILTER_MODULE"
-    HTTP_SRCS="$HTTP_SRCS $HTTP_GZIP_SRCS"
-fi
-
-if [ $HTTP_SSI = YES ]; then
-    HTTP_FILTER_MODULES="$HTTP_FILTER_MODULES $HTTP_SSI_FILTER_MODULE"
-    HTTP_SRCS="$HTTP_SRCS $HTTP_SSI_SRCS"
-fi
-
-if [ $HTTP_PROXY = YES ]; then
-    HTTP_MODULES="$HTTP_MODULES $HTTP_PROXY_MODULE"
-    HTTP_INCS="$HTTP_INCS $HTTP_PROXY_INCS"
-    HTTP_DEPS="$HTTP_DEPS $HTTP_PROXY_DEPS"
-    HTTP_SRCS="$HTTP_SRCS $HTTP_PROXY_SRCS"
-fi
-
 modules="$CORE_MODULES $EVENT_MODULES $HTTP_MODULES \
          $HTTP_FILTER_MODULES $HTTP_NOT_MODIFIED_FILTER_MODULE"
 
diff --git a/auto/modules b/auto/modules
new file mode 100644
index 0000000..b254e34
--- /dev/null
+++ b/auto/modules
@@ -0,0 +1,32 @@
+
+HTTP_FILTER_MODULES="$HTTP_FILTER_MODULES \
+                     $HTTP_CHUNKED_FILTER_MODULE \
+                     $HTTP_RANGE_FILTER_MODULE \
+                     $HTTP_CHARSET_FILTER_MODULE"
+
+HTTP_MODULES="$HTTP_MODULES $HTTP_STATIC_MODULE $HTTP_INDEX_MODULE"
+
+if [ $HTTP_REWRITE = YES ]; then
+    USE_PCRE=YES
+    HTTP_MODULES="$HTTP_MODULES $HTTP_REWRITE_MODULE"
+    HTTP_SRCS="$HTTP_SRCS $HTTP_REWRITE_SRCS"
+fi
+
+if [ $HTTP_GZIP = YES ]; then
+    USE_ZLIB=YES
+    HTTP_FILTER_MODULES="$HTTP_FILTER_MODULES $HTTP_GZIP_FILTER_MODULE"
+    HTTP_SRCS="$HTTP_SRCS $HTTP_GZIP_SRCS"
+fi
+
+if [ $HTTP_SSI = YES ]; then
+    HTTP_FILTER_MODULES="$HTTP_FILTER_MODULES $HTTP_SSI_FILTER_MODULE"
+    HTTP_SRCS="$HTTP_SRCS $HTTP_SSI_SRCS"
+fi
+
+if [ $HTTP_PROXY = YES ]; then
+    USE_MD5=YES
+    HTTP_MODULES="$HTTP_MODULES $HTTP_PROXY_MODULE"
+    HTTP_INCS="$HTTP_INCS $HTTP_PROXY_INCS"
+    HTTP_DEPS="$HTTP_DEPS $HTTP_PROXY_DEPS"
+    HTTP_SRCS="$HTTP_SRCS $HTTP_PROXY_SRCS"
+fi
diff --git a/auto/options b/auto/options
index 91b9b1b..61e446e 100644
--- a/auto/options
+++ b/auto/options
@@ -8,8 +8,11 @@
 TEST_BUILD_EPOLL=NO
 TEST_BUILD_SIGIO=NO
 
-SELECT=YES
-POLL=YES
+EVENT_FOUND=NO
+
+EVENT_SELECT=NO
+EVENT_POLL=NO
+EVENT_AIO=NO
 
 HTTP_REWRITE=YES
 HTTP_GZIP=YES
@@ -18,11 +21,11 @@
 
 PCRE=NO
 
-USE_MD5=YES
+USE_MD5=NO
 MD5=NO
 MD5_LIB=NO
 
-USE_ZLIB=YES
+USE_ZLIB=NO
 ZLIB=NO
 ZLIB_LIB=NO
 
@@ -41,8 +44,9 @@
 
         --builddir=*)                    OBJS="$value"              ;;
 
-        --without-select_module)         SELECT=NO                  ;;
-        --without-poll_module)           POLL=NO                    ;;
+        --with-select_module)            EVENT_SELECT=YES           ;;
+        --with-poll_module)              EVENT_POLL=YES             ;;
+        --with-aio_module)               EVENT_AIO=YES              ;;
 
         --without-http_rewrite_module)   HTTP_REWRITE=NO            ;;
         --without-http_ssi_module)       HTTP_SSI=NO                ;;
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"
diff --git a/auto/sources b/auto/sources
index 1a21c70..26a492b 100644
--- a/auto/sources
+++ b/auto/sources
@@ -41,8 +41,8 @@
             src/core/ngx_garbage_collector.c"
 
 
-REGEX_DEPS="src/core/ngx_regex.h"
-REGEX_SRCS="src/core/ngx_regex.c"
+REGEX_DEPS=src/core/ngx_regex.h
+REGEX_SRCS=src/core/ngx_regex.c
 
 
 EVENT_MODULES="ngx_events_module ngx_event_core_module"
@@ -62,29 +62,33 @@
             src/event/ngx_event_pipe.c"
 
 
-SELECT_MODULE="ngx_select_module"
+SELECT_MODULE=ngx_select_module
 SELECT_SRCS=src/event/modules/ngx_select_module.c
 
-POLL_MODULE="ngx_poll_module"
+POLL_MODULE=ngx_poll_module
 POLL_SRCS=src/event/modules/ngx_poll_module.c
 
-KQUEUE_MODULE="ngx_kqueue_module"
+KQUEUE_MODULE=ngx_kqueue_module
 KQUEUE_SRCS=src/event/modules/ngx_kqueue_module.c
 
-DEVPOLL_MODULE="ngx_devpoll_module"
+DEVPOLL_MODULE=ngx_devpoll_module
 DEVPOLL_SRCS=src/event/modules/ngx_devpoll_module.c
 
-EPOLL_MODULE="ngx_epoll_module"
+EPOLL_MODULE=ngx_epoll_module
 EPOLL_SRCS=src/event/modules/ngx_epoll_module.c
 
-SIGIO_MODULE="ngx_sigio_module"
+SIGIO_MODULE=ngx_sigio_module
 SIGIO_SRCS=src/event/modules/ngx_sigio_module.c
 
-IOCP_MODULE="ngx_iocp_module"
+IOCP_MODULE=ngx_iocp_module
 IOCP_SRCS=src/event/modules/ngx_iocp_module.c
 
-AIO_MODULE="ngx_aio_module"
-AIO_SRCS=src/event/modules/ngx_aio_module.c
+AIO_MODULE=ngx_aio_module
+AIO_SRCS="src/event/modules/ngx_aio_module.c \
+          src/os/unix/ngx_aio_read.c \
+          src/os/unix/ngx_aio_write.c \
+          src/os/unix/ngx_aio_read_chain.c \
+          src/os/unix/ngx_aio_write_chain.c"
 
 
 UNIX_INCS="$CORE_INCS $EVENT_INCS -I src/os/unix"