Hello community,

here is the log from the commit of package apache2-mod_wsgi for 
openSUSE:Factory checked in at 2015-08-28 08:26:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/apache2-mod_wsgi (Old)
 and      /work/SRC/openSUSE:Factory/.apache2-mod_wsgi.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "apache2-mod_wsgi"

Changes:
--------
New Changes file:

--- /dev/null   2015-08-24 19:43:32.284261900 +0200
+++ 
/work/SRC/openSUSE:Factory/.apache2-mod_wsgi.new/apache2-mod_wsgi-python3.changes
   2015-08-28 08:26:04.000000000 +0200
@@ -0,0 +1,154 @@
+-------------------------------------------------------------------
+Sat Aug 15 17:56:30 CEST 2015 - m...@suse.de
+
+- update to 4.4.8
+- seperate package for python3 to fix module loading errors
+- conflict with mod_wsgi
+
+-------------------------------------------------------------------
+Thu Aug  6 13:07:16 UTC 2015 - m...@suse.com
+
+- Build subpackage with mod_wsgi_python3 (bsc#939717)
+
+-------------------------------------------------------------------
+Thu Jul 16 07:22:02 UTC 2015 - pgaj...@suse.com
+
+- Requries: %{apache_suse_maintenance_mmn}
+  This will pull this module to the update (in released distribution) 
+  when apache maintainer thinks it is good (due api/abi changes).
+
+-------------------------------------------------------------------
+Fri Jan 30 18:12:20 UTC 2015 - rjsch...@suse.com
+
+- Fix build failure on SLE 12 (Apache 2.4.10)
+  + add wsgi_fixVersionCheck.patch
+  + build failed due to improper version check
+
+-------------------------------------------------------------------
+Thu Jan 29 23:52:14 UTC 2015 - rjsch...@suse.com
+
+- Update to version 4.4.6
+  - Upstream release notes:
+    + http://modwsgi.readthedocs.org/en/latest/release-notes/version-4.4.6.html
+    + http://modwsgi.readthedocs.org/en/latest/release-notes/version-4.4.5.html
+    + http://modwsgi.readthedocs.org/en/latest/release-notes/version-4.4.4.html
+    .....
+  - As of version 4.2.7 mod_wsgi is effected by
+    https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=758035
+    
+-------------------------------------------------------------------
+Mon Nov  3 09:53:08 UTC 2014 - pgaj...@suse.com
+
+- call spec-cleaner
+- use apache rpm macros 
+
+-------------------------------------------------------------------
+Thu Jul 10 08:43:08 CEST 2014 - m...@suse.de
+
+- change URL to new location
+
+-------------------------------------------------------------------
+Wed Jul  9 14:13:29 CEST 2014 - m...@suse.de
+
+- provide short module name
+
+-------------------------------------------------------------------
+Wed Jul  9 11:34:41 CEST 2014 - m...@suse.de
+
+- Update to version 4.2.5
+  - remove mod_wsgi-3.4-connsbh.patch - included in upstream version
+  - remove mod_wsgi-setuid-patch.diff - included in upstream version
+  - No longer support the use of mod_python in conjunction with 
+    mod_wsgi
+  - Adding a lot of new configuration option
+  - fix off-by-one error in setgroups (bnc#883229)
+
+-------------------------------------------------------------------
+Sat May 24 13:49:13 UTC 2014 - m...@suse.com
+
+- fix Local privilege escalation (bnc#878550)
+  CVE-2014-0240
+
+-------------------------------------------------------------------
+Mon Apr 28 20:16:57 UTC 2014 - adaugher...@tamu.edu
+
+- Fix module name sent to a2enmod/a2dismod and fix/cleanup
+  post/postun scripts.
+
+-------------------------------------------------------------------
+Sat Nov 30 12:28:43 UTC 2013 - ag...@suse.com
+
+- Add patch "mod_wsgi-3.4-connsbh.patch" to fix segmentation faults
+  with apache 2.4 (https://bugzilla.redhat.com/show_bug.cgi?id=831701)
+
+-------------------------------------------------------------------
+Wed Jan 30 14:39:38 UTC 2013 - dims...@opensuse.org
+
+- Update to version 3.4:
+  + New support for Apache 2.4
+  + Support for Python 3.2
+  + Is now guaranteed that mod_ssl access handler is run before
+    that for mod_wsgi so that any per request variables setup by
+    mod_ssl are available in the mod_wsgi access handler as
+    implemented by WSGIAccessScript directive.
+  + Added 'python-home' option to WSGIDaemonProcess.
+  + Added 'lang' and 'locale' options to WSGIDaemonProcess.
+  + Split combined WWW-Authenticate header returned from daemon
+    process back into separate headers.
+- Introduce build compatibility with apache 2.4: apxs2 was moved
+  from %{_sbindir} to %{_bindir}
+
+-------------------------------------------------------------------
+Fri Nov 16 08:06:08 UTC 2012 - sasc...@suse.de
+
+- Require apache2, a module makes little sense without
+
+-------------------------------------------------------------------
+Fri Dec 16 12:59:15 UTC 2011 - ch...@computersalat.de
+
+- add post/postun section
+  * enable module after install (a2enmod)
+  * disable module after deinstall (a2enmod -d)
+- fix License as required by http://spdx.org/licenses/
+  * Apache-2.0
+- fix build for CentOS/RHEL
+- spec-cleanup
+
+-------------------------------------------------------------------
+Sat Sep 17 11:21:55 UTC 2011 - jeng...@medozas.de
+
+- Remove redundant tags/sections from specfile
+- Use %_smp_mflags for parallel build
+
+-------------------------------------------------------------------
+Wed Oct 27 02:18:42 UTC 2010 - ter...@gmail.com
+
+- update to 3.3:
+  http://code.google.com/p/modwsgi/wiki/ChangesInVersion0303
+
+-------------------------------------------------------------------
+Wed May 13 12:00:59 CEST 2009 - pascal.ble...@opensuse.org
+
+- update to 2.5:
+  http://code.google.com/p/modwsgi/wiki/ChangesInVersion0205
+
+- minor spec file fixes (use %configure, -j%jobs)
+
+-------------------------------------------------------------------
+Wed Sep 17 16:35:58 CEST 2008 - po...@suse.de
+
+- update to 2.3. Changelog:
+  http://code.google.com/p/modwsgi/wiki/ChangesInVersion0202
+  http://code.google.com/p/modwsgi/wiki/ChangesInVersion0203
+
+-------------------------------------------------------------------
+Fri Aug  8 14:29:26 CEST 2008 - po...@suse.de
+
+- update to 2.1. Changelog:
+  http://code.google.com/p/modwsgi/wiki/ChangesInVersion0201
+
+-------------------------------------------------------------------
+Tue Mar 11 15:40:46 CET 2008 - po...@suse.de
+
+- initial package (version 1.3)
+
--- /work/SRC/openSUSE:Factory/apache2-mod_wsgi/apache2-mod_wsgi.changes        
2015-08-07 00:24:55.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.apache2-mod_wsgi.new/apache2-mod_wsgi.changes   
2015-08-28 08:26:04.000000000 +0200
@@ -1,0 +2,10 @@
+Sat Aug 15 17:55:03 CEST 2015 - m...@suse.de
+
+- update to 4.4.8
+  * Upstream release notes:
+    + http://modwsgi.readthedocs.org/en/latest/release-notes/version-4.4.7.html
+    + http://modwsgi.readthedocs.org/en/latest/release-notes/version-4.4.8.html
+- seperate package for python3 to fix module loading errors
+- conflict with mod_wsgi-python3
+
+-------------------------------------------------------------------

Old:
----
  mod_wsgi-4.4.6.tar.gz

New:
----
  apache2-mod_wsgi-python3.changes
  apache2-mod_wsgi-python3.spec
  mod_wsgi-4.4.8.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ apache2-mod_wsgi-python3.spec ++++++
#
# spec file for package apache2-mod_wsgi-python3
#
# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via http://bugs.opensuse.org/
#


%define modname        mod_wsgi
Name:           apache2-mod_wsgi-python3
Version:        4.4.8
Release:        0
Summary:        A WSGI interface for Python3 web applications in Apache
License:        Apache-2.0
Group:          Productivity/Networking/Web/Servers
Url:            https://github.com/GrahamDumpleton/mod_wsgi
#Source:        
https://github.com/GrahamDumpleton/mod_wsgi/archive/%%{version}.tar.gz
Source:         %{modname}-%{version}.tar.gz
## Work around for inconsistent Apache source tree in SLE 12, see bnc#915479
Patch0:         wsgi_fixVersionCheck.patch
BuildRequires:  python3-devel
Provides:       %{modname} = %{version}-%{release}
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
%if 0%{?suse_version}
BuildRequires:  apache-rpm-macros
BuildRequires:  apache2-devel
%else
%define apache_apxs %{bindir}/apxs
%define apache_sysconfdir %(%{apache_apxs} -q PREFIX)
BuildRequires:  httpd
BuildRequires:  httpd-devel
%endif
%if 0%{?suse_version}
Requires:       %{apache_mmn}
Requires:       %{apache_suse_maintenance_mmn}
Requires:       apache2
%else
Requires:       httpd
%endif
Conflicts:      apache2-mod_wsgi

%description
The mod_wsgi adapter is an Apacheache module that provides a WSGI compliant
interface for hosting Python based web applications within Apache. The
adapter is writtentten completely in C code against the Apache C runtime and
for hosting WSGI applications within Apache has a lower overhead than using
existing WSGI adapters for mod_python or CGI.


%prep
%setup -q -n %{modname}-%{version}
%patch0 -p1

%build
export CFLAGS="%{optflags} -fno-strict-aliasing"
%configure \
%if 0%{?suse_version}
    --with-apxs="%{apache_apxs}-prefork" \
%else
    --with-apxs="%{apache_apxs}" \
%endif
    --with-python="python3"
make %{?_smp_mflags}

%install
make install DESTDIR=%{buildroot} LIBEXECDIR=%{apache_libexecdir}

%post
%if 0%{?suse_version}
if ! %{_sbindir}/a2enmod -q wsgi; then
  %{_sbindir}/a2enmod wsgi
fi
%endif

%postun
%if 0%{?suse_version}
if [ "$1" = "0" ]; then
  if a2enmod -q wsgi; then
    %{_sbindir}/a2enmod -d wsgi
  fi
fi
%endif

%files
%defattr(-,root,root)
%doc LICENSE README.rst docs/release-notes
%dir %{apache_libexecdir}
%{apache_libexecdir}/%{modname}.so

%changelog
++++++ apache2-mod_wsgi.spec ++++++
--- /var/tmp/diff_new_pack.nEBAn8/_old  2015-08-28 08:26:05.000000000 +0200
+++ /var/tmp/diff_new_pack.nEBAn8/_new  2015-08-28 08:26:05.000000000 +0200
@@ -16,10 +16,9 @@
 #
 
 
-%define py3dir  %_builddir/py3
 %define modname        mod_wsgi
 Name:           apache2-mod_wsgi
-Version:        4.4.6
+Version:        4.4.8
 Release:        0
 Summary:        Python WSGI adapter module for Apache
 License:        Apache-2.0
@@ -48,38 +47,16 @@
 %else
 Requires:       httpd
 %endif
+Conflicts:      apache2-mod_wsgi-python3
 
 %description
 The aim of mod_wsgi is to implement a simple to use Apache module which can
 host any Python application which supports the Python WSGI interface.
 
-%package python3
-Summary:        A WSGI interface for Python3 web applications in Apache
-Group:          System Environment/Libraries
-BuildRequires:  python3-devel
-%if 0%{?suse_version}
-Requires:       %{apache_mmn}
-Requires:       %{apache_suse_maintenance_mmn}
-Requires:       apache2
-%else
-Requires:       httpd
-%endif
-
-%description python3
-The mod_wsgi adapter is an Apacheache module that provides a WSGI compliant
-interface for hosting Python based web applications within Apache. The
-adapter is writtentten completely in C code against the Apache C runtime and
-for hosting WSGI applications within Apache has a lower overhead than using
-existing WSGI adapters for mod_python or CGI.
-
-
 %prep
 %setup -q -n %{modname}-%{version}
 %patch0 -p1
 
-mkdir -p %{py3dir}
-cp -a . %{py3dir}
-
 %build
 export CFLAGS="%{optflags} -fno-strict-aliasing"
 %configure \
@@ -91,23 +68,7 @@
     --with-python="python"
 make %{?_smp_mflags}
 
-pushd %{py3dir}
-%configure \
-%if 0%{?suse_version}
-    --with-apxs="%{apache_apxs}-prefork" \
-%else
-    --with-apxs="%{apache_apxs}" \
-%endif
-    --with-python="python3"
-make %{?_smp_mflags}
-popd
-
 %install
-pushd %{py3dir}
-make install DESTDIR=$RPM_BUILD_ROOT LIBEXECDIR=%{apache_libexecdir}
-mv  $RPM_BUILD_ROOT%{apache_libexecdir}/mod_wsgi{,_python3}.so
-popd
-
 make install DESTDIR=%{buildroot} LIBEXECDIR=%{apache_libexecdir}
 
 %post
@@ -126,32 +87,10 @@
 fi
 %endif
 
-%post python3
-%if 0%{?suse_version}
-if ! %{_sbindir}/a2enmod -q wsgi_python3; then
-  %{_sbindir}/a2enmod wsgi_python3
-fi
-%endif
-
-%postun python3
-%if 0%{?suse_version}
-if [ "$1" = "0" ]; then
-  if a2enmod -q wsgi_python3; then
-    %{_sbindir}/a2enmod -d wsgi_python3
-  fi
-fi
-%endif
-
 %files
 %defattr(-,root,root)
 %doc LICENSE README.rst docs/release-notes
 %dir %{apache_libexecdir}
 %{apache_libexecdir}/%{modname}.so
 
-%files python3
-%defattr(-,root,root)
-%doc LICENSE README.rst docs/release-notes
-%dir %{apache_libexecdir}
-%{apache_libexecdir}/%{modname}_python3.so
-
 %changelog

++++++ mod_wsgi-4.4.6.tar.gz -> mod_wsgi-4.4.8.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.4.6/docs/release-notes/index.rst 
new/mod_wsgi-4.4.8/docs/release-notes/index.rst
--- old/mod_wsgi-4.4.6/docs/release-notes/index.rst     2015-01-15 
11:12:31.000000000 +0100
+++ new/mod_wsgi-4.4.8/docs/release-notes/index.rst     2015-02-08 
10:34:19.000000000 +0100
@@ -5,6 +5,8 @@
 .. toctree::
    :maxdepth: 2
 
+   version-4.4.8.rst
+   version-4.4.7.rst
    version-4.4.6.rst
    version-4.4.5.rst
    version-4.4.4.rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.4.6/docs/release-notes/version-4.4.7.rst 
new/mod_wsgi-4.4.8/docs/release-notes/version-4.4.7.rst
--- old/mod_wsgi-4.4.6/docs/release-notes/version-4.4.7.rst     1970-01-01 
01:00:00.000000000 +0100
+++ new/mod_wsgi-4.4.8/docs/release-notes/version-4.4.7.rst     2015-02-08 
10:34:19.000000000 +0100
@@ -0,0 +1,69 @@
+=============
+Version 4.4.7
+=============
+
+Version 4.4.7 of mod_wsgi can be obtained from:
+
+  https://codeload.github.com/GrahamDumpleton/mod_wsgi/tar.gz/4.4.7
+
+For details on the availability of Windows binaries see:
+
+  https://github.com/GrahamDumpleton/mod_wsgi/tree/master/win32
+
+Features Changed
+----------------
+
+1. The ``proxy-buffer-size`` option to ``WSGIDaemonProcess`` directive
+was renamed to ``response-buffer-size`` to avoid confusion with options
+related to normal HTTP proxying. The ``--proxy-buffer-size`` option of
+``mod_wsgi-express`` was similarly renamed to ``--response-buffer-size``.
+
+New Features
+------------
+
+1. Added ``--service-script`` option to ``mod_wsgi-express`` to allow a
+Python script to be loaded and executed in the context of a distinct
+daemon process. This can be used for executing a service to be managed by
+Apache, even though it is a distinct application. The options take two
+arguments, a short name for the service and the path to the Python script
+for starting the service.
+
+If ``mod_wsgi-express`` is being run as root, then a user and group can be
+specified for the service using the ``--service-user`` and
+``--service-group`` options. The options take two arguments, a short name
+for the service and the user or group name respectively.
+
+2. Added ``--proxy-url-alias`` option to ``mod_wsgi-express`` for setting
+up proxying of a sub URL of the site to a remote URL.
+
+3. Added ``--proxy-virtual-host`` option to ``mod_wsgi-express`` for setting
+up proxying of a whole virtual host to a remote URL. Only supports proxying
+of HTTP requests and not HTTPS requests.
+
+4. Added ``eviction-timeout`` option to ``WSGIDaemonProcess`` directive.
+For the case where the graceful restart signal, usually ``SIGUSR1``, is
+sent to a daemon process to evict the WSGI application and restart the
+process, this controls how many seconds the process will wait, while still
+accepting new requests, before it reaches an idle state with no active
+requests and shuts down.
+
+The ``graceful-timeout`` option previously performed this exact role in
+this case previously, but a separate option is being added to allow a
+different timeout period to be specified for the case for forced eviction.
+The existing ``graceful-timeout`` option is still used when a maximum
+requests option or CPU usage limit is set. For backwards compatibility,
+if ``eviction-timeout`` isn't set, it will fall back to using any value
+specified using the ``graceful-timeout`` option.
+
+The ``--eviction-timeout`` option has also been added to
+``mod_wsgi-express`` and behaves in a similar fashion.
+
+5. Added support for new ``mod_wsgi-httpd`` package. The ``mod_wsgi-httpd``
+package is a pip installable package which will build the Apache httpd
+server and install it into the Python installation. If the
+``mod_wsgi-httpd`` package is installed before installing this package,
+then the Apache httpd server installation installed by ``mod_wsgi-httpd``
+will be used instead of any system installed version of the Apache httpd
+server when running ``mod_wsgi-express``. This allows you to workaround
+any inability to upgrade the main Apache installation, or install its 'dev'
+package if missing, or install it outright if not present.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.4.6/docs/release-notes/version-4.4.8.rst 
new/mod_wsgi-4.4.8/docs/release-notes/version-4.4.8.rst
--- old/mod_wsgi-4.4.6/docs/release-notes/version-4.4.8.rst     1970-01-01 
01:00:00.000000000 +0100
+++ new/mod_wsgi-4.4.8/docs/release-notes/version-4.4.8.rst     2015-02-08 
10:34:19.000000000 +0100
@@ -0,0 +1,34 @@
+=============
+Version 4.4.8
+=============
+
+Version 4.4.8 of mod_wsgi can be obtained from:
+
+  https://codeload.github.com/GrahamDumpleton/mod_wsgi/tar.gz/4.4.8
+
+For details on the availability of Windows binaries see:
+
+  https://github.com/GrahamDumpleton/mod_wsgi/tree/master/win32
+
+Bugs Fixed
+----------
+
+1. The eviction timeout was not being correctly applied when request timeout
+wasn't being applied at the same time. It may have partly worked if any of
+inactivity or graceful timeout were also specified, but the application of
+the timeout may still have been delayed.
+
+New Features
+------------
+
+1. Added the ``--error-log-name`` option to ``mod_wsgi-express`` to allow
+the name of the file used for the error log, when being written to the log
+directory, to be overridden.
+
+2. Added the ``--access-log-name`` option to ``mod_wsgi-express`` to allow
+the name of the file used for the access log, when being written to the log
+directory, to be overridden.
+
+3. Added the ``--startup-log-name`` option to ``mod_wsgi-express`` to allow
+the name of the file used for the startup log, when being written to the log
+directory, to be overridden.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.4.6/setup.py new/mod_wsgi-4.4.8/setup.py
--- old/mod_wsgi-4.4.6/setup.py 2015-01-15 11:12:31.000000000 +0100
+++ new/mod_wsgi-4.4.8/setup.py 2015-02-08 10:34:19.000000000 +0100
@@ -19,49 +19,48 @@
 from distutils.sysconfig import get_config_var as get_python_config
 from distutils.sysconfig import get_python_lib
 
-# Before anything else, this setup.py uses various tricks to install
-# precompiled Apache binaries for the Heroku and OpenShift environments.
-# Once they are installed, then the installation of the mod_wsgi package
-# itself will be triggered, ensuring that it can be built against the
-# precompiled Apache binaries which were installed.
+# Before anything else, this setup.py uses some tricks to potentially
+# install Apache. This can be from a local tarball, or from precompiled
+# Apache binaries for Heroku and OpenShift environments downloaded from
+# Amazon S3. Once they are installed, then the installation of the
+# mod_wsgi package itself will be triggered, ensuring that it can be
+# built against the precompiled Apache binaries which were installed.
 #
-# We therefore first need to work out whether we are actually running on
-# either Heroku of OpenShift. If we are, then we identify the set of
-# precompiled binaries we are to use and copy it into the Python
-# installation.
+# First work out whether we are actually running on either Heroku or
+# OpenShift. If we are, then we identify the set of precompiled binaries
+# we are to use and copy it into the Python installation.
 
 PREFIX = 'https://s3.amazonaws.com'
 BUCKET = os.environ.get('MOD_WSGI_REMOTE_S3_BUCKET_NAME', 'modwsgi.org')
 
 REMOTE_TARBALL_NAME = os.environ.get('MOD_WSGI_REMOTE_PACKAGES_NAME')
+LOCAL_TARBALL_FILE = os.environ.get('MOD_WSGI_LOCAL_PACKAGES_FILE')
 
 TGZ_OPENSHIFT='mod_wsgi-packages-openshift-centos6-apache-2.4.10-1.tar.gz'
 TGZ_HEROKU='mod_wsgi-packages-heroku-cedar14-apache-2.4.10-1.tar.gz'
 
-if not REMOTE_TARBALL_NAME:
+if not REMOTE_TARBALL_NAME and not LOCAL_TARBALL_FILE:
     if os.environ.get('OPENSHIFT_HOMEDIR'):
         REMOTE_TARBALL_NAME = TGZ_OPENSHIFT
     elif os.path.isdir('/app/.heroku'):
         REMOTE_TARBALL_NAME = TGZ_HEROKU
 
-LOCAL_TARBALL_FILE = os.environ.get('MOD_WSGI_LOCAL_PACKAGES_FILE')
-
 REMOTE_TARBALL_URL = None
 
 if LOCAL_TARBALL_FILE is None and REMOTE_TARBALL_NAME:
     REMOTE_TARBALL_URL = '%s/%s/%s' % (PREFIX, BUCKET, REMOTE_TARBALL_NAME)
 
-WITH_PACKAGES = False
+WITH_TARBALL_PACKAGE = False
 
 if REMOTE_TARBALL_URL or LOCAL_TARBALL_FILE:
-    WITH_PACKAGES = True
+    WITH_TARBALL_PACKAGE = True
 
 # If we are doing an install, download the tarball and unpack it into
 # the 'packages' subdirectory. We will then add everything in that
 # directory as package data so that it will be installed into the Python
 # installation.
 
-if WITH_PACKAGES:
+if WITH_TARBALL_PACKAGE:
     if REMOTE_TARBALL_URL:
         if not os.path.isfile(REMOTE_TARBALL_NAME):
             print('Downloading', REMOTE_TARBALL_URL)
@@ -69,11 +68,12 @@
             os.rename(REMOTE_TARBALL_NAME+'.download', REMOTE_TARBALL_NAME)
         LOCAL_TARBALL_FILE = REMOTE_TARBALL_NAME
 
-    shutil.rmtree('src/packages', ignore_errors=True)
+    if LOCAL_TARBALL_FILE:
+        shutil.rmtree('src/packages', ignore_errors=True)
 
-    tar = tarfile.open(LOCAL_TARBALL_FILE)
-    tar.extractall('src/packages')
-    tar.close()
+        tar = tarfile.open(LOCAL_TARBALL_FILE)
+        tar.extractall('src/packages')
+        tar.close()
 
     open('src/packages/__init__.py', 'a').close()
 
@@ -119,19 +119,27 @@
 
 APXS = os.environ.get('APXS')
 
+WITH_HTTPD_PACKAGE = False
+
+if APXS is None:
+    APXS = find_program(['mod_wsgi-apxs'])
+    if APXS is not None:
+        WITH_HTTPD_PACKAGE = True
+
 if APXS is None:
-    APXS = find_program(['apxs2', 'apxs'], 'apxs', ['/usr/sbin', os.getcwd()])
+    APXS = find_program(['mod_wsgi-apxs', 'apxs2', 'apxs'],
+            'apxs', ['/usr/sbin', os.getcwd()])
 elif not os.path.isabs(APXS):
     APXS = find_program([APXS], APXS, ['/usr/sbin', os.getcwd()])
 
-if not WITH_PACKAGES:
+if not WITH_TARBALL_PACKAGE:
     if not os.path.isabs(APXS) or not os.access(APXS, os.X_OK):
         raise RuntimeError('The %r command appears not to be installed or '
                 'is not executable. Please check the list of prerequisites '
                 'in the documentation for this package and install any '
                 'missing Apache httpd server packages.' % APXS)
 
-if WITH_PACKAGES: 
+if WITH_TARBALL_PACKAGE: 
     SCRIPT_DIR = os.path.join(os.path.dirname(__file__), 'src', 'packages')
 
     CONFIG_FILE = os.path.join(SCRIPT_DIR, 'apache/build/config_vars.mk')
@@ -189,29 +197,6 @@
     CONFIG['SBINDIR'] = get_apxs_config('sbindir')
     CONFIG['PROGNAME'] = get_apxs_config('progname')
 
-    _CFLAGS_NAMES = ['SHLTCFLAGS', 'CFLAGS', 'NOTEST_CPPFLAGS',
-        'EXTRA_CPPFLAGS', 'EXTRA_CFLAGS']
-
-    _CFLAGS_VALUES = []
-
-    for name in _CFLAGS_NAMES:
-        value = get_apxs_config(name)
-
-        # Heroku doesn't appear to run the same version of gcc
-        # that a standard Ubuntu installation does and which was
-        # used to originally build the Apache binaries. We need
-        # therefore to strip out flags that the Heroku gcc may
-        # not understand.
-
-        if value:
-            if os.path.isdir('/app/.heroku'):
-                value = value.replace('-prefer-pic', '')
-
-        if value:
-            _CFLAGS_VALUES.append(value)
-
-    CONFIG['CFLAGS'] = ' '.join(_CFLAGS_VALUES)
-
 else:
     def get_apxs_config(query):
         p = subprocess.Popen([APXS, '-q', query],
@@ -248,18 +233,31 @@
 APXS_CONFIG_TEMPLATE = """
 import os
 
-WITH_PACKAGES = %(WITH_PACKAGES)r
+WITH_TARBALL_PACKAGE = %(WITH_TARBALL_PACKAGE)r
+WITH_HTTPD_PACKAGE = %(WITH_HTTPD_PACKAGE)r
 
-if WITH_PACKAGES:
-    import mod_wsgi.packages
-    PACKAGES = os.path.join(os.path.dirname(mod_wsgi.packages.__file__))
-    BINDIR = os.path.join(PACKAGES, 'apache', 'bin')
+if WITH_HTTPD_PACKAGE:
+    from mod_wsgi_packages.httpd import __file__ as PACKAGES_ROOTDIR
+    PACKAGES_ROOTDIR = os.path.dirname(PACKAGES_ROOTDIR)
+    BINDIR = os.path.join(PACKAGES_ROOTDIR, 'bin')
+    SBINDIR = BINDIR
+    LIBEXECDIR = os.path.join(PACKAGES_ROOTDIR, 'modules')
+    SHLIBPATH = os.path.join(PACKAGES_ROOTDIR, 'lib')
+elif WITH_TARBALL_PACKAGE:
+    from mod_wsgi.packages import __file__ as PACKAGES_ROOTDIR
+    PACKAGES_ROOTDIR = os.path.dirname(PACKAGES_ROOTDIR)
+    BINDIR = os.path.join(PACKAGES_ROOTDIR, 'apache', 'bin')
     SBINDIR = BINDIR
-    LIBEXECDIR = os.path.join(PACKAGES, 'apache', 'modules')
+    LIBEXECDIR = os.path.join(PACKAGES_ROOTDIR, 'apache', 'modules')
+    SHLIBPATH = []
+    SHLIBPATH.append(os.path.join(PACKAGES_ROOTDIR, 'apr-util', 'lib'))
+    SHLIBPATH.append(os.path.join(PACKAGES_ROOTDIR, 'apr', 'lib'))
+    SHLIBPATH = ':'.join(SHLIBPATH)
 else:
     BINDIR = '%(BINDIR)s'
     SBINDIR = '%(SBINDIR)s'
     LIBEXECDIR = '%(LIBEXECDIR)s'
+    SHLIBPATH = ''
 
 MPM_NAME = '%(MPM_NAME)s'
 PROGNAME = '%(PROGNAME)s'
@@ -282,7 +280,9 @@
 
 with open(os.path.join(os.path.dirname(__file__),
         'src/server/apxs_config.py'), 'w') as fp:
-    print(APXS_CONFIG_TEMPLATE % dict(WITH_PACKAGES=WITH_PACKAGES,
+    print(APXS_CONFIG_TEMPLATE % dict(
+            WITH_TARBALL_PACKAGE=WITH_TARBALL_PACKAGE,
+            WITH_HTTPD_PACKAGE=WITH_HTTPD_PACKAGE,
             BINDIR=BINDIR, SBINDIR=SBINDIR, LIBEXECDIR=LIBEXECDIR,
             MPM_NAME=MPM_NAME, PROGNAME=PROGNAME,
             SHLIBPATH_VAR=SHLIBPATH_VAR), file=fp)
@@ -429,5 +429,4 @@
     ext_modules = [extension],
     entry_points = { 'console_scripts':
         ['mod_wsgi-express = mod_wsgi.server:main'],},
-    install_requires = ['mod_wsgi-metrics >= 1.0.0'],
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.4.6/src/server/__init__.py 
new/mod_wsgi-4.4.8/src/server/__init__.py
--- old/mod_wsgi-4.4.6/src/server/__init__.py   2015-01-15 11:12:31.000000000 
+0100
+++ new/mod_wsgi-4.4.8/src/server/__init__.py   2015-02-08 10:34:19.000000000 
+0100
@@ -77,7 +77,7 @@
 
 APACHE_GENERAL_CONFIG = """
 <IfModule !version_module>
-LoadModule version_module '%(modules_directory)s/mod_version.so'
+LoadModule version_module '${HTTPD_MODULES_DIRECTORY}/mod_version.so'
 </IfModule>
 
 ServerName %(host)s
@@ -110,7 +110,7 @@
 <IfModule !mpm_worker_module>
 <IfModule !mpm_prefork_module>
 <IfDefine WSGI_MPM_EXISTS_PREFORK_MODULE>
-LoadModule mpm_prefork_module '%(modules_directory)s/mod_mpm_prefork.so'
+LoadModule mpm_prefork_module '${HTTPD_MODULES_DIRECTORY}/mod_mpm_prefork.so'
 </IfDefine>
 </IfModule>
 </IfModule>
@@ -123,13 +123,13 @@
 <IfModule !mpm_worker_module>
 <IfModule !mpm_prefork_module>
 <IfDefine WSGI_MPM_ENABLE_EVENT_MODULE>
-LoadModule mpm_event_module '%(modules_directory)s/mod_mpm_event.so'
+LoadModule mpm_event_module '${HTTPD_MODULES_DIRECTORY}/mod_mpm_event.so'
 </IfDefine>
 <IfDefine WSGI_MPM_ENABLE_WORKER_MODULE>
-LoadModule mpm_worker_module '%(modules_directory)s/mod_mpm_worker.so'
+LoadModule mpm_worker_module '${HTTPD_MODULES_DIRECTORY}/mod_mpm_worker.so'
 </IfDefine>
 <IfDefine WSGI_MPM_ENABLE_PREFORK_MODULE>
-LoadModule mpm_prefork_module '%(modules_directory)s/mod_mpm_prefork.so'
+LoadModule mpm_prefork_module '${HTTPD_MODULES_DIRECTORY}/mod_mpm_prefork.so'
 </IfDefine>
 </IfModule>
 </IfModule>
@@ -138,66 +138,75 @@
 
 <IfVersion >= 2.4>
 <IfModule !access_compat_module>
-LoadModule access_compat_module '%(modules_directory)s/mod_access_compat.so'
+LoadModule access_compat_module 
'${HTTPD_MODULES_DIRECTORY}/mod_access_compat.so'
 </IfModule>
 <IfModule !unixd_module>
-LoadModule unixd_module '%(modules_directory)s/mod_unixd.so'
+LoadModule unixd_module '${HTTPD_MODULES_DIRECTORY}/mod_unixd.so'
 </IfModule>
 <IfModule !authn_core_module>
-LoadModule authn_core_module '%(modules_directory)s/mod_authn_core.so'
+LoadModule authn_core_module '${HTTPD_MODULES_DIRECTORY}/mod_authn_core.so'
 </IfModule>
 <IfModule !authz_core_module>
-LoadModule authz_core_module '%(modules_directory)s/mod_authz_core.so'
+LoadModule authz_core_module '${HTTPD_MODULES_DIRECTORY}/mod_authz_core.so'
 </IfModule>
 </IfVersion>
 
 <IfModule !authz_host_module>
-LoadModule authz_host_module '%(modules_directory)s/mod_authz_host.so'
+LoadModule authz_host_module '${HTTPD_MODULES_DIRECTORY}/mod_authz_host.so'
 </IfModule>
 <IfModule !mime_module>
-LoadModule mime_module '%(modules_directory)s/mod_mime.so'
+LoadModule mime_module '${HTTPD_MODULES_DIRECTORY}/mod_mime.so'
 </IfModule>
 <IfModule !rewrite_module>
-LoadModule rewrite_module '%(modules_directory)s/mod_rewrite.so'
+LoadModule rewrite_module '${HTTPD_MODULES_DIRECTORY}/mod_rewrite.so'
 </IfModule>
 <IfModule !alias_module>
-LoadModule alias_module '%(modules_directory)s/mod_alias.so'
+LoadModule alias_module '${HTTPD_MODULES_DIRECTORY}/mod_alias.so'
 </IfModule>
 <IfModule !dir_module>
-LoadModule dir_module '%(modules_directory)s/mod_dir.so'
+LoadModule dir_module '${HTTPD_MODULES_DIRECTORY}/mod_dir.so'
 </IfModule>
 <IfModule !env_module>
-LoadModule env_module '%(modules_directory)s/mod_env.so'
+LoadModule env_module '${HTTPD_MODULES_DIRECTORY}/mod_env.so'
 </IfModule>
 
 <IfVersion >= 2.2.15>
 <IfModule !reqtimeout_module>
-LoadModule reqtimeout_module '%(modules_directory)s/mod_reqtimeout.so'
+LoadModule reqtimeout_module '${HTTPD_MODULES_DIRECTORY}/mod_reqtimeout.so'
 </IfModule>
 </IfVersion>
 
 <IfDefine WSGI_COMPRESS_RESPONSES>
 <IfModule !deflate_module>
-LoadModule deflate_module '%(modules_directory)s/mod_deflate.so'
+LoadModule deflate_module '${HTTPD_MODULES_DIRECTORY}/mod_deflate.so'
 </IfModule>
 </IfDefine>
 
 <IfDefine WSGI_AUTH_USER>
 <IfModule !auth_basic_module>
-LoadModule auth_basic_module '%(modules_directory)s/mod_auth_basic.so'
+LoadModule auth_basic_module '${HTTPD_MODULES_DIRECTORY}/mod_auth_basic.so'
 </IfModule>
 <IfModule !auth_digest_module>
-LoadModule auth_digest_module '%(modules_directory)s/mod_auth_digest.so'
+LoadModule auth_digest_module '${HTTPD_MODULES_DIRECTORY}/mod_auth_digest.so'
 </IfModule>
 <IfModule !authz_user_module>
-LoadModule authz_user_module '%(modules_directory)s/mod_authz_user.so'
+LoadModule authz_user_module '${HTTPD_MODULES_DIRECTORY}/mod_authz_user.so'
+</IfModule>
+</IfDefine>
+
+<IfDefine WSGI_WITH_PROXY>
+<IfModule !proxy_module>
+LoadModule proxy_module ${HTTPD_MODULES_DIRECTORY}/mod_proxy.so
+</IfModule>
+<IfModule !proxy_http_module>
+LoadModule proxy_http_module ${HTTPD_MODULES_DIRECTORY}/mod_proxy_http.so
 </IfModule>
 </IfDefine>
 
 <IfModule mpm_prefork_module>
 <IfDefine WSGI_WITH_PHP5>
 <IfModule !php5_module>
-Loadmodule php5_module '%(modules_directory)s/libphp5.so'
+Loadmodule php5_module '${HTTPD_MODULES_DIRECTORY}/libphp5.so'
 </IfModule>
 AddHandler application/x-httpd-php .php
 </IfDefine>
@@ -207,7 +216,7 @@
 
 <IfDefine WSGI_SERVER_METRICS>
 <IfModule !status_module>
-LoadModule status_module '%(modules_directory)s/mod_status.so'
+LoadModule status_module '${HTTPD_MODULES_DIRECTORY}/mod_status.so'
 </IfModule>
 </IfDefine>
 
@@ -258,11 +267,12 @@
    inactivity-timeout=%(inactivity_timeout)s \\
    deadlock-timeout=%(deadlock_timeout)s \\
    graceful-timeout=%(graceful_timeout)s \\
+   eviction-timeout=%(eviction_timeout)s \\
    shutdown-timeout=%(shutdown_timeout)s \\
    send-buffer-size=%(send_buffer_size)s \\
    receive-buffer-size=%(receive_buffer_size)s \\
    header-buffer-size=%(header_buffer_size)s \\
-   proxy-buffer-size=%(proxy_buffer_size)s \\
+   response-buffer-size=%(response_buffer_size)s \\
    server-metrics=%(daemon_server_metrics_flag)s
 </IfDefine>
 <IfDefine !WSGI_MULTIPROCESS>
@@ -282,10 +292,11 @@
    inactivity-timeout=%(inactivity_timeout)s \\
    deadlock-timeout=%(deadlock_timeout)s \\
    graceful-timeout=%(graceful_timeout)s \\
+   eviction-timeout=%(eviction_timeout)s \\
    shutdown-timeout=%(shutdown_timeout)s \\
    send-buffer-size=%(send_buffer_size)s \\
    receive-buffer-size=%(receive_buffer_size)s \\
-   proxy-buffer-size=%(proxy_buffer_size)s \\
+   response-buffer-size=%(response_buffer_size)s \\
    server-metrics=%(daemon_server_metrics_flag)s
 </IfDefine>
 </IfDefine>
@@ -340,7 +351,7 @@
 
 <IfDefine WSGI_ACCESS_LOG>
 <IfModule !log_config_module>
-LoadModule log_config_module %(modules_directory)s/mod_log_config.so
+LoadModule log_config_module ${HTTPD_MODULES_DIRECTORY}/mod_log_config.so
 </IfModule>
 LogFormat "%%h %%l %%u %%t \\"%%r\\" %%>s %%b" common
 LogFormat "%%h %%l %%u %%t \\"%%r\\" %%>s %%b \\"%%{Referer}i\\" 
\\"%%{User-agent}i\\"" combined
@@ -360,7 +371,7 @@
 
 <IfDefine WSGI_WITH_HTTPS>
 <IfModule !ssl_module>
-LoadModule ssl_module %(modules_directory)s/mod_ssl.so
+LoadModule ssl_module ${HTTPD_MODULES_DIRECTORY}/mod_ssl.so
 </IfModule>
 </IfDefine>
 
@@ -428,6 +439,14 @@
 ThreadStackSize 262144
 </IfModule>
 
+<IfDefine !WSGI_VIRTUAL_HOST>
+<IfVersion < 2.4>
+NameVirtualHost *:%(port)s
+</IfVersion>
+<VirtualHost _default_:%(port)s>
+</VirtualHost>
+</IfDefine>
+
 <IfDefine WSGI_VIRTUAL_HOST>
 
 <IfVersion < 2.4>
@@ -604,6 +623,17 @@
 </IfDefine>
 """
 
+APACHE_PROXY_PASS_CONFIG = """
+ProxyPass '%(mount_point)s' '%(url)s'
+"""
+
+APACHE_PROXY_PASS_HOST_CONFIG = """
+<VirtualHost *:%(port)s>
+ServerName %(host)s
+ProxyPass / '%(url)s'
+</VirtualHost>
+"""
+
 APACHE_ALIAS_DIRECTORY_CONFIG = """
 Alias '%(mount_point)s' '%(directory)s'
 
@@ -674,10 +704,28 @@
     process-group=express application-group=server-metrics
 """
 
+APACHE_SERVICE_CONFIG = """
+WSGIDaemonProcess 'service:%(name)s' display-name=%%{GROUP} threads=1 \\
+    user='%(user)s' group='%(group)s'
+WSGIImportScript '%(script)s' process-group='service:%(name)s' \\
+    application-group=%%{GLOBAL}
+"""
+
 def generate_apache_config(options):
     with open(options['httpd_conf'], 'w') as fp:
         print(APACHE_GENERAL_CONFIG % options, file=fp)
 
+        if options['proxy_url_aliases']:
+            for mount_point, url in options['proxy_url_aliases']:
+                print(APACHE_PROXY_PASS_CONFIG % dict(
+                        mount_point=mount_point, url=url), file=fp)
+
+        if options['proxy_virtual_hosts']:
+            for host, url in options['proxy_virtual_hosts']:
+                print(APACHE_PROXY_PASS_HOST_CONFIG % dict(
+                        host=host, port=options['port'], url=url),
+                        file=fp)
+
         if options['url_aliases']:
             for mount_point, target in sorted(options['url_aliases'],
                     reverse=True):
@@ -722,6 +770,15 @@
                 print(APACHE_EXTENSION_CONFIG % dict(extension=extension),
                         file=fp)
 
+        if options['service_scripts']:
+            users = dict(options['service_users'] or [])
+            groups = dict(options['service_groups'] or [])
+            for name, script in options['service_scripts']:
+                user = users.get(name, '${WSGI_RUN_USER}')
+                group = groups.get(name, '${WSGI_RUN_GROUP}')
+                print(APACHE_SERVICE_CONFIG % dict(name=name, user=user,
+                        group=group, script=script), file=fp)
+
         if options['include_files']:
             for filename in options['include_files']:
                 filename = os.path.abspath(filename)
@@ -1338,6 +1395,9 @@
 
 HTTPD_COMMAND="$HTTPD $HTTPD_ARGS"
 
+HTTPD_MODULES_DIRECTORY="%(modules_directory)s"
+export HTTPD_MODULES_DIRECTORY
+
 SHLIBPATH="%(shlibpath)s"
 
 if [ "x$SHLIBPATH" != "x" ]; then
@@ -1548,10 +1608,16 @@
 
     optparse.make_option('--graceful-timeout', type='int', default=15,
             metavar='SECONDS', help='Grace period for requests to complete '
-            'normally, without accepting new requests, when worker processes '
-            'are being shutdown and restarted due to maximum requests being '
-            'reached or due to graceful restart signal. Defaults to 15 '
-            'seconds.'),
+            'normally, while still accepting new requests, when worker '
+            'processes are being shutdown and restarted due to maximum '
+            'requests being reached. Defaults to 15 seconds.'),
+    optparse.make_option('--eviction-timeout', type='int', default=0,
+            metavar='SECONDS', help='Grace period for requests to complete '
+            'normally, while still accepting new requests, when the WSGI '
+            'application is being evicted from the worker processes, and '
+            'the process restarted, due to forced graceful restart signal. '
+            'Defaults to timeout specified by \'--graceful-timeout\' '
+            'option.'),
 
     optparse.make_option('--deadlock-timeout', type='int', default=60,
             metavar='SECONDS', help='Maximum number of seconds allowed '
@@ -1655,7 +1721,7 @@
             metavar='NUMBER', help='Size of buffer used for reading '
             'response headers from daemon processes. Defaults to 0, '
             'indicating internal default of 32768 bytes is used.'),
-    optparse.make_option('--proxy-buffer-size', type='int', default=0,
+    optparse.make_option('--response-buffer-size', type='int', default=0,
             metavar='NUMBER', help='Maximum amount of response content '
             'that will be allowed to be buffered in the Apache child '
             'worker process when proxying the response from a daemon '
@@ -1670,12 +1736,12 @@
             'the worker processes will still though be reloaded if the '
             'WSGI script file itself is modified.'),
 
-    optparse.make_option('--user', default=default_run_user(), metavar='NAME',
-            help='When being run by the root user, the user that the WSGI '
-            'application should be run as.'),
+    optparse.make_option('--user', default=default_run_user(),
+            metavar='USERNAME', help='When being run by the root user, '
+            'the user that the WSGI application should be run as.'),
     optparse.make_option('--group', default=default_run_group(),
-            metavar='NAME', help='When being run by the root user, the group '
-            'that the WSGI application should be run as.'),
+            metavar='GROUP', help='When being run by the root user, the '
+            'group that the WSGI application should be run as.'),
 
     optparse.make_option('--callable-object', default='application',
             metavar='NAME', help='The name of the entry point for the WSGI '
@@ -1716,6 +1782,15 @@
             default=False, help='Flag indicating whether Apache error '
             'documents will override application error responses.'),
 
+    optparse.make_option('--proxy-url-alias', action='append', nargs=2,
+            dest='proxy_url_aliases', metavar='URL-PATH URL',
+            help='Map a sub URL such that any requests against it will be '
+            'proxied to the specified URL.'),
+    optparse.make_option('--proxy-virtual-host', action='append', nargs=2,
+            dest='proxy_virtual_hosts', metavar='HOSTNAME URL',
+            help='Proxy any requests for the specified host name to the '
+            'remote URL.'),
+
     optparse.make_option('--keep-alive-timeout', type='int', default=0,
             metavar='SECONDS', help='The number of seconds which a client '
             'connection will be kept alive to allow subsequent requests '
@@ -1837,6 +1912,16 @@
     optparse.make_option('--access-log-format', metavar='FORMAT',
             help='Specify the format of the access log records.'),
 
+    optparse.make_option('--error-log-name', metavar='FILE-NAME',
+            default='error_log', help='Specify the name of the error '
+            'log file when it is being written to the log directory.'),
+    optparse.make_option('--access-log-name', metavar='FILE-NAME',
+            default='access_log', help='Specify the name of the access '
+            'log file when it is being written to the log directory.'),
+    optparse.make_option('--startup-log-name', metavar='FILE-NAME',
+            default='startup_log', help='Specify the name of the startup '
+            'log file when it is being written to the log directory.'),
+
     optparse.make_option('--rotate-logs', action='store_true', default=False,
             help='Flag indicating whether log rotation should be performed.'),
     optparse.make_option('--max-log-size', default=5, type='int',
@@ -1909,6 +1994,22 @@
     optparse.make_option('--with-php5', action='store_true', default=False,
             help='Flag indicating whether PHP 5 support should be enabled.'),
 
+    optparse.make_option('--service-script', action='append', nargs=2,
+            dest='service_scripts', metavar='SERVICE SCRIPT-PATH',
+            help='Specify the name of a Python script to be loaded and '
+            'executed in the context of a distinct daemon process. Used '
+            'for running a managed service.'),
+    optparse.make_option('--service-user', action='append', nargs=2,
+            dest='service_users', metavar='SERVICE USERNAME',
+            help='When being run by the root user, the user that the '
+            'distinct daemon process started to run the managed service '
+            'should be run as.'),
+    optparse.make_option('--service-group', action='append', nargs=2,
+            dest='service_groups', metavar='SERVICE GROUP',
+            help='When being run by the root user, the group that the '
+            'distinct daemon process started to run the managed service '
+            'should be run as.'),
+
     optparse.make_option('--enable-docs', action='store_true', default=False,
             help='Flag indicating whether the mod_wsgi documentation should '
             'be made available at the /__wsgi__/docs sub URL.'),
@@ -2124,7 +2225,7 @@
 
     if not options['log_to_terminal']:
         options['error_log_file'] = os.path.join(options['log_directory'],
-                'error_log')
+                options['error_log_name'])
     else:
         try:
             with open('/dev/stderr', 'w'):
@@ -2137,7 +2238,7 @@
 
     if not options['log_to_terminal']:
         options['access_log_file'] = os.path.join(
-                options['log_directory'], 'access_log')
+                options['log_directory'], options['access_log_name'])
     else:
         try:
             with open('/dev/stdout', 'w'):
@@ -2226,6 +2327,14 @@
     if options['with_newrelic_platform']:
         options['server_metrics'] = True
 
+    if options['service_scripts']:
+        service_scripts = []
+        for name, script in options['service_scripts']:
+            if not os.path.isabs(script):
+                script = os.path.abspath(script)
+            service_scripts.append((name, script))
+        options['service_scripts'] = service_scripts
+
     max_clients = options['processes'] * options['threads']
 
     if options['max_clients'] is not None:
@@ -2357,7 +2466,7 @@
     if options['startup_log']:
         if not options['log_to_terminal']:
             options['startup_log_file'] = os.path.join(
-                    options['log_directory'], 'startup_log')
+                    options['log_directory'], options['startup_log_name'])
         else:
             try:
                 with open('/dev/stderr', 'w'):
@@ -2491,6 +2600,8 @@
         options['httpd_arguments_list'].append('-DWSGI_CHUNKED_REQUEST')
     if options['with_php5']:
         options['httpd_arguments_list'].append('-DWSGI_WITH_PHP5')
+    if options['proxy_url_aliases'] or options['proxy_virtual_hosts']:
+        options['httpd_arguments_list'].append('-DWSGI_WITH_PROXY')
 
     options['httpd_arguments_list'].extend(
             _mpm_module_defines(options['modules_directory'],
@@ -2502,14 +2613,7 @@
     options['python_executable'] = sys.executable
 
     options['shlibpath_var'] = apxs_config.SHLIBPATH_VAR
-
-    if apxs_config.WITH_PACKAGES:
-        shlibpath = []
-        shlibpath.append(os.path.join(apxs_config.PACKAGES, 'apr-util', 'lib'))
-        shlibpath.append(os.path.join(apxs_config.PACKAGES, 'apr', 'lib'))
-        options['shlibpath'] = ':'.join(shlibpath)
-    else:
-        options['shlibpath'] = ''
+    options['shlibpath'] = apxs_config.SHLIBPATH
 
     generate_wsgi_handler_script(options)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.4.6/src/server/mod_wsgi.c 
new/mod_wsgi-4.4.8/src/server/mod_wsgi.c
--- old/mod_wsgi-4.4.6/src/server/mod_wsgi.c    2015-01-15 11:12:31.000000000 
+0100
+++ new/mod_wsgi-4.4.8/src/server/mod_wsgi.c    2015-02-08 10:34:19.000000000 
+0100
@@ -85,6 +85,7 @@
 static apr_interval_time_t wsgi_idle_timeout = 0;
 static apr_interval_time_t wsgi_request_timeout = 0;
 static apr_interval_time_t wsgi_graceful_timeout = 0;
+static apr_interval_time_t wsgi_eviction_timeout = 0;
 static apr_time_t volatile wsgi_deadlock_shutdown_time = 0;
 static apr_time_t volatile wsgi_idle_shutdown_time = 0;
 static apr_time_t volatile wsgi_graceful_shutdown_time = 0;
@@ -6596,6 +6597,7 @@
     int inactivity_timeout = 0;
     int request_timeout = 0;
     int graceful_timeout = 0;
+    int eviction_timeout = 0;
     int connect_timeout = 15;
     int socket_timeout = 0;
     int queue_timeout = 0;
@@ -6609,7 +6611,7 @@
     int send_buffer_size = 0;
     int recv_buffer_size = 0;
     int header_buffer_size = 0;
-    int proxy_buffer_size = 0;
+    int response_buffer_size = 0;
 
     const char *script_user = NULL;
     const char *script_group = NULL;
@@ -6808,6 +6810,14 @@
             if (graceful_timeout < 0)
                 return "Invalid graceful timeout for WSGI daemon process.";
         }
+        else if (!strcmp(option, "eviction-timeout")) {
+            if (!*value)
+                return "Invalid eviction timeout for WSGI daemon process.";
+
+            eviction_timeout = atoi(value);
+            if (eviction_timeout < 0)
+                return "Invalid eviction timeout for WSGI daemon process.";
+        }
         else if (!strcmp(option, "connect-timeout")) {
             if (!*value)
                 return "Invalid connect timeout for WSGI daemon process.";
@@ -6873,13 +6883,13 @@
                        "or 0 for default.";
             }
         }
-        else if (!strcmp(option, "proxy-buffer-size")) {
+        else if (!strcmp(option, "response-buffer-size")) {
             if (!*value)
-                return "Invalid proxy buffer size for WSGI daemon process.";
+                return "Invalid response buffer size for WSGI daemon process.";
 
-            proxy_buffer_size = atoi(value);
-            if (proxy_buffer_size < 65536 && proxy_buffer_size != 0) {
-                return "Proxy buffer size must be >= 65536 bytes, "
+            response_buffer_size = atoi(value);
+            if (response_buffer_size < 65536 && response_buffer_size != 0) {
+                return "Response buffer size must be >= 65536 bytes, "
                        "or 0 for default.";
             }
         }
@@ -7077,6 +7087,7 @@
     entry->inactivity_timeout = apr_time_from_sec(inactivity_timeout);
     entry->request_timeout = apr_time_from_sec(request_timeout);
     entry->graceful_timeout = apr_time_from_sec(graceful_timeout);
+    entry->eviction_timeout = apr_time_from_sec(eviction_timeout);
     entry->connect_timeout = apr_time_from_sec(connect_timeout);
     entry->socket_timeout = apr_time_from_sec(socket_timeout);
     entry->queue_timeout = apr_time_from_sec(queue_timeout);
@@ -7090,7 +7101,7 @@
     entry->send_buffer_size = send_buffer_size;
     entry->recv_buffer_size = recv_buffer_size;
     entry->header_buffer_size = header_buffer_size;
-    entry->proxy_buffer_size = proxy_buffer_size;
+    entry->response_buffer_size = response_buffer_size;
 
     entry->script_user = script_user;
     entry->script_group = script_group;
@@ -8288,6 +8299,9 @@
         ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, wsgi_server,
                      "mod_wsgi (pid=%d): Graceful timeout is %d.",
                      getpid(), (int)(apr_time_sec(wsgi_graceful_timeout)));
+        ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, wsgi_server,
+                     "mod_wsgi (pid=%d): Eviction timeout is %d.",
+                     getpid(), (int)(apr_time_sec(wsgi_eviction_timeout)));
     }
 
     while (1) {
@@ -8407,6 +8421,29 @@
             }
         }
 
+        if (!restart && wsgi_eviction_timeout) {
+            if (graceful_time) {
+                if (graceful_time <= now) {
+                    ap_log_error(APLOG_MARK, APLOG_INFO, 0, wsgi_server,
+                                 "mod_wsgi (pid=%d): Daemon process "
+                                 "graceful timer expired '%s'.", getpid(),
+                                 group->name);
+
+                    restart = 1;
+                }
+                else {
+                    if (!period || ((graceful_time - now) < period))
+                        period = graceful_time - now;
+                    else if (wsgi_eviction_timeout < period)
+                        period = wsgi_eviction_timeout;
+                }
+            }
+            else {
+                if (!period || (wsgi_eviction_timeout < period))
+                    period = wsgi_eviction_timeout;
+            }
+        }
+
         if (restart) {
             wsgi_daemon_shutdown++;
             kill(getpid(), SIGINT);
@@ -8579,6 +8616,7 @@
     wsgi_idle_timeout = daemon->group->inactivity_timeout;
     wsgi_request_timeout = daemon->group->request_timeout;
     wsgi_graceful_timeout = daemon->group->graceful_timeout;
+    wsgi_eviction_timeout = daemon->group->eviction_timeout;
 
     if (wsgi_deadlock_timeout || wsgi_idle_timeout) {
         rv = apr_thread_create(&reaper, thread_attr, wsgi_monitor_thread,
@@ -8751,17 +8789,20 @@
 
                     apr_thread_mutex_lock(wsgi_monitor_lock);
                     wsgi_graceful_shutdown_time = apr_time_now();
-                    wsgi_graceful_shutdown_time += wsgi_graceful_timeout;
+                    if (wsgi_eviction_timeout)
+                        wsgi_graceful_shutdown_time += wsgi_eviction_timeout;
+                    else
+                        wsgi_graceful_shutdown_time += wsgi_graceful_timeout;
                     apr_thread_mutex_unlock(wsgi_monitor_lock);
 
                     ap_log_error(APLOG_MARK, APLOG_INFO, 0, wsgi_server,
-                                 "mod_wsgi (pid=%d): Graceful shutdown "
+                                 "mod_wsgi (pid=%d): Process eviction "
                                  "requested, waiting for requests to complete "
                                  "'%s'.", getpid(), daemon->group->name);
                 }
                 else {
                     ap_log_error(APLOG_MARK, APLOG_INFO, 0, wsgi_server,
-                                 "mod_wsgi (pid=%d): Graceful shutdown "
+                                 "mod_wsgi (pid=%d): Process eviction "
                                  "requested, triggering immediate shutdown "
                                  "'%s'.", getpid(), daemon->group->name);
 
@@ -11202,7 +11243,7 @@
 
     /* Transfer any response content. */
 
-    return wsgi_transfer_response(r, bbin, group->proxy_buffer_size);
+    return wsgi_transfer_response(r, bbin, group->response_buffer_size);
 }
 
 static apr_status_t wsgi_socket_read(apr_socket_t *sock, void *vbuf,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.4.6/src/server/wsgi_daemon.h 
new/mod_wsgi-4.4.8/src/server/wsgi_daemon.h
--- old/mod_wsgi-4.4.6/src/server/wsgi_daemon.h 2015-01-15 11:12:31.000000000 
+0100
+++ new/mod_wsgi-4.4.8/src/server/wsgi_daemon.h 2015-02-08 10:34:19.000000000 
+0100
@@ -113,6 +113,7 @@
     apr_time_t inactivity_timeout;
     apr_time_t request_timeout;
     apr_time_t graceful_timeout;
+    apr_time_t eviction_timeout;
     apr_time_t connect_timeout;
     apr_time_t socket_timeout;
     apr_time_t queue_timeout;
@@ -122,7 +123,7 @@
     int send_buffer_size;
     int recv_buffer_size;
     int header_buffer_size;
-    int proxy_buffer_size;
+    int response_buffer_size;
     const char *script_user;
     const char *script_group;
     int cpu_time_limit;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.4.6/src/server/wsgi_version.h 
new/mod_wsgi-4.4.8/src/server/wsgi_version.h
--- old/mod_wsgi-4.4.6/src/server/wsgi_version.h        2015-01-15 
11:12:31.000000000 +0100
+++ new/mod_wsgi-4.4.8/src/server/wsgi_version.h        2015-02-08 
10:34:19.000000000 +0100
@@ -25,8 +25,8 @@
 
 #define MOD_WSGI_MAJORVERSION_NUMBER 4
 #define MOD_WSGI_MINORVERSION_NUMBER 4
-#define MOD_WSGI_MICROVERSION_NUMBER 6
-#define MOD_WSGI_VERSION_STRING "4.4.6"
+#define MOD_WSGI_MICROVERSION_NUMBER 8
+#define MOD_WSGI_VERSION_STRING "4.4.8"
 
 /* ------------------------------------------------------------------------- */
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.4.6/win32/README.rst 
new/mod_wsgi-4.4.8/win32/README.rst
--- old/mod_wsgi-4.4.6/win32/README.rst 2015-01-15 11:12:31.000000000 +0100
+++ new/mod_wsgi-4.4.8/win32/README.rst 2015-02-08 10:34:19.000000000 +0100
@@ -21,7 +21,7 @@
 using.
 
 4. That you are using a mod_wsgi binary built with the same version of
-the Microsoft C/++ compiler as the version of Python you are using.
+the Microsoft C/C++ compiler as the version of Python you are using.
 
 The Microsoft C/C++ compiler versions which were used for various Python
 versions are:


Reply via email to