nginx-0.1.32-RELEASE import
*) Bugfix: the arguments were omitted in the redirects, issued by the
"rewrite" directive; the bug had appeared in 0.1.29.
*) Feature: the "if" directive supports the captures in regular
expressions.
*) Feature: the "set" directive supports the variables and the captures
of regular expressions.
*) Feature: the "X-Accel-Redirect" response header line is supported in
proxy and FastCGI mode.
diff --git a/auto/cc/acc b/auto/cc/acc
new file mode 100644
index 0000000..f325bc5
--- /dev/null
+++ b/auto/cc/acc
@@ -0,0 +1,14 @@
+
+# Copyright (C) Igor Sysoev
+
+
+# aCC: HP ANSI C++ B3910B A.03.55.02
+
+# C89 mode
+
+CFLAGS="$CFLAGS -Ae"
+CC_TEST_FLAGS="-Ae"
+
+PCRE_OPT="$PCRE_OPT -Ae"
+ZLIB_OPT="$ZLIB_OPT -Ae"
+MD5_OPT="$MD5_OPT -Ae"
diff --git a/auto/cc/ccc b/auto/cc/ccc
new file mode 100644
index 0000000..968015f
--- /dev/null
+++ b/auto/cc/ccc
@@ -0,0 +1,41 @@
+
+# Copyright (C) Igor Sysoev
+
+
+# Compaq C V6.5-207
+
+ngx_include_opt="-I"
+
+# warnings
+
+CFLAGS="$CFLAGS -msg_enable level6 -msg_fatal level6"
+
+CFLAGS="$CFLAGS -msg_disable unnecincl"
+CFLAGS="$CFLAGS -msg_disable nestincl"
+CFLAGS="$CFLAGS -msg_disable unusedincl"
+CFLAGS="$CFLAGS -msg_disable unknownmacro"
+CFLAGS="$CFLAGS -msg_disable strctpadding"
+CFLAGS="$CFLAGS -msg_disable ansialiascast"
+CFLAGS="$CFLAGS -msg_disable inlinestoclsmod"
+CFLAGS="$CFLAGS -msg_disable cxxkeyword"
+CFLAGS="$CFLAGS -msg_disable longlongsufx"
+
+# STUB
+CFLAGS="$CFLAGS -msg_disable truncintcast"
+CFLAGS="$CFLAGS -msg_disable trunclongcast"
+CFLAGS="$CFLAGS -msg_disable truncintasn"
+CFLAGS="$CFLAGS -msg_disable trunclongint"
+CFLAGS="$CFLAGS -msg_disable intconcastsgn"
+CFLAGS="$CFLAGS -msg_disable intconstsign"
+CFLAGS="$CFLAGS -msg_disable hexoctunsign"
+CFLAGS="$CFLAGS -msg_disable switchlong"
+CFLAGS="$CFLAGS -msg_disable valuepres"
+CFLAGS="$CFLAGS -msg_disable subscrbounds2"
+CFLAGS="$CFLAGS -msg_disable ignorecallval"
+CFLAGS="$CFLAGS -msg_disable nonstandcast"
+CFLAGS="$CFLAGS -msg_disable embedcomment"
+CFLAGS="$CFLAGS -msg_disable unreachcode"
+CFLAGS="$CFLAGS -msg_disable questcompare2"
+CFLAGS="$CFLAGS -msg_disable unusedtop"
+CFLAGS="$CFLAGS -msg_disable unrefdecl"
+CFLAGS="$CFLAGS -msg_disable bitnotint"
diff --git a/auto/cc/conf b/auto/cc/conf
index f064bca..b2eabeb 100644
--- a/auto/cc/conf
+++ b/auto/cc/conf
@@ -42,30 +42,30 @@
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
+ # gcc 2.7.2.3, 2.8.1, 2.95.4, egcs-1.1.2
+ # 3.0.4, 3.1.1, 3.2.3, 3.3.2, 3.3.3, 3.3.4, 3.4.0, 3.4.2
+ # 4.0.0
. auto/cc/gcc
;;
icc)
- # Intel C++ compiler 7.1, 8.0
+ # Intel C++ compiler 7.1, 8.0, 8.1
. auto/cc/icc
;;
ccc)
-# # Compaq C V6.5-207
-#
-# . auto/cc/ccc
- ngx_include_opt="-I"
+ # Compaq C V6.5-207
+
+ . auto/cc/ccc
;;
-# acc)
-# # aCC: HP ANSI C++ B3910B A.03.55.02
-#
-# . auto/cc/acc
-# ;;
+ acc)
+ # aCC: HP ANSI C++ B3910B A.03.55.02
+
+ . auto/cc/acc
+ ;;
msvc*)
# MSVC++ 6.0 SP2, MSVC++ Toolkit 2003
@@ -87,7 +87,7 @@
esac
- CC_TEST_FLAGS=$NGX_CC_OPT
+ CC_TEST_FLAGS="$CC_TEST_FLAGS $NGX_CC_OPT"
fi
@@ -124,16 +124,20 @@
. auto/feature
- ngx_feature="C99 variadic macros"
- ngx_feature_name="NGX_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
+ if [ $NGX_CC_NAME = 'ccc' ]; then
+ echo "checking for C99 variadic macros ... disabled"
+ else
+ ngx_feature="C99 variadic macros"
+ ngx_feature_name="NGX_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
# ngx_feature="inline"
diff --git a/auto/configure b/auto/configure
index d046b59..f54ef24 100755
--- a/auto/configure
+++ b/auto/configure
@@ -27,6 +27,7 @@
. auto/os/conf
if [ "$NGX_PLATFORM" != win32 ]; then
+ . auto/os/features
. auto/threads
fi
diff --git a/auto/os/conf b/auto/os/conf
index f2a49ce..226f8dd 100644
--- a/auto/os/conf
+++ b/auto/os/conf
@@ -23,15 +23,6 @@
. auto/os/freebsd
;;
- Darwin:*)
- have=NGX_DARWIN . auto/have_headers
- have=NGX_HAVE_INHERITED_NONBLOCK . auto/have
- CORE_INCS="$UNIX_INCS"
- CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
- CORE_SRCS="$UNIX_SRCS"
- CRYPT_LIB=
- ;;
-
Linux:*)
. auto/os/linux
;;
@@ -44,11 +35,35 @@
. auto/os/win32
;;
+ Darwin:*)
+ have=NGX_DARWIN . auto/have_headers
+ have=NGX_HAVE_INHERITED_NONBLOCK . auto/have
+ CORE_INCS="$UNIX_INCS"
+ CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
+ CORE_SRCS="$UNIX_SRCS"
+ ;;
+
+ HP-UX:*)
+ # HP/UX
+ have=NGX_HPUX . auto/have_headers
+ CORE_INCS="$UNIX_INCS"
+ CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
+ CORE_SRCS="$UNIX_SRCS"
+ CC_AUX_FLAGS="$CC_AUX_FLAGS -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
+ ;;
+
+ OSF1:*)
+ # HP Tru64
+ have=NGX_TRU64 . auto/have_headers
+ CORE_INCS="$UNIX_INCS"
+ CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
+ CORE_SRCS="$UNIX_SRCS"
+ ;;
+
*)
CORE_INCS="$UNIX_INCS"
CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
CORE_SRCS="$UNIX_SRCS"
- CRYPT_LIB="-lcrypt"
;;
esac
@@ -56,119 +71,8 @@
case "$NGX_MACHINE" in
- i386|i686|i86pc|amd64)
+ i386 | i686 | i86pc | amd64)
have=NGX_HAVE_NONALIGNED . auto/have
;;
esac
-
-
-if [ "$NGX_PLATFORM" != win32 ]; then
-
- NGX_USER=${NGX_USER:-nobody}
-
- if [ -z "$NGX_GROUP" -a $NGX_USER = nobody ] ; then
- if grep nobody /etc/group 2>&1 >/dev/null; then
- echo "checking for nobody group ... found"
- NGX_GROUP=nobody
- else
- echo "checking for nobody group ... not found"
-
- if grep nogroup /etc/group 2>&1 >/dev/null; then
- echo "checking for nogroup group ... found"
- NGX_GROUP=nogroup
- else
- echo "checking for nogroup group ... not found"
- NGX_GROUP=nobody
- fi
- fi
-
- else
- NGX_GROUP=$NGX_USER
- fi
-
-
- ngx_feature="poll()"
- ngx_feature_name=
- ngx_feature_run=no
- ngx_feature_incs="#include <poll.h>"
- ngx_feature_libs=
- ngx_feature_test="int n, dp; struct pollfd pl;
- dp = 0;
- pl.fd = 0;
- pl.events = 0;
- pl.revents = 0;
- n = poll(&pl, 1, 0)"
- . auto/feature
-
- if [ $ngx_found = no ]; then
- EVENT_POLL=NONE
- fi
-
-
- ngx_feature="/dev/poll"
- ngx_feature_name="NGX_HAVE_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
- 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="NGX_HAVE_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=NGX_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="NGX_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
-
- if [ "$NGX_SYSTEM" = "NetBSD" ]; then
-
- # NetBSD 2.0 incompatibly defines kevent.udata as "intptr_t"
-
- cat << END >> $NGX_AUTO_CONFIG_H
-
-#define NGX_KQUEUE_UDATA_T
-
-END
-
- else
- cat << END >> $NGX_AUTO_CONFIG_H
-
-#define NGX_KQUEUE_UDATA_T (void *)
-
-END
-
- fi
-fi
diff --git a/auto/os/features b/auto/os/features
new file mode 100644
index 0000000..44c33cd
--- /dev/null
+++ b/auto/os/features
@@ -0,0 +1,131 @@
+
+# Copyright (C) Igor Sysoev
+
+
+NGX_USER=${NGX_USER:-nobody}
+
+if [ -z "$NGX_GROUP" -a $NGX_USER = nobody ] ; then
+ if grep nobody /etc/group 2>&1 >/dev/null; then
+ echo "checking for nobody group ... found"
+ NGX_GROUP=nobody
+ else
+ echo "checking for nobody group ... not found"
+
+ if grep nogroup /etc/group 2>&1 >/dev/null; then
+ echo "checking for nogroup group ... found"
+ NGX_GROUP=nogroup
+ else
+ echo "checking for nogroup group ... not found"
+ NGX_GROUP=nobody
+ fi
+ fi
+
+else
+ NGX_GROUP=$NGX_USER
+fi
+
+
+ngx_feature="poll()"
+ngx_feature_name=
+ngx_feature_run=no
+ngx_feature_incs="#include <poll.h>"
+ngx_feature_libs=
+ngx_feature_test="int n, dp; struct pollfd pl;
+ dp = 0;
+ pl.fd = 0;
+ pl.events = 0;
+ pl.revents = 0;
+ n = poll(&pl, 1, 0)"
+. auto/feature
+
+if [ $ngx_found = no ]; then
+ EVENT_POLL=NONE
+fi
+
+
+ngx_feature="/dev/poll"
+ngx_feature_name="NGX_HAVE_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
+ 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="NGX_HAVE_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=NGX_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="NGX_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
+
+if [ "$NGX_SYSTEM" = "NetBSD" ]; then
+
+ # NetBSD 2.0 incompatibly defines kevent.udata as "intptr_t"
+
+ cat << END >> $NGX_AUTO_CONFIG_H
+
+#define NGX_KQUEUE_UDATA_T
+
+END
+
+else
+ cat << END >> $NGX_AUTO_CONFIG_H
+
+#define NGX_KQUEUE_UDATA_T (void *)
+
+END
+
+fi
+
+
+ngx_feature="crypt()"
+ngx_feature_name=
+ngx_feature_run=no
+ngx_feature_incs=
+ngx_feature_libs=
+ngx_feature_test="crypt(\"test\", \"salt\");"
+. auto/feature
+
+
+if [ $ngx_found = no ]; then
+
+ ngx_feature="crypt() in libcrypt"
+ ngx_feature_libs=-lcrypt
+ . auto/feature
+
+ if [ $ngx_found = yes ]; then
+ CRYPT_LIB="-lcrypt"
+ fi
+fi
diff --git a/auto/os/freebsd b/auto/os/freebsd
index f916860..e545122 100644
--- a/auto/os/freebsd
+++ b/auto/os/freebsd
@@ -7,7 +7,6 @@
CORE_INCS="$UNIX_INCS"
CORE_DEPS="$UNIX_DEPS $FREEBSD_DEPS"
CORE_SRCS="$UNIX_SRCS $FREEBSD_SRCS"
-CRYPT_LIB="-lcrypt"
ngx_spacer='
'
diff --git a/auto/os/linux b/auto/os/linux
index 5926211..32ef4cb 100644
--- a/auto/os/linux
+++ b/auto/os/linux
@@ -7,7 +7,6 @@
CORE_INCS="$UNIX_INCS"
CORE_DEPS="$UNIX_DEPS $LINUX_DEPS"
CORE_SRCS="$UNIX_SRCS $LINUX_SRCS"
-CRYPT_LIB="-lcrypt"
ngx_spacer='
'
diff --git a/auto/unix b/auto/unix
index e9e0c7a..6295ec2 100755
--- a/auto/unix
+++ b/auto/unix
@@ -32,7 +32,7 @@
. auto/types/sizeof
ngx_param=NGX_SIG_ATOMIC_T_SIZE; ngx_value=$ngx_size; . auto/types/value
-ngx_type="socklen_t"; ngx_types="uint32_t"; . auto/types/typedef
+ngx_type="socklen_t"; ngx_types="int"; . auto/types/typedef
ngx_type="in_addr_t"; ngx_types="uint32_t"; . auto/types/typedef