nginx-0.1.2-RELEASE import

    *) Feature: the --user=USER, --group=GROUP, and --with-ld-opt=OPTIONS
       options in configure.

    *) Feature: the server_name directive supports *.domain.tld.

    *) Bugfix: the portability improvements.

    *) Bugfix: if configuration file was set in command line, the
       reconfiguration was impossible; the bug had appeared in 0.1.1.

    *) Bugfix: proxy module may get caught in an endless loop when sendfile
       is not used.

    *) Bugfix: with sendfile the response was not recoded according to the
       charset module directives; the bug had appeared in 0.1.1.

    *) Bugfix: very seldom bug in the kqueue processing.

    *) Bugfix: the gzip module compressed the proxied responses that was
       already compressed.
diff --git a/auto/cc/bcc b/auto/cc/bcc
new file mode 100644
index 0000000..5765c47
--- /dev/null
+++ b/auto/cc/bcc
@@ -0,0 +1,48 @@
+
+# Copyright (C) Igor Sysoev
+
+
+# Borland C++ 5.5
+
+# optimizations
+
+# maximize speed
+CFLAGS="$CFLAGS -O2"
+
+case $CPU in
+    pentium)
+        # optimize for Pentium and Athlon
+        CPU_OPT="-5"
+    ;;
+
+    pentiumpro)
+        # optimize for Pentium Pro, Pentium II and Pentium III
+        CPU_OPT="-6"
+    ;;
+esac
+
+CFLAGS="$CFLAGS $CPU_OPT"
+
+# multithreaded
+CFLAGS="$CFLAGS -tWM"
+
+# stop on warning
+CFLAGS="$CFLAGS -w!"
+
+# disable logo
+CFLAGS="$CFLAGS -q"
+
+# precompiled headers
+CORE_DEPS="$CORE_DEPS $OBJS/ngx_config.csm"
+NGX_PCH="$OBJS/ngx_config.csm"
+NGX_BUILD_PCH="-H=$OBJS/ngx_config.csm"
+NGX_USE_PCH="-Hu -H=$OBJS/ngx_config.csm"
+
+LINK="\$(CC)"
+
+ngx_include_opt="-I"
+ngx_objout="-o"
+ngx_binout="-e"
+ngx_objext="obj"
+ngx_binext=".exe"
+ngx_dirsep='\\'
diff --git a/auto/cc/conf b/auto/cc/conf
new file mode 100644
index 0000000..77eeda7
--- /dev/null
+++ b/auto/cc/conf
@@ -0,0 +1,119 @@
+
+# Copyright (C) Igor Sysoev
+
+
+ngx_include_opt="-I "
+ngx_compile_opt="-c"
+ngx_objout="-o "
+ngx_binout="-o "
+ngx_objext="o"
+ngx_binext=
+
+ngx_regex_dirsep="\/"
+ngx_dirsep='/'
+
+ngx_regex_cont=' \\\
+	'
+ngx_cont=' \
+	'
+ngx_tab=' \
+		'
+ngx_spacer=
+
+. auto/cc/name
+
+if test -n "$CFLAGS"; then
+
+    CC_TEST_FLAGS="$CFLAGS $NGX_CC_OPT"
+
+    case $NGX_CC_NAME in
+
+        ccc)
+            # Compaq C V6.5-207
+
+            ngx_include_opt="-I"
+        ;;
+
+    esac
+
+else
+
+    case $NGX_CC_NAME in
+        gcc)
+            # gcc 2.7.2.3, 2.8.1, 2.95.4,
+            #     3.0.4, 3.1.1, 3.2.3, 3.3.2, 3.3.3, 3.3.4, 3.4
+
+            . auto/cc/gcc
+        ;;
+
+        icc)
+            # Intel C++ compiler 7.1, 8.0
+
+            . auto/cc/icc
+        ;;
+
+#        ccc)
+#            # Compaq C V6.5-207
+#
+#            . auto/cc/ccc
+#        ;;
+
+#        acc)
+#            # aCC: HP ANSI C++ B3910B A.03.55.02
+#
+#            . auto/cc/acc
+#        ;;
+
+        msvc)
+            # MSVC 6.0 SP2
+
+            . auto/cc/msvc
+        ;;
+
+        owc)
+            # Open Watcom C 1.0, 1.2
+
+            . auto/cc/owc
+        ;;
+
+        bcc)
+            # Borland C++ 5.5
+
+            . auto/cc/bcc
+        ;;
+
+    esac
+
+    CC_TEST_FLAGS=$NGX_CC_OPT
+
+fi
+
+CFLAGS="$CFLAGS $NGX_CC_OPT"
+
+
+if [ "$PLATFORM" != win32 ]; then
+
+    ngx_feature="gcc variadic macros"
+    ngx_feature_name=HAVE_GCC_VARIADIC_MACROS
+    ngx_feature_run=yes
+    ngx_feature_incs="#include <stdio.h>
+#define var(dummy, args...)  sprintf(args)"
+    ngx_feature_libs=
+    ngx_feature_test="char  buf[30]; buf[0] = '0';
+                      var(0, buf, \"%d\", 1);
+                      if (buf[0] != '1') return 1"
+    . auto/feature
+
+
+    ngx_feature="C99 variadic macros"
+    ngx_feature_name=HAVE_C99_VARIADIC_MACROS
+    ngx_feature_run=yes
+    ngx_feature_incs="#include <stdio.h>
+#define var(dummy, ...) sprintf(__VA_ARGS__)"
+    ngx_feature_libs=
+    ngx_feature_test="char  buf[30]; buf[0] = '0';
+                      var(0, buf, \"%d\", 1);
+                      if (buf[0] != '1') return 1"
+    . auto/feature
+
+fi
diff --git a/auto/cc/gcc b/auto/cc/gcc
new file mode 100644
index 0000000..61f048b
--- /dev/null
+++ b/auto/cc/gcc
@@ -0,0 +1,109 @@
+
+# Copyright (C) Igor Sysoev
+
+
+# gcc 2.7.2.3, 2.8.1, 2.95.4,
+#     3.0.4, 3.1.1, 3.2.3, 3.3.2, 3.3.3, 3.3.4, 3.4
+
+
+# Solaris 7's /usr/ccs/bin/as does not support "-pipe"
+
+CC_TEST_FLAGS="-pipe"
+
+ngx_feature="gcc -pipe switch" 
+ngx_feature_name=
+ngx_feature_run=no
+ngx_feature_incs=
+ngx_feature_libs=
+ngx_feature_test=
+. auto/feature
+
+CC_TEST_FLAGS=
+
+if [ $ngx_found = yes ]; then
+    PIPE="-pipe"
+fi
+
+
+# optimizations
+
+#CFLAGS="$CFLAGS -O2 -fomit-frame-pointer"
+
+case $CPU in
+    pentium)
+        # optimize for Pentium and Athlon
+        CPU_OPT="-march=pentium"
+    ;;
+
+    pentiumpro)
+        # optimize for Pentium Pro, Pentium II and Pentium III
+        CPU_OPT="-march=pentiumpro"
+    ;;
+
+    pentium4)
+        # optimize for Pentium 4, gcc 3.x
+        CPU_OPT="-march=pentium4"
+    ;;
+
+    sparc64)
+        # build 64-bit UltraSparc binary
+        CPU_OPT="-m64"
+        CORE_LINK="$CORE_LINK -m64"
+        CC_AUX_FLAGS="$CC_AUX_FLAGS -m64"
+    ;;
+
+esac
+
+
+# STUB for batch builds
+if [ $CC = gcc27 ]; then CPU_OPT=; fi
+
+
+CFLAGS="$CFLAGS $PIPE $CPU_OPT"
+
+if [ ".$PCRE_OPT" = "." ]; then
+    PCRE_OPT="-O2 -fomit-frame-pointer $PIPE $CPU_OPT"
+else
+    PCRE_OPT="$PCRE_OPT $PIPE"
+fi
+
+if [ ".$MD5_OPT" = "." ]; then
+    MD5_OPT="-O2 -fomit-frame-pointer $PIPE $CPU_OPT"
+else
+    MD5_OPT="$MD5_OPT $PIPE"
+fi
+
+if [ ".$ZLIB_OPT" = "." ]; then
+    ZLIB_OPT="-O2 -fomit-frame-pointer $PIPE $CPU_OPT"
+else
+    ZLIB_OPT="$ZLIB_OPT $PIPE"
+fi
+
+
+# warnings
+
+CFLAGS="$CFLAGS -O -W"
+CFLAGS="$CFLAGS -Wall -Wpointer-arith"
+#CFLAGS="$CFLAGS -Wconversion" 
+#CFLAGS="$CFLAGS -Winline"
+
+# we have a lot of the unused function arguments
+CFLAGS="$CFLAGS -Wno-unused"
+
+# stop on warning
+CFLAGS="$CFLAGS -Werror"
+
+# debug
+CFLAGS="$CFLAGS -g"
+
+# DragonFly's gcc3 generates DWARF
+#CFLAGS="$CFLAGS -g -gstabs"
+
+if [ ".$CPP" = "." ]; then
+    CPP="$CC -E"
+fi
+
+LINK="\$(CC)"
+
+
+CC_STRONG="-Wall -Werror"
diff --git a/auto/cc/icc b/auto/cc/icc
new file mode 100644
index 0000000..94d5cdd
--- /dev/null
+++ b/auto/cc/icc
@@ -0,0 +1,69 @@
+
+# Copyright (C) Igor Sysoev
+
+
+# Intel C++ compiler 7.1, 8.0
+
+# optimizations
+
+CFLAGS="$CFLAGS -O"
+# inline functions declared with __inline
+#CFLAGS="$CFLAGS -Ob1"
+# inline any function, at the compiler's discretion
+CFLAGS="$CFLAGS -Ob2"
+
+# single-file IP optimizations
+#IPO="-ip"
+# multi-file IP optimizations
+IPO="-ipo -ipo_obj"
+CFLAGS="$CFLAGS $IPO"
+CORE_LINK="$CORE_LINK $IPO"
+CORE_LINK="$CORE_LINK -opt_report_file=$OBJS/opt_report_file"
+
+case $CPU in
+    pentium)
+        # optimize for Pentium and Athlon
+        CPU_OPT="-march=pentium"
+    ;;
+
+    pentiumpro)
+        # optimize for Pentium Pro, Pentium II and Pentium III
+        CPU_OPT="-mcpu=pentiumpro -march=pentiumpro"
+    ;;
+
+    pentium4)
+        # optimize for Pentium 4, default
+        CPU_OPT="-march=pentium4"
+    ;;
+esac
+
+CFLAGS="$CFLAGS $CPU_OPT"
+
+if [ ".$PCRE_OPT" = "." ]; then
+    PCRE_OPT="-O $IPO $CPU_OPT"
+fi
+
+if [ ".$MD5_OPT" = "." ]; then
+    MD5_OPT="-O $IPO $CPU_OPT"
+fi
+
+if [ ".$ZLIB_OPT" = "." ]; then
+    ZLIB_OPT="-O $IPO $CPU_OPT"
+fi
+
+
+# warnings
+
+CFLAGS="$CFLAGS -w1"
+#CFLAGS="$CFLAGS -w2"
+
+# stop on warning
+CFLAGS="$CFLAGS -Werror"
+
+# debug
+CFLAGS="$CFLAGS -g"
+
+LINK="\$(CC)"
+
+
+CC_STRONG="-w1 -Werror"
diff --git a/auto/cc/msvc b/auto/cc/msvc
new file mode 100644
index 0000000..d47d4b2
--- /dev/null
+++ b/auto/cc/msvc
@@ -0,0 +1,81 @@
+
+# Copyright (C) Igor Sysoev
+
+
+# MSVC 6.0 SP2
+
+# optimizations
+
+# maximize speed
+CFLAGS="$CFLAGS -O2"
+# enable global optimization
+CFLAGS="$CFLAGS -Og"
+# enable intrinsic functions
+CFLAGS="$CFLAGS -Oi"
+# inline expansion
+CFLAGS="$CFLAGS -Ob1"
+# enable frame pointer omission
+CFLAGS="$CFLAGS -Oy"
+# disable stack checking calls
+CFLAGS="$CFLAGS -Gs"
+
+case $CPU in
+    pentium)
+        # optimize for Pentium and Athlon
+        CPU_OPT="-G5"
+    ;;
+
+    pentiumpro)
+        # optimize for Pentium Pro, Pentium II and Pentium III
+        CPU_OPT="-G6"
+    ;;
+
+    pentium4)
+        # optimize for Pentium 4
+        #CPU_OPT="-G7"
+    ;;
+esac
+
+CFLAGS="$CFLAGS $CPU_OPT"
+
+
+# warnings
+
+#CFLAGS="$CFLAGS -W3"
+CFLAGS="$CFLAGS -W4"
+
+# stop on warning
+CFLAGS="$CFLAGS -WX"
+
+# link with libcmt.lib, multithreaded
+#LIBC="-MT"
+# link with msvcrt.dll
+LIBC="-MD"
+
+CFLAGS="$CFLAGS $LIBC"
+
+# disable logo
+CFLAGS="$CFLAGS -nologo"
+
+LINK="\$(CC)"
+
+# link flags
+CORE_LINK="$CORE_LINK -link -verbose:lib"
+
+# debug
+CFLAGS="$CFLAGS -Yd"
+CORE_LINK="$CORE_LINK -debug -debugtype:coff"
+
+# precompiled headers
+CORE_DEPS="$CORE_DEPS $OBJS/ngx_config.pch"
+NGX_PCH="$OBJS/ngx_config.pch"
+NGX_BUILD_PCH="-Ycngx_config.h -Fp$OBJS/ngx_config.pch"
+NGX_USE_PCH="-Yungx_config.h -Fp$OBJS/ngx_config.pch"
+
+ngx_objout="-Fo"
+ngx_binout="-Fe"
+ngx_objext="obj"
+ngx_binext=".exe"
+
+#ngx_regex_dirsep='\\'
+#ngx_dirsep="\\"
diff --git a/auto/cc/name b/auto/cc/name
new file mode 100644
index 0000000..b974479
--- /dev/null
+++ b/auto/cc/name
@@ -0,0 +1,51 @@
+
+# Copyright (C) Igor Sysoev
+
+
+echo $ngx_n "checking for C compiler ...$ngx_c"
+
+
+if [ $CC = cl ]; then
+    NGX_CC_NAME=msvc
+    echo " using Microsoft Visual C compiler"
+
+else
+if [ $CC = wcl386 ]; then
+    NGX_CC_NAME=owc
+    echo " using Open Watcom C compiler"
+
+else
+if [ $CC = bcc32 ]; then
+    NGX_CC_NAME=bcc
+    echo " using Borland C++ compiler"
+
+else
+if `$CC -v 2>&1 | grep '^gcc version' 2>&1 >/dev/null`; then
+    NGX_CC_NAME=gcc
+    echo " using GNU C compiler"
+
+else
+if `$CC -V 2>&1 | grep '^Intel(R) C++ Compiler' 2>&1 >/dev/null`; then
+    NGX_CC_NAME=icc
+    echo " using Intel C++ compiler"
+
+else
+if `$CC -V 2>&1 | grep '^Compaq C' 2>&1 >/dev/null`; then
+    NGX_CC_NAME=ccc
+    echo " using Compaq C compiler"
+
+else
+if `$CC -V 2>&1 | grep '^aCC: ' 2>&1 >/dev/null`; then
+    NGX_CC_NAME=acc
+    echo " using HP aC++ compiler"
+
+else
+    echo " unknown"
+
+fi # acc
+fi # ccc
+fi # icc
+fi # gcc
+fi # bcc
+fi # owc
+fi # msvc
diff --git a/auto/cc/owc b/auto/cc/owc
new file mode 100644
index 0000000..0c8194d
--- /dev/null
+++ b/auto/cc/owc
@@ -0,0 +1,82 @@
+
+# Copyright (C) Igor Sysoev
+
+
+# Open Watcom C 1.0, 1.2
+
+# optimizations
+
+# maximize speed
+CFLAGS="$CFLAGS -ot"
+# reorder instructions for best pipeline usage 
+CFLAGS="$CFLAGS -op"
+# inline intrinsic functions
+CFLAGS="$CFLAGS -oi"
+# inline expansion
+CFLAGS="$CFLAGS -oe"
+# disable stack checking calls
+CFLAGS="$CFLAGS -s"
+
+case $CPU in
+    pentium)
+        # optimize for Pentium and Athlon
+        # register-based arguments passing conventions
+        CPU_OPT="-5r"
+        # stack-based arguments passing conventions
+        #CPU_OPT="-5s"
+    ;; 
+
+    pentiumpro)
+        # optimize for Pentium Pro, Pentium II and Pentium III
+        # register-based arguments passing conventions
+        CPU_OPT="-6r"
+        # stack-based arguments passing conventions
+        #CPU_OPT="-6s"
+    ;;
+esac
+
+CFLAGS="$CFLAGS $CPU_OPT"
+
+
+# warnings
+
+#CFLAGS="$CFLAGS -w3"
+CFLAGS="$CFLAGS -wx"
+
+# stop on warning
+CFLAGS="$CFLAGS -we"
+
+# built target is NT
+CFLAGS="$CFLAGS -bt=nt"
+
+# multithreaded
+CFLAGS="$CFLAGS -bm"
+
+# debug
+CFLAGS="$CFLAGS -d2"
+
+# quiet
+CFLAGS="$CFLAGS -zq"
+
+# Open Watcom C 1.2
+#have=HAVE_C99_VARIADIC_MACROS . auto/have
+
+# precompiled headers 
+CORE_DEPS="$CORE_DEPS $OBJS/ngx_config.pch"
+NGX_PCH="$OBJS/ngx_config.pch"
+NGX_BUILD_PCH="-fhq=$OBJS/ngx_config.pch"
+NGX_USE_PCH="-fh=$OBJS/ngx_config.pch"
+
+LINK="\$(CC)"
+
+# link flags
+CORE_LINK="$CORE_LINK -l=nt"
+
+ngx_include_opt="-i="
+ngx_objout="-fo"
+ngx_binout="-fe="
+ngx_objext="obj"
+ngx_binext=".exe"
+
+ngx_regex_dirsep='\\'
+ngx_dirsep="\\"
diff --git a/auto/configure b/auto/configure
index 6a81555..eb2fed0 100755
--- a/auto/configure
+++ b/auto/configure
@@ -8,24 +8,22 @@
 . auto/sources
 
 test -d $OBJS || mkdir $OBJS
+
+echo > $NGX_AUTO_HEADERS_H
 echo > $NGX_AUTO_CONFIG_H
 
 if [ $DEBUG = YES ]; then
     have=NGX_DEBUG . auto/have
 fi
 
-have=NGX_USE_HTTP_FILE_CACHE_UNIQ . auto/have
-have=NGX_SUPPRESS_WARN . auto/have
-
 
 if [ "$PLATFORM" != win32 ]; then
     . auto/headers
 fi
 
+. auto/cc/conf
 . auto/os/conf
 . auto/modules
-
-. auto/cc
 . auto/lib/conf
 
 if [ "$PLATFORM" != win32 ]; then
@@ -40,7 +38,8 @@
     . auto/unix
 fi
 
-have=NGX_SMP . auto/have
+# STUB
+. auto/stubs
 
 have=NGX_PREFIX value="\"$PREFIX/\"" . auto/define
 have=NGX_SBIN_PATH value="\"$SBIN_PATH\"" . auto/define
@@ -51,4 +50,7 @@
 fi
 have=NGX_HTTP_LOG_PATH value="\"$HTTP_LOG_PATH\"" . auto/define
 
+have=NGX_USER value="\"$NGX_USER\"" . auto/define
+have=NGX_GROUP value="\"$NGX_GROUP\"" . auto/define
+
 . auto/summary
diff --git a/auto/endianess b/auto/endianess
index 4df7d01..640b465 100644
--- a/auto/endianess
+++ b/auto/endianess
@@ -2,7 +2,7 @@
 # Copyright (C) Igor Sysoev
 
 
-echo $ngx_n "checking for system endianess ..." $ngx_c
+echo $ngx_n "checking for system endianess ...$ngx_c"
 echo >> $NGX_ERR
 echo "checking for system endianess" >> $NGX_ERR
 
diff --git a/auto/feature b/auto/feature
index bd5b081..78676ef 100644
--- a/auto/feature
+++ b/auto/feature
@@ -2,19 +2,28 @@
 # Copyright (C) Igor Sysoev
 
 
-echo $ngx_n "checking for $ngx_feature ..." $ngx_c
-echo >> $NGX_ERR
-echo "checking for $ngx_feature" >> $NGX_ERR
+echo $ngx_n "checking for $ngx_feature ...$ngx_c"
+
+cat << END >> $NGX_AUTOCONF_ERR
+
+----------------------------------------
+checking for $ngx_feature
+
+END
 
 ngx_found=no
 
-feature=`echo $ngx_feature_name | tr '[a-z]' '[A-Z]'`
+if test -n "$ngx_feature_name"; then
+    ngx_have_feature=`echo NGX_$ngx_feature_name | tr '[a-z]' '[A-Z]'`
+    # STUB
+    ngx_have_feature0=`echo HAVE_$ngx_feature_name | tr '[a-z]' '[A-Z]'`
+fi
 
 cat << END > $NGX_AUTOTEST.c
 
 #include <sys/types.h>
-$NGX_UNISTD_H
-$ngx_feature_inc
+$NGX_INCLUDE_UNISTD_H
+$ngx_feature_incs
 
 int main() {
     $ngx_feature_test;
@@ -23,34 +32,56 @@
 
 END
 
-test="$CC_WARN $CC_TEST_FLAGS -o $NGX_AUTOTEST $NGX_AUTOTEST.c \
-      $ngx_feature_libs"
-eval "$test >> $NGX_ERR 2>&1"
+
+ngx_test="$CC $CC_TEST_FLAGS $CC_WARN $CC_AUX_FLAGS \
+          -o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs"
+eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
+
 
 if [ -x $NGX_AUTOTEST ]; then
 
     if [ $ngx_feature_run = yes ]; then
+
        if $NGX_AUTOTEST 2>&1 > /dev/null; then
            echo " found"
-           have=HAVE_$feature . auto/have
            ngx_found=yes
+
+           if test -n "$ngx_feature_name"; then
+               have=$ngx_have_feature . auto/have
+           fi
+
+           #STUB
+           if test -n "$ngx_feature_name"; then
+               have=$ngx_have_feature0 . auto/have
+           fi
+
        else
            echo " found but is not working"
        fi
 
     else
        echo " found"
-       have=HAVE_$feature . auto/have
        ngx_found=yes
+
+       if test -n "$ngx_feature_name"; then
+           have=$ngx_have_feature . auto/have
+       fi
+
+       #STUB
+       if test -n "$ngx_feature_name"; then
+           have=$ngx_have_feature0 . auto/have
+       fi
+
     fi
 
 else
     echo " not found"
-    echo "---------" >> $NGX_ERR
-    cat $NGX_AUTOTEST.c >> $NGX_ERR
-    echo "---------" >> $NGX_ERR
-    echo $test >> $NGX_ERR
-    echo "---------" >> $NGX_ERR
+
+    echo "----------"    >> $NGX_AUTOCONF_ERR
+    cat $NGX_AUTOTEST.c  >> $NGX_AUTOCONF_ERR
+    echo "----------"    >> $NGX_AUTOCONF_ERR
+    echo $ngx_test       >> $NGX_AUTOCONF_ERR
+    echo "----------"    >> $NGX_AUTOCONF_ERR
 fi
 
 rm $NGX_AUTOTEST*
diff --git a/auto/fmt/fmt b/auto/fmt/fmt
index 980641f..a316d9b 100644
--- a/auto/fmt/fmt
+++ b/auto/fmt/fmt
@@ -2,14 +2,21 @@
 # Copyright (C) Igor Sysoev
 
 
-echo $ngx_n "checking for $ngx_type printf() format ..." $ngx_c
-echo >> $NGX_ERR
-echo "checking for $ngx_type printf() format" >> $NGX_ERR
+echo $ngx_n "checking for $ngx_type printf() format ...$ngx_c"
 
-ngx_fmt=no
-comma=
+cat << END >> $NGX_AUTOCONF_ERR
 
-for fmt in $ngx_formats
+----------------------------------------
+checking for $ngx_type printf() format
+
+END
+
+
+ngx_format=no
+ngx_comma=
+
+
+for ngx_fmt in $ngx_formats
 do
 
     cat << END > $NGX_AUTOTEST.c
@@ -18,52 +25,63 @@
 #include <sys/time.h>
 #include <stdio.h>
 #include <sys/resource.h>
-$NGX_INTTYPES_H
-$NGX_AUTO_CONFIG
+$NGX_INCLUDE_INTTYPES_H
+$NGX_INCLUDE_AUTO_CONFIG_H
 
 int main() {
-    printf("$fmt", ($ngx_type) $ngx_max_value);
+    printf("$ngx_fmt", ($ngx_type) $ngx_max_value);
     return 0;
 }
 
 END
 
-    eval "$CC_WARN $CC_TEST_FLAGS -o $NGX_AUTOTEST $NGX_AUTOTEST.c \
-          >> $NGX_ERR 2>&1"
+    ngx_test="$CC $CC_TEST_FLAGS $CC_WARN $CC_AUX_FLAGS \
+              -o $NGX_AUTOTEST $NGX_AUTOTEST.c"
+    eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
 
-    max_value=`echo $ngx_max_value | sed -e "s/L*\$//"`
+    ngx_max_val=`echo $ngx_max_value | sed -e "s/L*\$//"`
 
     if [ -x $NGX_AUTOTEST ]; then
-        if [ "`$NGX_AUTOTEST`" = $max_value ]; then
+
+        if [ "`$NGX_AUTOTEST`" = $ngx_max_val ]; then
+
             if [ $ngx_fmt_collect = yes ]; then
-                echo $ngx_n "$comma \"${fmt}\" is appropriate" $ngx_c
+                echo $ngx_n "$ngx_comma \"${ngx_fmt}\" is appropriate$ngx_c"
             else
-                echo $ngx_n "$comma \"${fmt}\" used" $ngx_c
+                echo $ngx_n "$ngx_comma \"${ngx_fmt}\" used$ngx_c"
             fi
-            ngx_fmt=$fmt
+
+            ngx_format=$ngx_fmt
         fi
     fi
 
-    rm $NGX_AUTOTEST*
+    rm -f $NGX_AUTOTEST
 
-    if [ $ngx_fmt != no ]; then
+    if [ $ngx_format != no ]; then
         if [ $ngx_fmt_collect = yes ]; then
-            eval "ngx_${ngx_size}_fmt=\"\${ngx_${ngx_size}_fmt} \$ngx_fmt\""
-            comma=","
+            eval "ngx_${ngx_size}_fmt=\"\${ngx_${ngx_size}_fmt} \$ngx_format\""
+            ngx_comma=","
             continue
         else
             break
         fi
     fi
 
-    echo $ngx_n "$comma \"${fmt}\" is not appropriate" $ngx_c
-    comma=","
+    echo $ngx_n "$ngx_comma \"${ngx_fmt}\" is not appropriate$ngx_c"
+    ngx_comma=","
+
+    echo "----------"    >> $NGX_AUTOCONF_ERR
+    cat $NGX_AUTOTEST.c  >> $NGX_AUTOCONF_ERR
+    echo "----------"    >> $NGX_AUTOCONF_ERR
+    echo $ngx_test       >> $NGX_AUTOCONF_ERR
+    echo "----------"    >> $NGX_AUTOCONF_ERR
 done
 
 echo
 
-if [ $ngx_fmt = no ]; then
+if [ $ngx_format = no ]; then
     echo "$0: error: printf() $ngx_type format not found"
+
     exit 1
 fi
 
@@ -72,7 +90,7 @@
     cat << END >> $NGX_AUTO_CONFIG_H
 
 #ifndef $ngx_fmt_name
-#define $ngx_fmt_name  "$ngx_fmt"
+#define $ngx_fmt_name  "$ngx_format"
 #endif
 
 END
diff --git a/auto/fmt/ptrfmt b/auto/fmt/ptrfmt
index 163ca59..32ba8a4 100644
--- a/auto/fmt/ptrfmt
+++ b/auto/fmt/ptrfmt
@@ -2,71 +2,85 @@
 # Copyright (C) Igor Sysoev
 
 
-echo $ngx_n "checking for $ngx_type printf() format ..." $ngx_c
-echo >> $NGX_ERR
-echo "checking for $ngx_type printf() format" >> $NGX_ERR
+echo $ngx_n "checking for $ngx_type printf() format ...$ngx_c"
 
-ngx_fmt=no
-comma=
-fmtX=
+cat << END >> $NGX_AUTOCONF_ERR
 
-for fmt in $ngx_formats
+----------------------------------------
+checking for $ngx_type printf() format
+
+END
+
+
+ngx_format=no
+ngx_comma=
+ngx_fmt_x=
+
+for ngx_fmt in $ngx_formats
 do
 
     cat << END > $NGX_AUTOTEST.c
 
 int main() {
-    printf("$fmt", ($ngx_type) $ngx_max_value);
+    printf("$ngx_fmt", ($ngx_type) $ngx_max_value);
     return 0;
 }
 
 END
 
-    eval "$CC_WARN $CC_TEST_FLAGS -o $NGX_AUTOTEST $NGX_AUTOTEST.c \
-          >> $NGX_ERR 2>&1"
+    ngx_test="$CC $CC_TEST_FLAGS $CC_WARN $CC_AUX_FLAGS \
+              -o $NGX_AUTOTEST $NGX_AUTOTEST.c"
+    eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
 
-    max_value=`echo $ngx_max_value | sed -e "s/L*\$//"`
+    ngx_max_val=`echo $ngx_max_value | sed -e "s/L*\$//"`
 
     if [ -x $NGX_AUTOTEST ]; then
-        if [ "`$NGX_AUTOTEST`" = $max_value ]; then
-            ngx_fmt=$fmt
+        if [ "`$NGX_AUTOTEST`" = $ngx_max_val ]; then
+            ngx_format=$ngx_fmt
         fi
     fi
 
-    rm $NGX_AUTOTEST*
+    rm $NGX_AUTOTEST
 
-    if [ $ngx_fmt != no ]; then
+    if [ $ngx_format != no ]; then
         break
     fi
 
-    fmtX=`echo $fmt | sed -e "s/d/X/"`
+    ngx_fmt_x=`echo $ngx_fmt | sed -e "s/d/X/"`
 
-    echo $ngx_n "$comma \"${fmtX}\" is not appropriate" $ngx_c
-    comma=","
+    echo $ngx_n "$ngx_comma \"${ngx_fmt_x}\" is not appropriate$ngx_c"
+    ngx_comma=","
+
+    echo "----------"    >> $NGX_AUTOCONF_ERR
+    cat $NGX_AUTOTEST.c  >> $NGX_AUTOCONF_ERR
+    echo "----------"    >> $NGX_AUTOCONF_ERR
+    echo $ngx_test       >> $NGX_AUTOCONF_ERR
+    echo "----------"    >> $NGX_AUTOCONF_ERR
 done
 
 
-if [ $ngx_fmt = no ]; then
+if [ $ngx_format = no ]; then
     echo "$0: error: printf() $ngx_type format not found"
+
     exit 1
 fi
 
 
 if [ $ngx_ptr_size = 4 ]; then
-    fmtX="%0`expr 2 \* $ngx_ptr_size`"
+    ngx_fmt_x="%0`expr 2 \* $ngx_ptr_size`"
 else
-    fmtX="%"
+    ngx_fmt_x="%"
 fi
 
-ngx_fmt=`echo $ngx_fmt | sed -e "s/d/X/" -e "s/^%/$fmtX/"`
+ngx_format=`echo $ngx_format | sed -e "s/d/X/" -e "s/^%/$ngx_fmt_x/"`
 
-echo "$comma \"${ngx_fmt}\" used"
+echo "$ngx_comma \"${ngx_format}\" used"
 
 
 cat << END >> $NGX_AUTO_CONFIG_H
 
 #ifndef $ngx_fmt_name
-#define $ngx_fmt_name  "$ngx_fmt"
+#define $ngx_fmt_name  "$ngx_format"
 #endif
 
 END
diff --git a/auto/headers b/auto/headers
index 2bfa685..29eec60 100644
--- a/auto/headers
+++ b/auto/headers
@@ -2,5 +2,7 @@
 # Copyright (C) Igor Sysoev
 
 
-ngx_inc="unistd.h"; . auto/inc
-ngx_inc="inttypes.h"; . auto/inc
+ngx_include="unistd.h";    . auto/include
+ngx_include="inttypes.h";  . auto/include
+ngx_include="limits.h";    . auto/include
+ngx_include="sys/filio.h"; . auto/include
diff --git a/auto/inc b/auto/inc
deleted file mode 100644
index 8671022..0000000
--- a/auto/inc
+++ /dev/null
@@ -1,35 +0,0 @@
-
-# Copyright (C) Igor Sysoev
-
-
-echo $ngx_n "checking for $ngx_inc ..." $ngx_c
-echo >> $NGX_ERR
-echo "checking for $ngx_inc" >> $NGX_ERR
-
-ngx_found=no
-
-inc=`echo $ngx_inc | sed -e 's/\./_/' | sed -e 's/\//_/' | tr '[a-z]' '[A-Z]'`
-
-cat << END > $NGX_AUTOTEST.c
-
-#include <$ngx_inc>
-
-int main() {
-    return 0;
-}
-
-END
-
-eval "${CC} -o $NGX_AUTOTEST $NGX_AUTOTEST.c >> $NGX_ERR 2>&1"
-
-if [ -x $NGX_AUTOTEST ]; then
-    echo " found"
-    have=HAVE_$inc . auto/have
-    eval "NGX_$inc='#include <$ngx_inc>'"
-    ngx_found=yes
-
-else
-    echo " not found"
-fi
-
-rm $NGX_AUTOTEST*
diff --git a/auto/include b/auto/include
new file mode 100644
index 0000000..b369169
--- /dev/null
+++ b/auto/include
@@ -0,0 +1,66 @@
+
+# Copyright (C) Igor Sysoev
+
+
+echo $ngx_n "checking for $ngx_include ...$ngx_c"
+
+cat << END >> $NGX_AUTOCONF_ERR
+
+----------------------------------------
+checking for $ngx_include
+
+END
+
+
+ngx_found=no
+
+cat << END > $NGX_AUTOTEST.c
+
+#include <$ngx_include>
+
+int main() {
+    return 0;
+}
+
+END
+
+
+ngx_test="$CC -o $NGX_AUTOTEST $NGX_AUTOTEST.c"
+
+eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
+
+if [ -x $NGX_AUTOTEST ]; then
+
+    ngx_found=yes
+
+    echo " found"
+
+    ngx_name=`echo $ngx_include | sed -e 's/\./_/' -e 's/\//_/' \
+                  |  tr '[a-z]' '[A-Z]'`
+
+
+    cat << END >> $NGX_AUTO_HEADERS_H
+
+#ifndef NGX_HAVE_$ngx_name
+#define NGX_HAVE_$ngx_name  1
+#endif
+
+END
+
+
+    eval "NGX_INCLUDE_$ngx_name='#include <$ngx_include>'"
+
+    #STUB 
+    eval "NGX_$ngx_name='#include <$ngx_include>'"
+
+else
+    echo " not found"
+
+    echo "----------"    >> $NGX_AUTOCONF_ERR
+    cat $NGX_AUTOTEST.c  >> $NGX_AUTOCONF_ERR
+    echo "----------"    >> $NGX_AUTOCONF_ERR
+    echo $ngx_test       >> $NGX_AUTOCONF_ERR
+    echo "----------"    >> $NGX_AUTOCONF_ERR
+fi
+
+rm $NGX_AUTOTEST*
diff --git a/auto/init b/auto/init
index bc4d8bb..080cc28 100644
--- a/auto/init
+++ b/auto/init
@@ -2,31 +2,33 @@
 # Copyright (C) Igor Sysoev
 
 
+NGX_MAKEFILE=$NGX_OBJS/Makefile
+NGX_MODULES_C=$NGX_OBJS/ngx_modules.c
+
+NGX_AUTO_HEADERS_H=$NGX_OBJS/ngx_auto_headers.h
+NGX_AUTO_CONFIG_H=$NGX_OBJS/ngx_auto_config.h
+
+NGX_AUTOTEST=$NGX_OBJS/autotest
+NGX_AUTOCONF_ERR=$NGX_OBJS/autoconf.err
+
+# STUBs
+OBJS=$NGX_OBJS
+NGX_ERR=$OBJS/autoconf.err
 MAKEFILE=$OBJS/Makefile
 
-NGX_AUTO_CONFIG_H=$OBJS/ngx_auto_config.h
-NGX_MODULES_C=$OBJS/ngx_modules.c
 
-NGX_AUTOTEST=$OBJS/autotest
-NGX_ERR=$OBJS/autoconf.err
-
-CC_WARN=$CC
-
-PCH=NO
-USEPCH=
-
-OBJEXT=
-BINEXT=
-DIRSEP='\/'
-MAKE_SL=NO
+NGX_PCH=
+NGX_USE_PCH=
 
 
-# checking echo's "-n" option and "\c" capabilties
+# check the echo's "-n" option and "\c" capability
 
 if echo "test\c" | grep c >/dev/null; then
+
     if echo -n test | grep n >/dev/null; then
         ngx_n=
         ngx_c=
+
     else
         ngx_n=-n
         ngx_c=
@@ -38,19 +40,18 @@
 fi
 
 
+# create Makefile
 
-if test ! -f Makefile; then
-
-    cat << END > Makefile
+cat << END > Makefile
 
 build:
-	\$(MAKE) -f $OBJS/Makefile
+	\$(MAKE) -f $NGX_MAKEFILE
 
 install:
-	\$(MAKE) -f $OBJS/Makefile install
+	\$(MAKE) -f $NGX_MAKEFILE install
 
 clean:
-	rm -rf Makefile $OBJS
+	rm -rf Makefile $NGX_OBJS
 
 upgrade:
 	$SBIN_PATH -t
@@ -58,7 +59,4 @@
 	sleep 1
 	test -f $PID_PATH.newbin
 	kill -WINCH \`cat $PID_PATH\`
-
 END
-
-fi
diff --git a/auto/install b/auto/install
index 57e3019..0da9b6d 100644
--- a/auto/install
+++ b/auto/install
@@ -8,7 +8,7 @@
 
 	test -d `dirname $SBIN_PATH` || mkdir -p `dirname $SBIN_PATH`
 	test ! -f $SBIN_PATH || mv $SBIN_PATH $SBIN_PATH.old
-	cp nginx $SBIN_PATH
+	cp $OBJS/nginx $SBIN_PATH
 
 	test -d `dirname $CONF_PATH` || mkdir -p `dirname $CONF_PATH`
 
diff --git a/auto/lib/md5/conf b/auto/lib/md5/conf
index 748bea4..623986f 100644
--- a/auto/lib/md5/conf
+++ b/auto/lib/md5/conf
@@ -15,14 +15,14 @@
 
     CORE_INCS="$CORE_INCS $MD5"
 
-    case "$CC" in
+    case "$NGX_CC_NAME" in
 
-        cl | wcl386 | bcc32)
+        msvc | owc | bcc)
             LINK_DEPS="$LINK_DEPS $MD5/md5.lib"
             CORE_LIBS="$CORE_LIBS $MD5/md5.lib"
         ;;
 
-        *icc)
+        icc)
             LINK_DEPS="$LINK_DEPS $MD5/libmd5.a"
 
             # to allow -ipo optimization we link with the *.o but not library
@@ -45,20 +45,19 @@
 
     if [ $PLATFORM != win32 ]; then
         MD5=NO
-        ngx_lib_cflags=
 
         # Solaris 8/9
 
-        ngx_lib_inc="#include <sys/types.h>
-#include <md5.h>"
-        ngx_lib="rsaref md5 library"
-        ngx_lib_test="MD5_CTX md5; MD5Init(&md5)"
-        ngx_libs=-lmd5
-        . auto/lib/test
-
+        ngx_feature="rsaref md5 library"
+        ngx_feature_name="rsaref_md5"
+        ngx_feature_run=no
+        ngx_feature_incs="#include <md5.h>"
+        ngx_feature_libs="-lmd5"
+        ngx_feature_test="MD5_CTX md5; MD5Init(&md5)"
+        . auto/feature
 
         if [ $ngx_found = yes ]; then
-            CORE_LIBS="$CORE_LIBS $ngx_libs"
+            CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
             MD5=YES
             MD5_LIB=md5
             ngx_found=no
@@ -66,15 +65,18 @@
         else
             # FreeBSD
 
-            ngx_lib="rsaref md library"
-            ngx_lib_test="MD5_CTX md5; MD5Init(&md5)"
-            ngx_libs=-lmd
-            . auto/lib/test
+            ngx_feature="rsaref md library"
+            ngx_feature_name="rsaref_md5"
+            ngx_feature_run=no
+            ngx_feature_incs="#include <md5.h>"
+            ngx_feature_libs="-lmd"
+            ngx_feature_test="MD5_CTX md5; MD5Init(&md5)"
+            . auto/feature
         fi
 
 
         if [ $ngx_found = yes ]; then
-            CORE_LIBS="$CORE_LIBS $ngx_libs"
+            CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
             MD5=YES
             MD5_LIB=md
             ngx_found=no
@@ -84,19 +86,20 @@
 
                # OpenSSL crypto library
 
-               ngx_lib_inc="#include <openssl/md5.h>"
-               ngx_lib="OpenSSL md5 crypto library"
-               ngx_lib_test="MD5_CTX md5; MD5_Init(&md5)"
-               ngx_libs=-lcrypto
-               . auto/lib/test
+               ngx_feature="OpenSSL md5 crypto library"
+               ngx_feature_name="OpenSSL_md5"
+               ngx_feature_run=no
+               ngx_feature_incs="#include <openssl/md5.h>"
+               ngx_feature_libs="-lcrypto"
+               ngx_feature_test="MD5_CTX md5; MD5_Init(&md5)"
+               . auto/feature
             fi
         fi
 
 
         if [ $ngx_found = yes ]; then
-            have=HAVE_OPENSSL_MD5 . auto/have
             have=HAVE_OPENSSL_MD5_H . auto/have
-            CORE_LIBS="$CORE_LIBS $ngx_libs"
+            CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
             MD5=YES
             MD5_LIB=crypto
         fi
diff --git a/auto/lib/md5/make b/auto/lib/md5/make
index f718e6c..6e2834e 100644
--- a/auto/lib/md5/make
+++ b/auto/lib/md5/make
@@ -25,7 +25,7 @@
 case $PLATFORM in
 
     win32)
-        line=`echo $MD5/md5.lib: | sed -e "s/\//$DIRSEP/g"`
+        line=`echo $MD5/md5.lib: | sed -e "s/\//$ngx_regex_dirsep/g"`
         echo "$line"                                              >> $MAKEFILE
     ;;
 
@@ -42,7 +42,7 @@
 case $PLATFORM in
 
     win32)
-        md5=`echo $MD5 | sed -e "s/\//$DIRSEP/g"`
+        md5=`echo $MD5 | sed -e "s/\//$ngx_regex_dirsep/g"`
 
         cp auto/lib/md5/$makefile $MD5
         echo "	cd $md5"                                          >> $MAKEFILE
diff --git a/auto/lib/openssl/conf b/auto/lib/openssl/conf
index 37c084f..8ef4f3a 100644
--- a/auto/lib/openssl/conf
+++ b/auto/lib/openssl/conf
@@ -19,23 +19,22 @@
 else
 
     if [ $PLATFORM != win32 ]; then
-            OPENSSL=NO
-            ngx_lib_cflags=
+        OPENSSL=NO
 
-            ngx_lib_inc="#include <openssl/ssl.h>"
-            ngx_lib="OpenSSL library"
-            ngx_lib_test="SSL_library_init()"
-            ngx_libs="-lssl -lcrypto"
-            . auto/lib/test
-
+        ngx_feature="OpenSSL library"
+        ngx_feature_name="OpenSSL"
+        ngx_feature_run=no
+        ngx_feature_incs="#include <openssl/ssl.h>"
+        ngx_feature_libs="-lssl -lcrypto"
+        ngx_feature_test="SSL_library_init()"
+        . auto/feature
 
         if [ $ngx_found = yes ]; then
             have=NGX_OPENSSL . auto/have
             CORE_DEPS="$CORE_DEPS $OPENSSL_DEPS"
             CORE_SRCS="$CORE_SRCS $OPENSSL_SRCS"
-            CORE_LIBS="$CORE_LIBS $ngx_libs"
+            CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
             OPENSSL=YES
-            ngx_found=no
         fi
 
     fi
diff --git a/auto/lib/pcre/conf b/auto/lib/pcre/conf
index 16feffa..cd516e1 100644
--- a/auto/lib/pcre/conf
+++ b/auto/lib/pcre/conf
@@ -7,18 +7,18 @@
     CORE_DEPS="$CORE_DEPS $REGEX_DEPS"
     CORE_SRCS="$CORE_SRCS $REGEX_SRCS"
 
-    case "$CC" in
+    case "$NGX_CC_NAME" in
 
-        cl | wcl386 | bcc32)
-            have=HAVE_PCRE . auto/have
+        msvc | owc | bcc)
+            have=NGX_PCRE . auto/have
             have=PCRE_STATIC . auto/have
             CORE_DEPS="$CORE_DEPS $PCRE/pcre.h"
             LINK_DEPS="$LINK_DEPS $PCRE/pcre.lib"
             CORE_LIBS="$CORE_LIBS $PCRE/pcre.lib"
         ;;
 
-        *icc)
-            have=HAVE_PCRE . auto/have
+        icc)
+            have=NGX_PCRE . auto/have
             CORE_DEPS="$CORE_DEPS $PCRE/pcre.h"
 
             LINK_DEPS="$LINK_DEPS $PCRE/.libs/libpcre.a"
@@ -31,7 +31,7 @@
         ;;
 
         *)
-            have=HAVE_PCRE . auto/have
+            have=NGX_PCRE . auto/have
             CORE_DEPS="$CORE_DEPS $PCRE/pcre.h"
             LINK_DEPS="$LINK_DEPS $PCRE/.libs/libpcre.a"
             CORE_LIBS="$CORE_LIBS $PCRE/.libs/libpcre.a"
@@ -43,44 +43,25 @@
 else
 
     if [ $PLATFORM != win32 ]; then
-            PCRE=NO
-            ngx_lib_cflags=
+        PCRE=NO
 
-            # Linux
-
-            ngx_lib_inc="#include <pcre.h>"
-            ngx_lib="PCRE library"
-            ngx_lib_test="pcre *re; re = pcre_compile(NULL, 0, NULL, 0, NULL)"
-            ngx_libs="-lpcre"
-            . auto/lib/test
-
+        # FreeBSD PCRE port requires --with-cc-opt="-I /usr/local/include"
+        #                            --with-ld-opt="-L /usr/local/lib"
+        
+        ngx_feature="PCRE library"
+        ngx_feature_name="PCRE"
+        ngx_feature_run=no
+        ngx_feature_incs="#include <pcre.h>"
+        ngx_feature_libs="-lpcre"
+        ngx_feature_test="pcre *re; re = pcre_compile(NULL, 0, NULL, 0, NULL)"
+        . auto/feature
 
         if [ $ngx_found = yes ]; then
-            have=HAVE_PCRE . auto/have
             CORE_DEPS="$CORE_DEPS $REGEX_DEPS"
             CORE_SRCS="$CORE_SRCS $REGEX_SRCS"
-            CORE_LIBS="$CORE_LIBS $ngx_libs"
+            CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
             PCRE=YES
             ngx_found=no
-
-        else
-            # FreeBSD PCRE port.
-
-            ngx_lib="PCRE library in /usr/local/"
-            ngx_lib_cflags="-I /usr/local/include"
-            ngx_libs="-L /usr/local/lib -lpcre"
-            . auto/lib/test
-        fi
-
-
-        if [ $ngx_found = yes ]; then
-            have=HAVE_PCRE . auto/have
-            CORE_DEPS="$CORE_DEPS $REGEX_DEPS"
-            CORE_INCS="$CORE_INCS /usr/local/include"
-            CORE_SRCS="$CORE_SRCS $REGEX_SRCS"
-            CORE_LIBS="$CORE_LIBS $ngx_libs"
-            PCRE=YES
         fi
     fi
-
 fi
diff --git a/auto/lib/pcre/make b/auto/lib/pcre/make
index fa7bf27..714994d 100644
--- a/auto/lib/pcre/make
+++ b/auto/lib/pcre/make
@@ -29,8 +29,8 @@
         cp auto/lib/pcre/patch.config.in $PCRE
         cp auto/lib/pcre/$makefile $PCRE
 
-        pcre=`echo $PCRE | sed -e "s/\//$DIRSEP/g"`
-        line=`echo $PCRE/pcre.h: | sed -e "s/\//$DIRSEP/g"`
+        pcre=`echo $PCRE | sed -e "s/\//$ngx_regex_dirsep/g"`
+        line=`echo $PCRE/pcre.h: | sed -e "s/\//$ngx_regex_dirsep/g"`
 
         echo "$line"                                              >> $MAKEFILE
         echo "	cd $pcre"                                         >> $MAKEFILE
@@ -39,7 +39,7 @@
         echo                                                      >> $MAKEFILE
 
         line="$PCRE/pcre.lib:	$PCRE/pcre.h"
-        line=`echo $line | sed -e "s/\//$DIRSEP/g"`
+        line=`echo $line | sed -e "s/\//$ngx_regex_dirsep/g"`
 
         echo "$line"                                              >> $MAKEFILE
         echo "	cd $pcre"                                         >> $MAKEFILE
diff --git a/auto/lib/test b/auto/lib/test
index 7dfaafe..6821b51 100644
--- a/auto/lib/test
+++ b/auto/lib/test
@@ -2,14 +2,26 @@
 # Copyright (C) Igor Sysoev
 
 
-echo $ngx_n "checking for $ngx_lib ..." $ngx_c
-echo >> $NGX_ERR
-echo "checking for $ngx_lib library" >> $NGX_ERR
+echo $ngx_n "checking for $ngx_lib ...$ngx_c"
+
+cat << END >> $NGX_AUTOCONF_ERR
+
+----------------------------------------
+checking for $ngx_lib
+
+END
 
 ngx_found=no
 
-echo "$ngx_lib_inc" > $NGX_AUTOTEST.c
-echo "int main() { $ngx_lib_test; return 0; }" >> $NGX_AUTOTEST.c
+cat << END > $NGX_AUTOTEST.c
+
+$ngx_lib_incs
+
+int main() {
+    $ngx_lib_test;
+    return 0;
+}
+
 
 eval "$CC $cc_test_flags $ngx_lib_cflags \
      -o $NGX_AUTOTEST $NGX_AUTOTEST.c $ngx_libs \
diff --git a/auto/lib/zlib/conf b/auto/lib/zlib/conf
index a01eebe..f833d61 100644
--- a/auto/lib/zlib/conf
+++ b/auto/lib/zlib/conf
@@ -5,14 +5,14 @@
 if [ $ZLIB != NONE ]; then
     CORE_INCS="$CORE_INCS $ZLIB"
 
-    case "$CC" in
+    case "$NGX_CC_NAME" in
 
-        cl | wcl386 | bcc32)
+        msvc | owc | bcc)
             LINK_DEPS="$LINK_DEPS $ZLIB/zlib.lib"
             CORE_LIBS="$CORE_LIBS $ZLIB/zlib.lib"
         ;;
 
-        *icc)
+        icc)
             LINK_DEPS="$LINK_DEPS $ZLIB/libz.a"
 
             # to allow -ipo optimization we link with the *.o but not library
@@ -38,22 +38,23 @@
 else
 
     if [ $PLATFORM != win32 ]; then
+        ZLIB=NO
 
         # FreeBSD, Solaris, Linux
 
-        ngx_lib_cflags=
-        ngx_lib_inc="#include <zlib.h>"
-        ngx_lib="zlib library"
-        ngx_lib_test="z_stream z; deflate(&z, Z_NO_FLUSH)"
-        ngx_libs=-lz
-        . auto/lib/test
+        ngx_feature="zlib library"
+        ngx_feature_name="zlib"
+        ngx_feature_run=no
+        ngx_feature_incs="#include <zlib.h>"
+        ngx_feature_libs="-lz"
+        ngx_feature_test="z_stream z; deflate(&z, Z_NO_FLUSH)"
+        . auto/feature
 
 
         if [ $ngx_found = yes ]; then
-            CORE_LIBS="$CORE_LIBS $ngx_libs"
+            CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
             ZLIB=YES
-        else
-            ZLIB=NO
+            ngx_found=no
         fi
     fi
 
diff --git a/auto/lib/zlib/make b/auto/lib/zlib/make
index 0ced9a2..5822762 100644
--- a/auto/lib/zlib/make
+++ b/auto/lib/zlib/make
@@ -26,7 +26,7 @@
 case $PLATFORM in
 
     win32)
-        line=`echo $ZLIB/zlib.lib: | sed -e "s/\//$DIRSEP/g"`
+        line=`echo $ZLIB/zlib.lib: | sed -e "s/\//$ngx_regex_dirsep/g"`
         echo "$line"                                              >> $MAKEFILE
     ;;
 
@@ -43,7 +43,7 @@
 case $PLATFORM in
 
     win32)
-        zlib=`echo $ZLIB | sed -e "s/\//$DIRSEP/g"`
+        zlib=`echo $ZLIB | sed -e "s/\//$ngx_regex_dirsep/g"`
 
         cp auto/lib/zlib/$makefile $ZLIB
         echo "	cd $zlib"                                         >> $MAKEFILE
diff --git a/auto/make b/auto/make
index fee8a6f..8744d1f 100644
--- a/auto/make
+++ b/auto/make
@@ -8,353 +8,271 @@
          $OBJS/src/imap
 
 
-echo "CC = $CC"                                                   > $MAKEFILE
-echo "CPP = $CPP"                                                 >> $MAKEFILE
-echo "LINK = $LINK"                                               >> $MAKEFILE
+ngx_objs_dir=$NGX_OBJS$ngx_regex_dirsep
+ngx_use_pch=`echo $NGX_USE_PCH | sed -e "s/\//$ngx_regex_dirsep/g"`
+
+
+cat << END                                                    >> $NGX_MAKEFILE
+
+CC =	$CC
+CFLAGS = $CFLAGS
+CPP =	$CPP
+LINK =	$LINK
+
+END
+
 if [ "$CC" = wcl386 ]; then
-    echo MAKE = wmake                                             >> $MAKEFILE
-fi
-echo "CFLAGS = $CFLAGS"                                           >> $MAKEFILE
-echo                                                              >> $MAKEFILE
+    echo MAKE = wmake                                         >> $NGX_MAKEFILE
 
+    ngx_regex_cont=' '
+    ngx_cont=' '
+    ngx_tab=' '
 
-if [ $MAKE_SL = YES ]; then
-    echo                                                          >> $MAKEFILE
 fi
 
-all_inc="$CORE_INCS $OBJS $HTTP_INCS $IMAP_INCS"
-all_inc=`echo " $all_inc" | sed -e "s/ \([^ ]\)/ $INCOPT\1/g"`
-all_inc=`echo $all_inc | sed -e "s/\//$DIRSEP/g"`
 
-echo "ALL_INCS = $all_inc"                                        >> $MAKEFILE
-echo                                                              >> $MAKEFILE
+# ALL_INCS, required by OpenWatcom C precompiled headers
 
-all_srcs="$CORE_SRCS"
+ngx_incs=`echo $CORE_INCS $OBJS $HTTP_INCS $IMAP_INCS\
+    | sed -e "s/  *\([^ ][^ ]*\)/$ngx_regex_cont$ngx_include_opt\1/g" \
+          -e "s/\//$ngx_regex_dirsep/g"`
+
+cat << END                                                    >> $NGX_MAKEFILE
+
+ALL_INCS = $ngx_include_opt$ngx_incs
+
+END
 
 
-# CORE_DEPS
-
-if [ $MAKE_SL = YES ]; then
-    echo $ngx_n "CORE_DEPS =" $ngx_c                              >> $MAKEFILE
-else
-    echo "CORE_DEPS = \\"                                         >> $MAKEFILE
-fi
-
-for dep in $CORE_DEPS
-do
-    dep=`echo $dep | sed -e "s/\//$DIRSEP/g"`
-
-    if [ $MAKE_SL = YES ]; then
-        echo $ngx_n " $dep" $ngx_c                                >> $MAKEFILE
-    else
-        echo "	$dep \\"                                          >> $MAKEFILE
-    fi
-done
-echo                                                              >> $MAKEFILE
+ngx_all_srcs="$CORE_SRCS"
 
 
-# CORE_INCS
+# the core dependences and include pathes
 
-if [ $MAKE_SL = YES ]; then
-    echo                                                          >> $MAKEFILE
-fi
+ngx_deps=`echo $CORE_DEPS $NGX_PCH \
+    | sed -e "s/  *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
+          -e "s/\//$ngx_regex_dirsep/g"`
 
-inc="$CORE_INCS $OBJS"
-inc=`echo " $inc" | sed -e "s/ \([^ ]\)/ $INCOPT\1/g" -e "s/\//$DIRSEP/g"`
+ngx_incs=`echo $CORE_INCS $OBJS \
+    | sed -e "s/  *\([^ ][^ ]*\)/$ngx_regex_cont$ngx_include_opt\1/g" \
+          -e "s/\//$ngx_regex_dirsep/g"`
 
-echo "CORE_INCS = $inc"                                           >> $MAKEFILE
-echo                                                              >> $MAKEFILE
+cat << END                                                    >> $NGX_MAKEFILE
 
+CORE_DEPS = $ngx_deps
+
+
+CORE_INCS = $ngx_include_opt$ngx_incs
+
+END
+
+
+# the http dependences and include pathes
 
 if [ $HTTP = YES ]; then
 
-    all_srcs="$all_srcs $HTTP_SRCS"
+    ngx_all_srcs="$ngx_all_srcs $HTTP_SRCS"
 
-    # HTTP_DEPS
+    ngx_deps=`echo $HTTP_DEPS \
+        | sed -e "s/  *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
+              -e "s/\//$ngx_regex_dirsep/g"`
 
-    if [ $MAKE_SL = YES ]; then
-        echo $ngx_n "HTTP_DEPS =" $ngx_c                          >> $MAKEFILE
-    else
-        echo "HTTP_DEPS = \\"                                     >> $MAKEFILE
-    fi
+    ngx_incs=`echo $HTTP_INCS \
+        | sed -e "s/  *\([^ ][^ ]*\)/$ngx_regex_cont$ngx_include_opt\1/g" \
+              -e "s/\//$ngx_regex_dirsep/g"`
 
-    for dep in $HTTP_DEPS
-    do
-        dep=`echo $dep | sed -e "s/\//$DIRSEP/g"`
+    cat << END                                                >> $NGX_MAKEFILE
 
-        if [ $MAKE_SL = YES ]; then
-            echo $ngx_n " $dep" $ngx_c                            >> $MAKEFILE
-        else
-            echo "	$dep \\"                                  >> $MAKEFILE
-        fi
-    done
-    echo                                                          >> $MAKEFILE
+HTTP_DEPS = $ngx_deps
 
 
-    # HTTP_INCS
+HTTP_INCS = $ngx_include_opt$ngx_incs
 
-    if [ $MAKE_SL = YES ]; then
-        echo                                                      >> $MAKEFILE
-    fi
-
-    inc="$HTTP_INCS $OBJS"
-    inc=`echo " $inc" | sed -e "s/ \([^ ]\)/ $INCOPT\1/g" -e "s/\//$DIRSEP/g"`
-
-    echo "HTTP_INCS = $inc"                                       >> $MAKEFILE
-    echo                                                          >> $MAKEFILE
+END
 
 fi
 
 
+# the imap dependences and include pathes
+
 if [ $IMAP = YES ]; then
 
-    all_srcs="$all_srcs $IMAP_SRCS"
+    ngx_all_srcs="$ngx_all_srcs $IMAP_SRCS"
 
-    # IMAP_DEPS
+    ngx_deps=`echo $IMAP_DEPS \
+        | sed -e "s/  *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
+              -e "s/\//$ngx_regex_dirsep/g"`
 
-    if [ $MAKE_SL = YES ]; then
-        echo $ngx_n "IMAP_DEPS =" $ngx_c                          >> $MAKEFILE
-    else
-        echo "IMAP_DEPS = \\"                                     >> $MAKEFILE
-    fi
+    ngx_incs=`echo $IMAP_INCS \
+        | sed -e "s/  *\([^ ][^ ]*\)/$ngx_regex_cont$ngx_include_opt\1/g" \
+              -e "s/\//$ngx_regex_dirsep/g"`
 
-    for dep in $IMAP_DEPS
-    do
-        dep=`echo $dep | sed -e "s/\//$DIRSEP/g"`
+    cat << END                                                >> $NGX_MAKEFILE
 
-        if [ $MAKE_SL = YES ]; then
-            echo $ngx_n " $dep" $ngx_c                            >> $MAKEFILE
-        else
-            echo "	$dep \\"                                  >> $MAKEFILE
-        fi
-    done
-    echo                                                          >> $MAKEFILE
+IMAP_DEPS = $ngx_deps
 
 
-    # IMAP_INCS
+IMAP_INCS = $ngx_include_opt$ngx_incs
 
-    if [ $MAKE_SL = YES ]; then
-        echo                                                      >> $MAKEFILE
-    fi
-
-    inc="$IMAP_INCS $OBJS"
-    inc=`echo " $inc" | sed -e "s/ \([^ ]\)/ $INCOPT\1/g" -e "s/\//$DIRSEP/g"`
-
-    echo "IMAP_INCS = $inc"                                       >> $MAKEFILE
-    echo                                                          >> $MAKEFILE
+END
 
 fi
 
 
 # nginx
 
-if [ $MAKE_SL = YES ]; then
-    echo $ngx_n "nginx$BINEXT:	" $ngx_c                          >> $MAKEFILE
-else
-    echo "nginx$BINEXT: \\"                                       >> $MAKEFILE
-fi
+ngx_all_srcs=`echo $ngx_all_srcs | sed -e "s/\//$ngx_regex_dirsep/g"`
+ngx_modules_c=`echo $NGX_MODULES_C | sed -e "s/\//$ngx_regex_dirsep/g"`
 
+ngx_all_objs=`echo $ngx_all_srcs \
+    | sed -e "s/\([^ ]*\.\)cpp/$NGX_OBJS\/\1$ngx_objext/g" \
+          -e "s/\([^ ]*\.\)cc/$NGX_OBJS\/\1$ngx_objext/g" \
+          -e "s/\([^ ]*\.\)c/$NGX_OBJS\/\1$ngx_objext/g" \
+          -e "s/\([^ ]*\.\)S/$NGX_OBJS\/\1$ngx_objext/g"`
 
-# nginx deps
+ngx_modules_obj=`echo $ngx_modules_c | sed -e "s/\(.*\.\)c/\1$ngx_objext/"`
 
-for src in $all_srcs
-do
-    obj=`echo $src | sed -e "s/\.c\$/.$OBJEXT/" -e "s/\.S\$/.$OBJEXT/"`
-    obj=`echo $OBJS/$obj | sed -e "s/\//$DIRSEP/g"`
+ngx_deps=`echo $ngx_all_objs $ngx_modules_obj $LINK_DEPS \
+    | sed -e "s/  *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
+          -e "s/\//$ngx_regex_dirsep/g"`
 
-    if [ $MAKE_SL = YES ]; then
-        echo $ngx_n " $obj" $ngx_c                                >> $MAKEFILE
-    else
-        echo "	$obj \\"                                          >> $MAKEFILE
-    fi
-done
+ngx_objs=`echo $ngx_all_objs $ngx_modules_obj \
+    | sed -e "s/  *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
+          -e "s/\//$ngx_regex_dirsep/g"`
 
-for src in $NGX_MODULES_C $LINK_DEPS
-do
-    obj=`echo $src | sed -e "s/\.c\$/.$OBJEXT/"`
-    obj=`echo $obj | sed -e "s/\//$DIRSEP/g"`
+ngx_libs=${CORE_LIBS:+`echo $NGX_LD_OPT $CORE_LIBS \
+    | sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_regex_cont/"`}
 
-    if [ $MAKE_SL = YES ]; then
-        echo $ngx_n " $obj" $ngx_c                                >> $MAKEFILE
-    else
-        echo "	$obj \\"                                          >> $MAKEFILE
-    fi
-done
-echo                                                              >> $MAKEFILE
+ngx_link=${CORE_LINK:+`echo $CORE_LINK \
+    | sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_regex_cont/"`}
 
+cat << END                                                    >> $NGX_MAKEFILE
 
-# nginx build
+$NGX_OBJS${ngx_dirsep}nginx${ngx_binext}:	$ngx_deps$ngx_spacer
+	\$(LINK) ${ngx_binout}$NGX_OBJS${ngx_dirsep}nginx$ngx_cont$ngx_objs$ngx_libs$ngx_link
 
-if [ $MAKE_SL = YES ]; then
-    echo $ngx_n "	\$(LINK) ${BINOUT}nginx" $ngx_c           >> $MAKEFILE
-else
-    echo "	\$(LINK) ${BINOUT}nginx \\"                       >> $MAKEFILE
-fi
-
-
-# nginx build sources
-
-for src in $all_srcs
-do
-    obj=`echo $src | sed -e "s/\.c\$/.$OBJEXT/" -e "s/\.S\$/.$OBJEXT/"`
-    obj=`echo $OBJS/$obj | sed -e "s/\//$DIRSEP/g"`
-
-    if [ $MAKE_SL = YES ]; then
-        echo $ngx_n " $obj" $ngx_c                                >> $MAKEFILE
-    else
-        echo "	$obj \\"                                          >> $MAKEFILE
-    fi
-done
-
-
-# nginx build ngx_modules.c and libs
-
-obj=`echo $NGX_MODULES_C | sed -e "s/\.c\$/.$OBJEXT/" -e "s/\//$DIRSEP/g"`
-src=`echo $NGX_MODULES_C | sed -e "s/\//$DIRSEP/g"`
-libs=`echo $CORE_LIBS | sed -e "s/\.c\$/.$OBJEXT/" -e "s/\//$DIRSEP/g"`
-link=`echo $CORE_LINK | sed -e "s/\.c\$/.$OBJEXT/" -e "s/\//$DIRSEP/g"`
-
-if [ $MAKE_SL = YES ]; then
-    echo " $obj $libs $CORE_LINK"                                 >> $MAKEFILE
-    echo                                                          >> $MAKEFILE
-else
-    echo "	$obj \\"                                          >> $MAKEFILE
-    echo "	$libs \\"                                         >> $MAKEFILE
-    echo "	$link"                                            >> $MAKEFILE
-    echo                                                          >> $MAKEFILE
-fi
+END
 
 
 # ngx_modules.c
 
-deps="\$(CORE_DEPS)"
-
-if [ $PCH != NO ]; then
-    args="\$(CFLAGS) $USEPCH \$(ALL_INCS)"
+if test -n "$NGX_PCH"; then
+    ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)"
 else
-    args="\$(CFLAGS) $USEPCH \$(CORE_INCS)"
+    ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) \$(CORE_INCS)"
 fi
 
-if [ $MAKE_SL = YES ]; then
-    echo "$obj: $NGX_MODULES_C $deps"                             >> $MAKEFILE
-    echo $ngx_n "	\$(CC) $COMPOPT $args" $ngx_c             >> $MAKEFILE
-    echo " $OBJOUT$obj $src"                                      >> $MAKEFILE
-    echo                                                          >> $MAKEFILE
-else
-    echo "$obj: \\"                                               >> $MAKEFILE
-    echo "	$NGX_MODULES_C $deps"                             >> $MAKEFILE
-    echo "	\$(CC) $COMPOPT $args \\"                         >> $MAKEFILE
-    echo "		$OBJOUT$obj \\"                           >> $MAKEFILE
-    echo "		$src"                                     >> $MAKEFILE
-    echo                                                          >> $MAKEFILE
-fi
+cat << END                                                    >> $NGX_MAKEFILE
+
+$ngx_modules_obj:	\$(CORE_DEPS)$ngx_cont$ngx_modules_c
+	$ngx_cc$ngx_tab$ngx_objout$ngx_modules_obj$ngx_tab$ngx_modules_c
+
+END
 
 
-# core sources
+# the core sources
 
-for src in $CORE_SRCS
+for ngx_src in $CORE_SRCS
 do
-    obj=`echo $src | sed -e "s/\.c\$/.$OBJEXT/" -e "s/\.S\$/.$OBJEXT/"`
-    obj=`echo $OBJS/$obj | sed -e "s/\//$DIRSEP/g"`
-    src=`echo $src | sed -e "s/\//$DIRSEP/g"`
 
-    if [ $MAKE_SL = YES ]; then
-        echo "$obj: $src $deps"                                   >> $MAKEFILE
-        echo "	\$(CC) $COMPOPT $args $OBJOUT$obj $src"           >> $MAKEFILE
-        echo                                                      >> $MAKEFILE
-    else
-        echo "$obj: \\"                                           >> $MAKEFILE
-        echo "	$src $deps"                                       >> $MAKEFILE
-        echo "	\$(CC) $COMPOPT $args \\"                         >> $MAKEFILE
-        echo "		$OBJOUT$obj \\"                           >> $MAKEFILE
-        echo "		$src"                                     >> $MAKEFILE
-        echo                                                      >> $MAKEFILE
-    fi
+    ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"`
+    ngx_obj=`echo $ngx_src \
+        | sed -e "s/^\(.*\.\)cpp$/$ngx_objs_dir\1$ngx_objext/g" \
+              -e "s/^\(.*\.\)cc$/$ngx_objs_dir\1$ngx_objext/g" \
+              -e "s/^\(.*\.\)c$/$ngx_objs_dir\1$ngx_objext/g" \
+              -e "s/^\(.*\.\)S$/$ngx_objs_dir\1$ngx_objext/g"`
+
+    cat << END                                                >> $NGX_MAKEFILE
+
+$ngx_obj:	\$(CORE_DEPS)$ngx_cont$ngx_src
+	$ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src
+
+END
+
 done
 
 
-# http sources
+# the http sources
 
 if [ $HTTP = YES ]; then
 
-    deps="\$(CORE_DEPS) \$(HTTP_DEPS)"
-
-    if [ $PCH != NO ]; then
-        args="\$(CFLAGS) $USEPCH \$(ALL_INCS)"
+    if test -n "$NGX_PCH"; then
+        ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)"
     else
-        args="\$(CFLAGS) $USEPCH \$(CORE_INCS) \$(HTTP_INCS)"
+        ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) \$(CORE_INCS) \$(HTTP_INCS)"
     fi
 
-    for src in $HTTP_SRCS
+    for ngx_src in $HTTP_SRCS
     do
-        obj=`echo $src | sed -e "s/\.c\$/.$OBJEXT/"`
-        obj=`echo $OBJS/$obj | sed -e "s/\//$DIRSEP/g"`
-        src=`echo $src | sed -e "s/\//$DIRSEP/g"`
 
-        if [ $MAKE_SL = YES ]; then
-            echo "$obj: $src $deps"                               >> $MAKEFILE
-            echo "	\$(CC) $COMPOPT $args $OBJOUT$obj $src"   >> $MAKEFILE
-            echo                                                  >> $MAKEFILE
-        else
-            echo "$obj: \\"                                       >> $MAKEFILE
-            echo "	$src $deps"                               >> $MAKEFILE
-            echo "	\$(CC) $COMPOPT $args \\"                 >> $MAKEFILE
-            echo "		$OBJOUT$obj \\"                   >> $MAKEFILE
-            echo "		$src"                             >> $MAKEFILE
-            echo                                                  >> $MAKEFILE
-        fi
-    done
+        ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"`
+        ngx_obj=`echo $ngx_src \
+            | sed -e "s/^\(.*\.\)cpp$/$ngx_objs_dir\1$ngx_objext/g" \
+                  -e "s/^\(.*\.\)cc$/$ngx_objs_dir\1$ngx_objext/g" \
+                  -e "s/^\(.*\.\)c$/$ngx_objs_dir\1$ngx_objext/g" \
+                  -e "s/^\(.*\.\)S$/$ngx_objs_dir\1$ngx_objext/g"`
+
+        cat << END                                            >> $NGX_MAKEFILE
+
+$ngx_obj:	\$(CORE_DEPS) \$(HTTP_DEPS)$ngx_cont$ngx_src
+	$ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src
+
+END
+
+     done
 
 fi
 
 
-# imap sources
+# the imap sources
 
 if [ $IMAP = YES ]; then
 
-    deps="\$(CORE_DEPS) \$(IMAP_DEPS)"
-
-    if [ $PCH != NO ]; then
-        args="\$(CFLAGS) $USEPCH \$(ALL_INCS)"
+    if test -n "$NGX_PCH"; then
+        ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)"
     else
-        args="\$(CFLAGS) $USEPCH \$(CORE_INCS) \$(IMAP_INCS)"
+        ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) \$(CORE_INCS) \$(IMAP_INCS)"
     fi
 
-    for src in $IMAP_SRCS
+    for ngx_src in $IMAP_SRCS
     do
-        obj=`echo $src | sed -e "s/\.c\$/.$OBJEXT/"`
-        obj=`echo $OBJS/$obj | sed -e "s/\//$DIRSEP/g"`
-        src=`echo $src | sed -e "s/\//$DIRSEP/g"`
 
-        if [ $MAKE_SL = YES ]; then
-            echo "$obj: $src $deps"                               >> $MAKEFILE
-            echo "	\$(CC) $COMPOPT $args $OBJOUT$obj $src"   >> $MAKEFILE
-            echo                                                  >> $MAKEFILE
-        else
-            echo "$obj: \\"                                       >> $MAKEFILE
-            echo "	$src $deps"                               >> $MAKEFILE
-            echo "	\$(CC) $COMPOPT $args \\"                 >> $MAKEFILE
-            echo "		$OBJOUT$obj \\"                   >> $MAKEFILE
-            echo "		$src"                             >> $MAKEFILE
-            echo                                                  >> $MAKEFILE
-        fi
-    done
+        ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"`
+        ngx_obj=`echo $ngx_src \
+            | sed -e "s/^\(.*\.\)cpp$/$ngx_objs_dir\1$ngx_objext/g" \
+                  -e "s/^\(.*\.\)cc$/$ngx_objs_dir\1$ngx_objext/g" \
+                  -e "s/^\(.*\.\)c$/$ngx_objs_dir\1$ngx_objext/g" \
+                  -e "s/^\(.*\.\)S$/$ngx_objs_dir\1$ngx_objext/g"`
+
+        cat << END                                            >> $NGX_MAKEFILE
+
+$ngx_obj:	\$(CORE_DEPS) \$(IMAP_DEPS)$ngx_cont$ngx_src
+	$ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src
+
+END
+
+     done
 
 fi
 
 
-# precompiled headers
+# the precompiled headers
 
-if [ $PCH != NO ]; then
-    echo "#include <ngx_config.h>" > $OBJS/pch.c
+if test -n "$NGX_PCH"; then
+    echo "#include <ngx_config.h>" > $OBJS/ngx_pch.c
 
-    pch="$PCH:	src/core/ngx_config.h $OS_CONFIG $OBJS/ngx_auto_config.h"
-    pch=`echo $pch | sed -e "s/\//$DIRSEP/g"`
-    src="\$(CC) \$(CFLAGS) $BUILDPCH $COMPOPT \$(ALL_INCS)"
-    src="$src $OBJOUT$OBJS/pch.obj $OBJS/pch.c"
-    src=`echo $src | sed -e "s/\//$DIRSEP/g"`
+    ngx_pch="src/core/ngx_config.h $OS_CONFIG $OBJS/ngx_auto_config.h"
+    ngx_pch=`echo "$NGX_PCH:	$ngx_pch" | sed -e "s/\//$ngx_regex_dirsep/g"`
 
-    echo "$pch"                                                   >> $MAKEFILE
-    echo "	$src"                                             >> $MAKEFILE
-    echo                                                          >> $MAKEFILE
+    ngx_src="\$(CC) \$(CFLAGS) $NGX_BUILD_PCH $ngx_compile_opt \$(ALL_INCS)"
+    ngx_src="$ngx_src $ngx_objout$OBJS/ngx_pch.obj $OBJS/ngx_pch.c"
+    ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"`
+
+    cat << END                                                >> $NGX_MAKEFILE
+
+$ngx_pch
+	$ngx_src
+
+END
+
 fi
diff --git a/auto/options b/auto/options
index 259c049..75e9376 100644
--- a/auto/options
+++ b/auto/options
@@ -1,21 +1,25 @@
 
 # Copyright (C) Igor Sysoev
 
+
 help=no
 
 PREFIX=
 SBIN_PATH=
 CONF_PATH=
-HTTP_LOG_PATH=
 ERROR_LOG_PATH=
 PID_PATH=
+NGX_USER=
+NGX_GROUP=
+HTTP_LOG_PATH=
 
-CC=gcc
+CC=${CC:-gcc}
 CPP=
-OBJS=objs
+NGX_OBJS=objs
 
 DEBUG=NO
-CC_OPT=
+NGX_CC_OPT=
+NGX_LD_OPT=
 CPU=NO
 
 TEST_BUILD_DEVPOLL=NO
@@ -77,10 +81,12 @@
         --conf-path=*)                   CONF_PATH="$value"         ;;
         --error-log-path=*)              ERROR_LOG_PATH="$value"    ;;
         --pid-path=*)                    PID_PATH="$value"          ;;
+        --user=*)                        NGX_USER="$value"          ;;
+        --group=*)                       NGX_GROUP="$value"         ;;
 
         --crossbuild=*)                  PLATFORM="$value"          ;;
 
-        --builddir=*)                    OBJS="$value"              ;;
+        --builddir=*)                    NGX_OBJS="$value"          ;;
 
         --with-rtsig_module)             EVENT_RTSIG=YES            ;;
         --with-select_module)            EVENT_SELECT=YES           ;;
@@ -109,7 +115,8 @@
 
         --with-cc=*)                     CC="$value"                ;;
         --with-cpp=*)                    CPP="$value"               ;;
-        --with-cc-opt=*)                 CC_OPT="$value"            ;;
+        --with-cc-opt=*)                 NGX_CC_OPT="$value"        ;;
+        --with-ld-opt=*)                 NGX_LD_OPT="$value"        ;;
         --with-cpu-opt=*)                CPU="$value"               ;;
         --with-debug)                    DEBUG=YES                  ;;
 
@@ -140,24 +147,35 @@
 
 
 if [ $help = yes ]; then
-    echo
-    echo "  --help                         this message"
-    echo
 
-    echo "  --without-select_module        disable select_module"
-    echo "  --without-poll_module          disable poll_module"
+cat << END
 
-    echo "  --without-http_rewrite_module  disable http_rewrite_module"
-    echo "  --without-http_gzip_module     disable http_gzip_module"
-    echo "  --without-http_proxy_module    disable http_proxy_module"
+  --help                           this message
 
-    echo "  --with-cc=NAME                 name of or path to C compiler"
-    echo
+  --user=USER                      set non-privilege user
+                                   for the worker processes
+  --group=GROUP                    set non-privilege group
+                                   for the worker processes
 
-    echo "  --with-pcre=DIR                path to PCRE library"
-    echo "  --with-md5=DIR                 path to md5 library"
-    echo "  --with-zlib=DIR                path to zlib library"
-    echo
+  --with-select_module             enable select module
+  --without-select_module          disable select module
+  --with-poll_module               enable poll module
+  --without-poll_module            disable poll module
+
+  --without-http_charset_module    disable ngx_http_charset_module
+  --without-http_rewrite_module    disable ngx_http_rewrite_module
+  --without-http_gzip_module       disable ngx_http_gzip_module
+  --without-http_proxy_module      disable ngx_http_proxy_module
+
+  --with-cc-opt=OPTIONS            additional options for compiler
+  --with-ld-opt=OPTIONS            additional options for linker
+
+  --with-pcre=DIR                  path to PCRE library
+  --with-md5=DIR                   path to md5 library
+  --with-zlib=DIR                  path to zlib library
+  --with-openssl=DIR               path to OpenSSL library
+
+END
 
     exit 1
 fi
@@ -181,11 +199,22 @@
 fi
 
 
-if [ ".$PREFIX" = "." ]; then
+if test -z "$PREFIX"; then
     PREFIX=/usr/local/nginx
 fi
 
 
+if test -z "$NGX_GROUP"; then
+    NGX_GROUP=NGX_USER
+fi
+
+
+if test -z "$NGX_USER"; then
+    NGX_USER=nobody
+    NGX_GROUP=nobody
+fi
+
+
 case ".$SBIN_PATH" in
     ./*)
     ;;
diff --git a/auto/os/conf b/auto/os/conf
index abffbe3..5154f2b 100644
--- a/auto/os/conf
+++ b/auto/os/conf
@@ -31,21 +31,7 @@
     ;;
 
     win32)
-        CORE_INCS="$WIN32_INCS"
-        CORE_DEPS="$WIN32_DEPS"
-        CORE_SRCS="$WIN32_SRCS $IOCP_SRCS"
-        OS_CONFIG="$WIN32_CONFIG"
-        EVENT_MODULES="$EVENT_MODULES $IOCP_MODULE"
-        EVENT_FOUND=YES
-
-        if [ $EVENT_SELECT = NO ]; then
-            CORE_SRCS="$CORE_SRCS $SELECT_SRCS"
-            EVENT_MODULES="$EVENT_MODULES $SELECT_MODULE"
-        fi
-
-        have=HAVE_AIO . auto/have
-        have=HAVE_IOCP . auto/have
-        CORE_LIBS="$CORE_LIBS ws2_32.lib"
+        . auto/os/win32
     ;;
 
     *)
@@ -55,3 +41,56 @@
     ;;
 
 esac
+
+
+if [ $PLATFORM != win32 ]; then
+
+    ngx_feature="/dev/poll"
+    ngx_feature_name="devpoll"
+    ngx_feature_run=no
+    ngx_feature_incs="#include <sys/devpoll.h>"
+    ngx_feature_libs=
+    ngx_feature_test="int  n, dp; struct dvpoll  dvp;
+                      dp = 0;
+                      dvp.dp_fds = NULL;
+                      dvp.dp_nfds = 0;
+                      dvp.dp_timeout = 0;
+                      n = ioctl(dp, DP_POLL, &dvp)"
+    . auto/feature
+
+    if [ $ngx_found = yes ]; then
+        have=HAVE_DEVPOLL . auto/have
+        CORE_SRCS="$CORE_SRCS $DEVPOLL_SRCS"
+        EVENT_MODULES="$EVENT_MODULES $DEVPOLL_MODULE"
+        EVENT_FOUND=YES
+    fi
+
+
+    if test -z "$NGX_KQUEUE_CHECKED"; then
+        ngx_feature="kqueue"
+        ngx_feature_name="kqueue"
+        ngx_feature_run=no
+        ngx_feature_incs="#include <sys/event.h>"
+        ngx_feature_libs=
+        ngx_feature_test="int kq; kq = kqueue()"
+        . auto/feature
+
+        if [ $ngx_found = yes ]; then
+
+            have=HAVE_KQUEUE . auto/have
+            have=HAVE_CLEAR_EVENT . auto/have
+            EVENT_MODULES="$EVENT_MODULES $KQUEUE_MODULE"
+            CORE_SRCS="$CORE_SRCS $KQUEUE_SRCS"
+            EVENT_FOUND=YES
+
+            ngx_feature="kqueue's NOTE_LOWAT"
+            ngx_feature_name="HAVE_LOWAT_EVENT"
+            ngx_feature_run=no
+            ngx_feature_incs="#include <sys/event.h>"
+            ngx_feature_libs=
+            ngx_feature_test="struct kevent  kev;
+                              kev.fflags = NOTE_LOWAT;"
+            . auto/feature
+        fi
+    fi
+fi
diff --git a/auto/os/freebsd b/auto/os/freebsd
index 90cb497..f08ef97 100644
--- a/auto/os/freebsd
+++ b/auto/os/freebsd
@@ -2,19 +2,33 @@
 # Copyright (C) Igor Sysoev
 
 
+cat << END >> $NGX_AUTO_HEADERS_H
+
+#ifndef NGX_FREEBSD
+#define NGX_FREEBSD  1
+#endif
+
+END
+
+
 CORE_INCS="$UNIX_INCS"
 CORE_DEPS="$UNIX_DEPS $FREEBSD_DEPS"
 CORE_SRCS="$UNIX_SRCS $FREEBSD_SRCS"
 
-PIPE="-pipe"
+ngx_spacer='
+'
 
 
-# __FreeBSD_version is the best way to determine whether
-# some capability exists and is safe to use
+# __FreeBSD_version and sysctl kern.osreldate are the best ways
+# to determine whether some capability exists and is safe to use.
+# __FreeBSD_version is used for the testing of the build enviroment.
+# sysctl kern.osreldate is used for the testing of the kernel capabilities.
 
 version=`grep "#define __FreeBSD_version" /usr/include/osreldate.h \
          | sed -e 's/^.* \(.*\)$/\1/'`
 
+osreldate=`/sbin/sysctl -n kern.osreldate`
+
 
 # setproctitle() in libutil
 
@@ -28,7 +42,7 @@
 
 # sendfile
 
-if [ $version -gt 300007 ]; then
+if [ $osreldate -gt 300007 ]; then
     echo " + using sendfile()"
 
     have=HAVE_SENDFILE . auto/have
@@ -38,8 +52,8 @@
 
 # kqueue
 
-if [ \( $version -lt 500000 -a $version -ge 410000 \) \
-     -o $version -ge 500011 ]
+if [ \( $osreldate -lt 500000 -a $osreldate -ge 410000 \) \
+     -o $osreldate -ge 500011 ]
 then
     echo " + using kqueue"
 
@@ -50,6 +64,8 @@
     EVENT_FOUND=YES
 fi
 
+NGX_KQUEUE_CHECKED=YES
+
 
 # kqueue's NOTE_LAWAT
 
diff --git a/auto/os/linux b/auto/os/linux
index 8576ea6..e68a0d2 100644
--- a/auto/os/linux
+++ b/auto/os/linux
@@ -2,15 +2,23 @@
 # Copyright (C) Igor Sysoev
 
 
+cat << END >> $NGX_AUTO_HEADERS_H
+
+#ifndef NGX_LINUX
+#define NGX_LINUX  1
+#endif
+
+END
+
 CORE_INCS="$UNIX_INCS"
 CORE_DEPS="$UNIX_DEPS $LINUX_DEPS"
 CORE_SRCS="$UNIX_SRCS $LINUX_SRCS"
 EVENT_MODULES="$EVENT_MODULES"
 
-PIPE="-pipe"
+ngx_spacer='
+'
 
-
-CC_TEST_FLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE"
+CC_AUX_FLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64"
 
 # Linux kernel version
 
@@ -31,14 +39,18 @@
 
 # epoll, EPOLLET version
 
-ngx_func="epoll";
-ngx_func_inc="#include <sys/epoll.h>"
-ngx_func_test="int efd = 0, fd = 1, 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
+ngx_feature="epoll"
+ngx_feature_name="epoll"
+ngx_feature_run=yes
+ngx_feature_incs="#include <sys/epoll.h>"
+ngx_feature_libs=
+ngx_feature_test="int efd = 0, fd = 1, n;
+                  struct epoll_event ee;
+                  ee.events = EPOLLIN|EPOLLOUT|EPOLLET;
+                  ee.data.ptr = NULL;
+                  efd = epoll_create(100);
+                  if (efd == -1) return 1;"
+. auto/feature
 
 if [ $ngx_found = yes ]; then
     have=HAVE_EPOLL . auto/have
@@ -51,13 +63,16 @@
 
 # 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
+CC_AUX_FLAGS="-D_GNU_SOURCE"
+ngx_feature="sendfile()"
+ngx_feature_name="sendfile"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/sendfile.h>"
+ngx_feature_libs=
+ngx_feature_test="int s = 0, fd = 1;
+                  ssize_t n; off_t off = 0;
+                  n = sendfile(s, fd, &off, 1)"
+. auto/feature
 
 if [ $ngx_found = yes ]; then
     CORE_SRCS="$CORE_SRCS $LINUX_SENDFILE_SRCS"
@@ -66,17 +81,26 @@
 
 # sendfile64()
 
-CC_TEST_FLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE"
-ngx_func="sendfile64()"; . auto/func
+CC_AUX_FLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64"
+ngx_feature="sendfile64()"
+ngx_feature_name="HAVE_SENDFILE64"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/sendfile.h>"
+ngx_feature_libs=
+ngx_feature_test="int s = 0, fd = 1;
+                  ssize_t n; off_t off = 0;
+                  n = sendfile(s, fd, &off, 1)"
+. auto/feature
 
 
+ngx_include="sys/prctl.h"; . auto/include
+
 # prctl(PR_SET_DUMPABLE)
 
-ngx_func="prctl()";
-ngx_func_inc="#include <sys/prctl.h>"
-ngx_func_test="prctl(PR_SET_DUMPABLE, 1, 0, 0, 0)"
-. auto/func
-
-if [ $ngx_found = yes ]; then
-    have=HAVE_PR_SET_DUMPABLE . auto/have
-fi
+ngx_feature="prctl(PR_SET_DUMPABLE)"
+ngx_feature_name="HAVE_PR_SET_DUMPABLE"
+ngx_feature_run=yes
+ngx_feature_incs="#include <sys/prctl.h>"
+ngx_feature_libs=
+ngx_feature_test="if (prctl(PR_SET_DUMPABLE, 1, 0, 0, 0) == -1) return 1"
+. auto/feature
diff --git a/auto/os/solaris b/auto/os/solaris
index 29497ff..62708cd 100644
--- a/auto/os/solaris
+++ b/auto/os/solaris
@@ -2,6 +2,14 @@
 # Copyright (C) Igor Sysoev
 
 
+cat << END >> $NGX_AUTO_HEADERS_H
+
+#ifndef NGX_SOLARIS
+#define NGX_SOLARIS  1
+#endif
+
+END
+
 CORE_INCS="$UNIX_INCS"
 CORE_DEPS="$UNIX_DEPS $SOLARIS_DEPS"
 CORE_SRCS="$UNIX_SRCS $SOLARIS_SRCS "
@@ -9,40 +17,17 @@
 
 CORE_LIBS="$CORE_LIBS -lsocket -lnsl -lrt"
 
-# the Solaris's make support
-MAKE_SL=YES
+# Solaris's make does not support a blank line between target and rules
+ngx_spacer=
 
-
-CC_TEST_FLAGS="-D_FILE_OFFSET_BITS=64"
-
-case $PLATFORM in
-
-    SunOS:5.[89]:* | SunOS:5.10:*)
-        PIPE="-pipe"
-    ;;
-
-    *)
-        # Solaris 7's /usr/ccs/bin/as does not support "-pipe"
-    ;;
-
-esac
+CC_AUX_FLAGS="-D_FILE_OFFSET_BITS=64 -lrt"
 
 
 case $PLATFORM in
 
     *:sun4u)
+        # "-mcpu=v9" enables the "casa" assembler instruction
         CFLAGS="$CFLAGS -mcpu=v9"
-
-        if [ ".$CPU" = ".sparc64" ]; then
-            CFLAGS="$CFLAGS -m64"
-            CPU_OPT="-m64"
-            CORE_LINK="$CORE_LINK -m64"
-
-            CC_TEST_FLAGS="$CC_TEST_FLAGS -mcpu=v9 -m64"
-        fi
-    ;;
-
-    *)
     ;;
 
 esac
@@ -57,23 +42,15 @@
 fi
 
 
-ngx_inc="sys/devpoll.h"; . auto/inc
-
-if [ $ngx_found = yes ]; then
-    have=HAVE_DEVPOLL . auto/have
-    CORE_SRCS="$CORE_SRCS $DEVPOLL_SRCS"
-    EVENT_MODULES="$EVENT_MODULES $DEVPOLL_MODULE"
-    EVENT_FOUND=YES
-fi
-
-
-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; ssize_t n;
-               n = sendfilev(fd, vec, 1, &sent)"
-. auto/func
+ngx_feature="sendfilev()"
+ngx_feature_name="sendfile"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/sendfile.h>"
+ngx_feature_libs="-lsendfile"
+ngx_feature_test="int fd = 1; sendfilevec_t vec[1];
+                  size_t sent; ssize_t n;
+                  n = sendfilev(fd, vec, 1, &sent)"
+. auto/feature
 
 
 if [ $ngx_found = yes ]; then
diff --git a/auto/os/win32 b/auto/os/win32
new file mode 100644
index 0000000..9e83e67
--- /dev/null
+++ b/auto/os/win32
@@ -0,0 +1,29 @@
+
+# Copyright (C) Igor Sysoev
+
+
+cat << END >> $NGX_AUTO_HEADERS_H
+
+#ifndef NGX_WIN32
+#define NGX_WIN32  1
+#endif
+
+END
+
+
+CORE_INCS="$WIN32_INCS"
+CORE_DEPS="$WIN32_DEPS"
+CORE_SRCS="$WIN32_SRCS $IOCP_SRCS"
+OS_CONFIG="$WIN32_CONFIG"
+CORE_LIBS="$CORE_LIBS ws2_32.lib"
+
+EVENT_MODULES="$EVENT_MODULES $IOCP_MODULE"
+EVENT_FOUND=YES
+
+if [ $EVENT_SELECT = NO ]; then
+    CORE_SRCS="$CORE_SRCS $SELECT_SRCS"
+    EVENT_MODULES="$EVENT_MODULES $SELECT_MODULE"
+fi
+
+have=HAVE_AIO . auto/have
+have=HAVE_IOCP . auto/have
diff --git a/auto/sources b/auto/sources
index 6e21a41..1622dcd 100644
--- a/auto/sources
+++ b/auto/sources
@@ -303,6 +303,6 @@
 
 IMAP_MODULE=ngx_imap_module
 IMAP_SRCS="src/imap/ngx_imap.c \
-	   src/imap/ngx_imap_handler.c \
-	   src/imap/ngx_imap_parse.c \
-	   src/imap/ngx_imap_proxy.c"
+           src/imap/ngx_imap_handler.c \
+           src/imap/ngx_imap_parse.c \
+           src/imap/ngx_imap_proxy.c"
diff --git a/auto/stubs b/auto/stubs
new file mode 100644
index 0000000..af37c54
--- /dev/null
+++ b/auto/stubs
@@ -0,0 +1,8 @@
+
+# Copyright (C) Igor Sysoev
+
+
+have=NGX_USE_HTTP_FILE_CACHE_UNIQ . auto/have
+have=NGX_SUPPRESS_WARN . auto/have
+
+have=NGX_SMP . auto/have
diff --git a/auto/types/sizeof b/auto/types/sizeof
index ac22e75..a7094e4 100644
--- a/auto/types/sizeof
+++ b/auto/types/sizeof
@@ -2,9 +2,14 @@
 # Copyright (C) Igor Sysoev
 
 
-echo $ngx_n "checking for $ngx_type size ..." $ngx_c
-echo >> $NGX_ERR
-echo "checking for $ngx_type size" >> $NGX_ERR
+echo $ngx_n "checking for $ngx_type size ...$ngx_c"
+
+cat << END >> $NGX_AUTOCONF_ERR
+
+----------------------------------------
+checking for $ngx_type size
+
+END
 
 ngx_size=
 
@@ -12,11 +17,11 @@
 
 #include <sys/types.h>
 #include <sys/time.h>
-$NGX_UNISTD_H
+$NGX_INCLUDE_UNISTD_H
 #include <signal.h>
 #include <sys/resource.h>
-$NGX_INTTYPES_H
-$NGX_AUTO_CONFIG
+$NGX_INCLUDE_INTTYPES_H
+$NGX_INCLUDE_AUTO_CONFIG_H
 
 int main() {
     printf("%d", sizeof($ngx_type));
@@ -25,14 +30,19 @@
 
 END
 
-eval "$CC $CC_TEST_FLAGS -o $NGX_AUTOTEST $NGX_AUTOTEST.c >> $NGX_ERR 2>&1"
+
+ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS -o $NGX_AUTOTEST $NGX_AUTOTEST.c"
+eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
+
 
 if [ -x $NGX_AUTOTEST ]; then
     ngx_size=`$NGX_AUTOTEST`
     echo " $ngx_size bytes"
 fi
 
-rm $NGX_AUTOTEST*
+
+rm -f $NGX_AUTOTEST
+
 
 case $ngx_size in
     4)
@@ -58,5 +68,13 @@
     *)
         echo
         echo "$0: error: can not detect $ngx_type size"
+
+        echo "----------"    >> $NGX_AUTOCONF_ERR
+        cat $NGX_AUTOTEST.c  >> $NGX_AUTOCONF_ERR
+        echo "----------"    >> $NGX_AUTOCONF_ERR
+        echo $ngx_test       >> $NGX_AUTOCONF_ERR
+        echo "----------"    >> $NGX_AUTOCONF_ERR
+
         exit 1
 esac
+
diff --git a/auto/types/typedef b/auto/types/typedef
index 9762f48..4b89643 100644
--- a/auto/types/typedef
+++ b/auto/types/typedef
@@ -2,13 +2,18 @@
 # Copyright (C) Igor Sysoev
 
 
-echo $ngx_n "checking for $ngx_type ..." $ngx_c
-echo >> $NGX_ERR
-echo "checking for $ngx_type" >> $NGX_ERR
+echo $ngx_n "checking for $ngx_type ...$ngx_c"
 
-found=no
+cat << END >> $NGX_AUTOCONF_ERR
 
-for type in $ngx_type $ngx_types
+----------------------------------------
+checking for $ngx_type
+
+END
+
+ngx_found=no
+
+for ngx_try in $ngx_type $ngx_types
 do
 
     cat << END > $NGX_AUTOTEST.c
@@ -19,42 +24,51 @@
 #include <sys/time.h>
 #include <sys/resource.h>
 #include <netinet/in.h>
-$NGX_INTTYPES_H
+$NGX_INCLUDE_INTTYPES_H
 
 int main() {
-    $type i = 0;
+    $ngx_try i = 0;
     return 0;
 }
 
 END
 
-    eval "$CC -o $NGX_AUTOTEST $NGX_AUTOTEST.c >> $NGX_ERR 2>&1"
+    ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS -o $NGX_AUTOTEST $NGX_AUTOTEST.c"
+    eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
 
     if [ -x $NGX_AUTOTEST ]; then
-        if [ $type = $ngx_type ]; then
+        if [ $ngx_try = $ngx_type ]; then
             echo " found"
-            found=yes
+            ngx_found=yes
         else
-            echo ", $type used"
-            found=$type
+            echo ", $ngx_try used"
+            ngx_found=$ngx_try
         fi
     fi
 
-    rm $NGX_AUTOTEST*
+    rm -f $NGX_AUTOTEST
 
-    if [ $found = no ]; then
-        echo $ngx_n " $type not found" $ngx_c
+    if [ $ngx_found = no ]; then
+        echo $ngx_n " $ngx_try not found$ngx_c"
+
+        echo "----------"    >> $NGX_AUTOCONF_ERR
+        cat $NGX_AUTOTEST.c  >> $NGX_AUTOCONF_ERR
+        echo "----------"    >> $NGX_AUTOCONF_ERR
+        echo $ngx_test       >> $NGX_AUTOCONF_ERR
+        echo "----------"    >> $NGX_AUTOCONF_ERR
+
     else
         break
     fi
 done
 
-if [ $found = no ]; then
+if [ $ngx_found = no ]; then
     echo
     echo "$0: error: can not define $ngx_type"
+
     exit 1
 fi
 
-if [ $found != yes ]; then
-    echo "typedef $found  $ngx_type;"   >> $NGX_AUTO_CONFIG_H
+if [ $ngx_found != yes ]; then
+    echo "typedef $ngx_found  $ngx_type;"   >> $NGX_AUTO_CONFIG_H
 fi
diff --git a/auto/types/uintptr_t b/auto/types/uintptr_t
index a1bb78a..e7d8d5c 100644
--- a/auto/types/uintptr_t
+++ b/auto/types/uintptr_t
@@ -2,7 +2,7 @@
 # Copyright (C) Igor Sysoev
 
 
-echo $ngx_n "checking for uintptr_t ... " $ngx_c
+echo $ngx_n "checking for uintptr_t ...$ngx_c"
 echo >> $NGX_ERR
 echo "checking for uintptr_t" >> $NGX_ERR
 
diff --git a/auto/unix b/auto/unix
index 4ba7d60..ec0e395 100755
--- a/auto/unix
+++ b/auto/unix
@@ -2,7 +2,7 @@
 # Copyright (C) Igor Sysoev
 
 
-CC_WARN=$CC
+CC_WARN=
 ngx_fmt_collect=yes
 
 # C types
@@ -23,7 +23,7 @@
 
 # POSIX types
 
-NGX_AUTO_CONFIG="#include \"../$NGX_AUTO_CONFIG_H\""
+NGX_INCLUDE_AUTO_CONFIG_H="#include \"../$NGX_AUTO_CONFIG_H\""
 
 ngx_type="uint64_t"; ngx_types="u_int64_t"; . auto/types/typedef
 
@@ -72,75 +72,98 @@
 
 # syscalls, libc calls and some features
 
+
+ngx_feature="pread()"
+ngx_feature_name="pread"
+ngx_feature_run=no
+ngx_feature_incs=
 ngx_feature_libs=
-ngx_func_libs=
+ngx_feature_test="char buf[1]; ssize_t n; n = pread(0, buf, 1, 0)"
+. auto/feature
 
 
-ngx_func="pread()"
-ngx_func_inc=
-ngx_func_test="char buf[1]; ssize_t n; n = pread(0, buf, 1, 0)"
-. auto/func
+ngx_feature="pwrite()"
+ngx_feature_name="pwrite"
+ngx_feature_run=no
+ngx_feature_incs=
+ngx_feature_libs=
+ngx_feature_test="char buf[1]; ssize_t n; n = pwrite(1, buf, 1, 0)"
+. auto/feature
 
 
-ngx_func="pwrite()"
-ngx_func_inc=
-ngx_func_test="char buf[1]; ssize_t n; n = pwrite(1, buf, 1, 0)"
-. auto/func
+ngx_feature="strerror_r()"
+ngx_feature_name="strerror_r"
+ngx_feature_run=no
+ngx_feature_incs="#include <string.h>"
+ngx_feature_libs=
+ngx_feature_test="char buf[20]; int n; n = strerror_r(1, buf, 20)"
+. auto/feature
 
 
-#ngx_func="strsignal()"
-#ngx_func_inc="#include <string.h>"
-#ngx_func_test="char *s = strsignal(1)"
-#. auto/func
+ngx_feature="gnu_strerror_r()"
+ngx_feature_name="gnu_strerror_r"
+ngx_feature_run=no
+ngx_feature_incs="#include <string.h>"
+ngx_feature_libs=
+ngx_feature_test="char buf[20], *str; str = strerror_r(1, buf, 20)"
+. auto/feature
 
 
-ngx_func="strerror_r()"
-ngx_func_inc="#include <string.h>"
-ngx_func_test="char buf[20]; int n; n = strerror_r(1, buf, 20)"
-. auto/func
+ngx_feature="localtime_r()"
+ngx_feature_name="localtime_r"
+ngx_feature_run=no
+ngx_feature_incs="#include <time.h>"
+ngx_feature_libs=
+ngx_feature_test="struct tm t; time_t c=0; localtime_r(&c, &t)"
+. auto/feature
 
 
-ngx_func="gnu_strerror_r()"
-ngx_func_inc="#include <string.h>"
-ngx_func_test="char buf[20], *str; str = strerror_r(1, buf, 20)"
-. auto/func
+ngx_feature="posix_memalign()"
+ngx_feature_name="posix_memalign"
+ngx_feature_run=no
+ngx_feature_incs="#include <stdlib.h>"
+ngx_feature_libs=
+ngx_feature_test="void *p; int n; n = posix_memalign(&p, 4096, 4096)"
+. auto/feature
 
 
-ngx_func="localtime_r()"
-ngx_func_inc="#include <time.h>"
-ngx_func_test="struct tm t; time_t c=0; localtime_r(&c, &t)"
-. auto/func
+ngx_feature="memalign()"
+ngx_feature_name="memalign"
+ngx_feature_run=no
+ngx_feature_incs="#include <stdlib.h>"
+ngx_feature_libs=
+ngx_feature_test="void *p; p = memalign(4096, 4096)"
+. auto/feature
 
 
-ngx_func="posix_memalign()"
-ngx_func_inc="#include <stdlib.h>"
-ngx_func_test="void *p; int n; n = posix_memalign(&p, 4096, 4096)"
-. auto/func
-
-
-ngx_func="memalign()"
-ngx_func_inc="#include <stdlib.h>"
-ngx_func_test="void *p; p = memalign(4096, 4096)"
-. auto/func
-
+ngx_feature="sched_yield()"
+ngx_feature_name="HAVE_SCHED_YIELD"
+ngx_feature_run=no
+ngx_feature_incs="#include <sched.h>"
+ngx_feature_libs=
+ngx_feature_test="sched_yield()"
+. auto/feature
 
 
 ngx_feature="mmap(MAP_ANON|MAP_SHARED)"
 ngx_feature_name="MAP_ANON"
-ngx_feature_inc="#include <sys/mman.h>"
+ngx_feature_run=yes
+ngx_feature_incs="#include <sys/mman.h>"
+ngx_feature_libs=
 ngx_feature_test="void *p;
                   p = mmap(NULL, 4096, PROT_READ|PROT_WRITE,
                            MAP_ANON|MAP_SHARED, -1, 0);
                   if (p == MAP_FAILED) return 1;"
-ngx_feature_run=yes
 . auto/feature
 
 
 ngx_feature='mmap("/dev/zero", MAP_SHARED)'
 ngx_feature_name="MAP_DEVZERO"
-ngx_feature_inc="#include <sys/mman.h>
+ngx_feature_run=yes
+ngx_feature_incs="#include <sys/mman.h>
 #include <sys/stat.h>
 #include <fcntl.h>"
+ngx_feature_libs=
 ngx_feature_test='void *p; int  fd;
                   fd = open("/dev/zero", O_RDWR);
                   p = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
@@ -150,8 +173,10 @@
 
 ngx_feature="System V shared memory"
 ngx_feature_name="SYSVSHM"
-ngx_feature_inc="#include <sys/ipc.h>
+ngx_feature_run=yes
+ngx_feature_incs="#include <sys/ipc.h>
 #include <sys/shm.h>"
+ngx_feature_libs=
 ngx_feature_test="int  id;
                   id = shmget(IPC_PRIVATE, 4096, (SHM_R|SHM_W|IPC_CREAT));
                   if (id == -1) return 1;
@@ -159,41 +184,39 @@
 . auto/feature
 
 
-
 ngx_feature="struct sockaddr_in.sin_len"
 ngx_feature_name="sin_len"
-ngx_feature_inc="#include <sys/socket.h>
-#include <netinet/in.h>"
-ngx_feature_test="struct sockaddr_in sa; sa.sin_len = 5"
 ngx_feature_run=no
+ngx_feature_incs="#include <sys/socket.h>
+#include <netinet/in.h>"
+ngx_feature_libs=
+ngx_feature_test="struct sockaddr_in sa; sa.sin_len = 5"
 . auto/feature
 
 
 ngx_feature="struct msghdr.msg_control"
 ngx_feature_name="msghdr_msg_control"
-ngx_feature_inc="#include <sys/socket.h>"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/socket.h>"
+ngx_feature_libs=
 ngx_feature_test="struct msghdr  msg; msg.msg_control = NULL"
 . auto/feature
 
 
-case $PLATFORM in
-    Linux:*)
-        ngx_feature_inc="#include <sys/ioctl.h>"
-    ;;
-
-    *)
-        ngx_feature_inc="#include <sys/filio.h>"
-    ;;
-esac
-
 ngx_feature="ioctl(FIONBIO)"
 ngx_feature_name="FIONBIO"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/ioctl.h>
+$NGX_INCLUDE_SYS_FILIO_H"
+ngx_feature_libs=
 ngx_feature_test="int i; i = FIONBIO"
 . auto/feature
 
 
 ngx_feature="struct tm.tm_gmtoff"
 ngx_feature_name="gmtoff"
-ngx_feature_inc="#include <time.h>"
+ngx_feature_run=no
+ngx_feature_incs="#include <time.h>"
+ngx_feature_libs=
 ngx_feature_test="struct tm  tm; tm.tm_gmtoff = 0"
 . auto/feature