nginx-0.3.21-RELEASE import

    *) Feature: the ngx_http_perl_module.

    *) Change: the "valid_referers" directive allows the referreres without
       URI part.
diff --git a/auto/cc/gcc b/auto/cc/gcc
index 5c5f61c..21a7340 100644
--- a/auto/cc/gcc
+++ b/auto/cc/gcc
@@ -172,3 +172,5 @@
 if [ ".$CPP" = "." ]; then
     CPP="$CC -E"
 fi
+
+NGX_PERL_CFLAGS="$CFLAGS"
diff --git a/auto/install b/auto/install
index 55f868a..07535b7 100644
--- a/auto/install
+++ b/auto/install
@@ -2,9 +2,23 @@
 # Copyright (C) Igor Sysoev
 
 
+if [ $USE_PERL = YES ]; then
+
+    cat << END                                                >> $NGX_MAKEFILE
+
+install_perl_modules:
+	cd $NGX_OBJS/src/http/modules/perl && make install
+END
+
+    NGX_INSTALL_PERL_MODULES=install_perl_modules
+
+fi
+
+
 cat << END                                                    >> $NGX_MAKEFILE
 
-install:	$NGX_OBJS${ngx_dirsep}nginx${ngx_binext}
+install:	$NGX_OBJS${ngx_dirsep}nginx${ngx_binext}	\
+		$NGX_INSTALL_PERL_MODULES
 	test -d '$NGX_PREFIX' || mkdir -p '$NGX_PREFIX'
 
 	test -d '`dirname "$NGX_SBIN_PATH"`' \
diff --git a/auto/lib/conf b/auto/lib/conf
index 70053b5..62d6029 100644
--- a/auto/lib/conf
+++ b/auto/lib/conf
@@ -26,3 +26,7 @@
 if [ $USE_ZLIB = YES ]; then
     . auto/lib/zlib/conf
 fi
+
+if [ $USE_PERL = YES ]; then
+    . auto/lib/perl/conf
+fi
diff --git a/auto/lib/make b/auto/lib/make
index ef571c5..60cd7bc 100644
--- a/auto/lib/make
+++ b/auto/lib/make
@@ -17,3 +17,7 @@
 if [ $ZLIB != NONE -a $ZLIB != NO -a $ZLIB != YES ]; then
     . auto/lib/zlib/make
 fi
+
+if [ $USE_PERL = YES ]; then
+    . auto/lib/perl/make
+fi
diff --git a/auto/lib/perl/conf b/auto/lib/perl/conf
new file mode 100644
index 0000000..1d7fe3b
--- /dev/null
+++ b/auto/lib/perl/conf
@@ -0,0 +1,53 @@
+
+# Copyright (C) Igor Sysoev
+
+
+echo "checking for perl"
+
+
+NGX_PERL_VER=`$NGX_PERL -v 2>&1 | grep '^This is perl' 2>&1 \
+                                | sed -e 's/^This is perl, \(.*\)/\1/'`
+
+if test -n "$NGX_PERL_VER"; then
+    echo " + perl version: $NGX_PERL_VER"
+
+    if [ "`echo 'use 5.006001; print "OK"' | $NGX_PERL 2>&1`" != OK ]; then
+        echo
+        echo "$0: error: perl 5.6.1 or higher is required"
+        echo
+
+        exit 1;
+    fi
+
+    CFLAGS="$CFLAGS `$NGX_PERL -MExtUtils::Embed -e ccopts`"
+    ngx_perl_ldopts=`$NGX_PERL -MExtUtils::Embed -e ldopts`
+
+    if $NGX_PERL -V:usemultiplicity | grep define > /dev/null; then
+        have=NGX_HAVE_PERL_MULTIPLICITY . auto/have
+        echo " + perl interpreter multiplicity found"
+    fi
+
+    if $NGX_PERL -V:useithreads | grep define > /dev/null; then
+        have=NGX_HAVE_PERL_CLONE . auto/have
+        echo " + perl_clone() found"
+
+    else
+        # FreeBSD port wants to link with -pthread non-threaded perl
+        ngx_perl_ldopts=`echo $ngx_perl_ldopts | sed 's/ -pthread//'`
+    fi
+
+    CORE_LINK="$CORE_LINK $ngx_perl_ldopts"
+    LINK_DEPS="$LINK_DEPS $NGX_OBJS/src/http/modules/perl/blib/arch/auto/nginx/nginx.so"
+
+    if test -n "$NGX_PERL_MODULES"; then
+        have=NGX_PERL_MODULES value="(u_char *) \"$NGX_PERL_MODULES\""
+        . auto/define
+    fi
+
+else
+    echo
+    echo "$0: error: perl 5.6.1 or higher is required"
+    echo
+
+    exit 1;
+fi
diff --git a/auto/lib/perl/make b/auto/lib/perl/make
new file mode 100644
index 0000000..3654422
--- /dev/null
+++ b/auto/lib/perl/make
@@ -0,0 +1,33 @@
+
+# Copyright (C) Igor Sysoev
+
+
+cat << END                                                    >> $NGX_MAKEFILE
+
+$NGX_OBJS/src/http/modules/perl/blib/arch/auto/nginx/nginx.so:		\
+		src/http/modules/perl/nginx.pm				\
+		src/http/modules/perl/nginx.xs				\
+		src/http/modules/perl/ngx_http_perl_module.h		\
+		$NGX_OBJS/src/http/modules/perl/Makefile
+
+	cp -p src/http/modules/perl/nginx.* $NGX_OBJS/src/http/modules/perl/
+
+	cd $NGX_OBJS/src/http/modules/perl && make
+
+
+$NGX_OBJS/src/http/modules/perl/Makefile: src/http/modules/perl/Makefile.PL
+
+	cp -p src/http/modules/perl/nginx.* $NGX_OBJS/src/http/modules/perl/
+	cp -p src/http/modules/perl/typemap $NGX_OBJS/src/http/modules/perl/
+	cp -p src/http/modules/perl/Makefile.PL $NGX_OBJS/src/http/modules/perl/
+
+	cd $NGX_OBJS/src/http/modules/perl				\
+		&& NGX_PERL_CFLAGS="$NGX_PERL_CFLAGS"			\
+			NGX_PCRE=$PCRE					\
+			NGX_ZLIB=$ZLIB					\
+			NGX_OBJS=$NGX_OBJS				\
+		$NGX_PERL Makefile.PL					\
+			LIB=$NGX_PERL_MODULES
+
+
+END
diff --git a/auto/make b/auto/make
index e5c5efb..3031653 100644
--- a/auto/make
+++ b/auto/make
@@ -5,7 +5,7 @@
 mkdir -p $NGX_OBJS/src/core $NGX_OBJS/src/event $NGX_OBJS/src/event/modules \
          $NGX_OBJS/src/os/unix $NGX_OBJS/src/os/win32 \
          $NGX_OBJS/src/http $NGX_OBJS/src/http/modules \
-	 $NGX_OBJS/src/http/modules/proxy \
+	 $NGX_OBJS/src/http/modules/perl \
          $NGX_OBJS/src/imap
 
 
diff --git a/auto/modules b/auto/modules
index 8a67414..ef3a35d 100644
--- a/auto/modules
+++ b/auto/modules
@@ -191,7 +191,6 @@
     have=NGX_HTTP_PROXY . auto/have
     #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
@@ -201,6 +200,15 @@
     HTTP_SRCS="$HTTP_SRCS $HTTP_FASTCGI_SRCS"
 fi
 
+if [ $HTTP_PERL = YES ]; then
+    USE_PERL=YES
+    have=NGX_HTTP_PERL . auto/have
+    HTTP_MODULES="$HTTP_MODULES $HTTP_PERL_MODULE"
+    HTTP_INCS="$HTTP_INCS $HTTP_PERL_INCS"
+    HTTP_DEPS="$HTTP_DEPS $HTTP_PERL_DEPS"
+    HTTP_SRCS="$HTTP_SRCS $HTTP_PERL_SRCS"
+fi
+
 if [ $HTTP_MEMCACHED = YES ]; then
     HTTP_MODULES="$HTTP_MODULES $HTTP_MEMCACHED_MODULE"
     HTTP_SRCS="$HTTP_SRCS $HTTP_MEMCACHED_SRCS"
diff --git a/auto/options b/auto/options
index da00edf..6b991a9 100644
--- a/auto/options
+++ b/auto/options
@@ -62,6 +62,7 @@
 HTTP_REWRITE=YES
 HTTP_PROXY=YES
 HTTP_FASTCGI=YES
+HTTP_PERL=NO
 HTTP_MEMCACHED=YES
 HTTP_EMPTY_GIF=YES
 
@@ -90,6 +91,9 @@
 ZLIB_OPT=
 ZLIB_ASM=NO
 
+USE_PERL=NO
+NGX_PERL=perl
+
 NGX_CPU_CACHE_LINE=
 
 
@@ -150,6 +154,10 @@
         --without-http_memcached_module) HTTP_MEMCACHED=NO          ;;
         --without-http_empty_gif_module) HTTP_EMPTY_GIF=NO          ;;
 
+        --with-http_perl_module)         HTTP_PERL=YES              ;;
+        --with-perl_modules_path=*)      NGX_PERL_MODULES="$value"  ;;
+        --with-perl=*)                   NGX_PERL="$value"          ;;
+
         # STUB
         --with-http_stub_status_module)  HTTP_STUB_STATUS=YES       ;;
 
@@ -235,6 +243,10 @@
   --without-http_memcached_module    disable ngx_http_memcached_module
   --without-http_empty_gif_module    disable ngx_http_empty_gif_module
 
+  --with-http_perl_module            enable ngx_http_perl_module
+  --with-perl_modules_path=PATH      set path to the perl modules
+  --with-perl=PATH                   set path to the perl binary
+
   --http-log-path=PATH               set path to the http access log
   --http-client-body-temp-path=PATH  set path to the http client request body
                                      temporary files path
@@ -414,3 +426,16 @@
         NGX_HTTP_FASTCGI_TEMP_PATH=$NGX_PREFIX/$NGX_HTTP_FASTCGI_TEMP_PATH
     ;;
 esac
+
+
+case ".$NGX_PERL_MODULES" in
+    ./*)
+    ;;
+
+    .)
+    ;;
+
+    *)
+        NGX_PERL_MODULES=$NGX_PREFIX/$NGX_PERL_MODULES
+    ;;
+esac
diff --git a/auto/sources b/auto/sources
index c352da3..5ffbc6c 100644
--- a/auto/sources
+++ b/auto/sources
@@ -360,6 +360,12 @@
 HTTP_FASTCGI_SRCS=src/http/modules/ngx_http_fastcgi_module.c
 
 
+HTTP_PERL_MODULE=ngx_http_perl_module
+HTTP_PERL_INCS=src/http/modules/perl
+HTTP_PERL_DEPS=src/http/modules/perl/ngx_http_perl_module.h
+HTTP_PERL_SRCS=src/http/modules/perl/ngx_http_perl_module.c
+
+
 HTTP_MEMCACHED_MODULE=ngx_http_memcached_module
 HTTP_MEMCACHED_SRCS=src/http/modules/ngx_http_memcached_module.c