From 0963d045d7239138ac26bcd62d71338ae9a2dc9b Mon Sep 17 00:00:00 2001 From: "Brian D. Caruso" Date: Wed, 14 Sep 2022 18:19:13 -0400 Subject: [PATCH 01/28] Fix ability to build with Apapche 2.2. --- src/server/mod_wsgi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/mod_wsgi.c b/src/server/mod_wsgi.c index 3f5d8556..121b8fb6 100644 --- a/src/server/mod_wsgi.c +++ b/src/server/mod_wsgi.c @@ -12917,11 +12917,11 @@ static int wsgi_hook_daemon_handler(conn_rec *c) * child process before request is proxied specifically to avoid * unecessarily passing the content across to the daemon process. */ - +#if AP_MODULE_MAGIC_AT_LEAST(20110605,1) d = (core_dir_config *)ap_get_core_module_config(r->per_dir_config); d->limit_req_body = 0; - +#endif r->sent_bodyct = 0; r->read_length = 0; From 15721162025ea35f3e7619113a772aa3d95e9f33 Mon Sep 17 00:00:00 2001 From: Graham Dumpleton Date: Wed, 5 Oct 2022 16:58:55 +1100 Subject: [PATCH 02/28] Needs to be enabled for all Apache 2.4 versions. --- src/server/mod_wsgi.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/server/mod_wsgi.c b/src/server/mod_wsgi.c index 121b8fb6..967ac195 100644 --- a/src/server/mod_wsgi.c +++ b/src/server/mod_wsgi.c @@ -12916,12 +12916,21 @@ static int wsgi_hook_daemon_handler(conn_rec *c) * is okay as the request limit body is checked in the Apache * child process before request is proxied specifically to avoid * unecessarily passing the content across to the daemon process. + * Note also that the reason that the change is applied for all + * Apache 2.4.X versions is because a module compiled against an + * Apache version before the change, can still be used with newer + * Apache version without being re-compiled which would result in + * a crash also. We can't enable for older Apache 2.X versions as + * ap_get_core_module_config() doesn't exist. */ -#if AP_MODULE_MAGIC_AT_LEAST(20110605,1) + +#if (AP_SERVER_MAJORVERSION_NUMBER == 2 && \ + AP_SERVER_MINORVERSION_NUMBER >= 4) d = (core_dir_config *)ap_get_core_module_config(r->per_dir_config); d->limit_req_body = 0; #endif + r->sent_bodyct = 0; r->read_length = 0; From 88ff5c2a526f40365832b2b2ad628efc5a387401 Mon Sep 17 00:00:00 2001 From: Graham Dumpleton Date: Wed, 5 Oct 2022 17:06:22 +1100 Subject: [PATCH 03/28] Update version for development testing. --- src/server/wsgi_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/wsgi_version.h b/src/server/wsgi_version.h index ca6cc8a9..270cc747 100755 --- a/src/server/wsgi_version.h +++ b/src/server/wsgi_version.h @@ -25,8 +25,8 @@ #define MOD_WSGI_MAJORVERSION_NUMBER 4 #define MOD_WSGI_MINORVERSION_NUMBER 9 -#define MOD_WSGI_MICROVERSION_NUMBER 4 -#define MOD_WSGI_VERSION_STRING "4.9.4" +#define MOD_WSGI_MICROVERSION_NUMBER 5 +#define MOD_WSGI_VERSION_STRING "4.9.5.dev1" /* ------------------------------------------------------------------------- */ From 59e5cd69581e28b907c4d9092ca1ed51ad0b9d1c Mon Sep 17 00:00:00 2001 From: Graham Dumpleton Date: Wed, 5 Oct 2022 17:08:00 +1100 Subject: [PATCH 04/28] Add release notes for 4.9.5. --- docs/release-notes.rst | 1 + docs/release-notes/version-4.9.5.rst | 13 +++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 docs/release-notes/version-4.9.5.rst diff --git a/docs/release-notes.rst b/docs/release-notes.rst index 524296d9..5b1dbd3e 100644 --- a/docs/release-notes.rst +++ b/docs/release-notes.rst @@ -5,6 +5,7 @@ Release Notes .. toctree:: :maxdepth: 2 + release-notes/version-4.9.5 release-notes/version-4.9.4 release-notes/version-4.9.3 release-notes/version-4.9.2 diff --git a/docs/release-notes/version-4.9.5.rst b/docs/release-notes/version-4.9.5.rst new file mode 100644 index 00000000..780962ea --- /dev/null +++ b/docs/release-notes/version-4.9.5.rst @@ -0,0 +1,13 @@ +============= +Version 4.9.5 +============= + +Version 4.9.5 of mod_wsgi can be obtained from: + + https://codeload.github.com/GrahamDumpleton/mod_wsgi/tar.gz/4.9.5 + +Bugs Fixed +---------- + +* Fix ability to build mod_wsgi against Apache 2.2. Do note that in general only + recent versions of Apache 2.4 are supported From 3a9729048f55ccb231720ffd41364f5f4bec3d85 Mon Sep 17 00:00:00 2001 From: mesoclever <79778789+mesoclever@users.noreply.github.com> Date: Sun, 27 Nov 2022 15:46:22 +0200 Subject: [PATCH 05/28] Fix typo. --- docs/user-guides/quick-installation-guide.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/user-guides/quick-installation-guide.rst b/docs/user-guides/quick-installation-guide.rst index 84e5e24b..6210441b 100644 --- a/docs/user-guides/quick-installation-guide.rst +++ b/docs/user-guides/quick-installation-guide.rst @@ -14,7 +14,7 @@ For Apache 2.0, 2.2 and 2.4, the single threaded 'prefork' or multithreaded 'worker' Apache MPMs can be used. For Apache 2.4 the 'event' MPM can also be used. -The version of Apache and its runtime libraries must have be compiled with +The version of Apache and its runtime libraries must have been compiled with support for threading. On Linux systems, if Apache has been installed from a package repository, @@ -88,8 +88,8 @@ allow installation of "dev" packages for both Apache MPM variants at the same time, whereas other Linux distributions do not. If you have multiple versions of Python installed and you are not using -that which is the default, you may have to organise that the PATH inherited -by the Apache application when run will result in Apache finding the +that which is the default, you may have to organise the PATH inherited +by the Apache application, which when run will result in Apache finding the alternate version. Alternatively, the WSGIPythonHome directive should be used to specify the exact location of the Python installation corresponding to the version of Python compiled against. If this is not @@ -157,7 +157,7 @@ copied the file to work out what to set this value to. Restart Apache Web Server ------------------------- -Having adding the required directives you should perform a restart of +Having added the required directives you should perform a restart of Apache to check everything is okay. If you are using an unmodified Apache distribution from the Apache Software Foundation, a restart is performed using the 'apachectl' command:: From 82f6abf31e772529c5cbe9f19a72cf5d65e53296 Mon Sep 17 00:00:00 2001 From: mesoclever <79778789+mesoclever@users.noreply.github.com> Date: Sun, 27 Nov 2022 16:24:15 +0200 Subject: [PATCH 06/28] Fixed typo. --- docs/user-guides/frequently-asked-questions.rst | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/user-guides/frequently-asked-questions.rst b/docs/user-guides/frequently-asked-questions.rst index 73cd27e9..231155e7 100644 --- a/docs/user-guides/frequently-asked-questions.rst +++ b/docs/user-guides/frequently-asked-questions.rst @@ -5,7 +5,7 @@ Frequently Asked Questions Apache Process Crashes ---------------------- -*Q*: Why when the mod_wsgi module is initially being loaded by Apache, do +*Q*: When the mod_wsgi module is initially being loaded by Apache, why does the Apache server processes crash with a 'segmentation fault'? *A*: This is nearly always caused due to mod_python also being loaded by @@ -16,9 +16,9 @@ Linux distributions before they started shipping with Python as a shared library. Further information on these problems can be found in various sections of -[InstallationIssues Installation Issues]. +[:doc:`../user-guides/installation-issues`]. -*Q*: Why when first request is made against a WSGI application does the +*Q*: When the first request is made against a WSGI application, why does the Apache server process handling the request crash with a 'segmentation fault'? @@ -65,7 +65,7 @@ need to use the WSGISocketPrefix directive to specify an alternative location for storing of runtime files such as sockets. For further information see section 'Location Of UNIX Sockets' of -[ConfigurationIssues Configuration Issues]. +[:doc:`../user-guides/configuration-issues`]. *Q*: I am getting a HTTP 500 error response and I can't find any error in the Apache error logs. @@ -227,10 +227,10 @@ and the documentation for the WSGIPassAuthorization directive. *Q*: Is there a way of having a WSGI application provide user authentication for resources outside of the application such as static files, CGI scripts -or even a distinct application. In other words, something akin to being able -to define access, authentication and authorisation handlers in mod_python? +or even a distinct application? In other words, something akin to being able +to define access, authentication and authorisation handlers in mod_python. -*A*: Providing you are using Apache 2.0 or later, version 2.0 of mod_wsgi +*A*: Provided you are using Apache 2.0 or later, version 2.0 of mod_wsgi provides support for hooking into the Apache access, authentication and authorisation handler phases. This doesn't allow full control of how the Apache handler is implemented, but does allow control over how user From 45f105486e26a66da7bd01207016bea474f6acca Mon Sep 17 00:00:00 2001 From: akrherz Date: Thu, 2 Mar 2023 15:21:54 -0600 Subject: [PATCH 07/28] docs: update code.google.com links --- docs/release-notes/version-1.1.rst | 6 ++--- docs/release-notes/version-1.2.rst | 8 +++---- docs/release-notes/version-1.4.rst | 2 +- docs/release-notes/version-1.5.rst | 2 +- docs/release-notes/version-2.0.rst | 10 ++++---- docs/release-notes/version-2.1.rst | 4 ++-- docs/release-notes/version-2.2.rst | 10 ++++---- docs/release-notes/version-2.3.rst | 2 +- docs/release-notes/version-2.4.rst | 38 +++++++++++++++--------------- docs/release-notes/version-2.5.rst | 6 ++--- docs/release-notes/version-2.6.rst | 8 +++---- docs/release-notes/version-2.8.rst | 2 +- docs/release-notes/version-3.0.rst | 38 +++++++++++++++--------------- docs/release-notes/version-3.1.rst | 4 ++-- docs/release-notes/version-3.2.rst | 6 ++--- docs/release-notes/version-3.3.rst | 10 ++++---- 16 files changed, 78 insertions(+), 78 deletions(-) diff --git a/docs/release-notes/version-1.1.rst b/docs/release-notes/version-1.1.rst index cb0f6529..1b921e47 100644 --- a/docs/release-notes/version-1.1.rst +++ b/docs/release-notes/version-1.1.rst @@ -12,7 +12,7 @@ Bug Fixes 1. Fix bug which could result in processes crashing when multiple threads attempt to write to sys.stderr or sys.stdout at the same time. See: - http://code.google.com/p/modwsgi/issues/detail?id=30 + https://code.google.com/archive/p/modwsgi/issues/30 Chance of this occuring was small, as was contingent on code writing out strings which contained an embedded newline but no terminating new line, @@ -46,7 +46,7 @@ insert their own connection level input/output filters. This is needed as running WSGI applications in daemon processes where requests were arriving to Apache as HTTPS requests could cause daemon processes to crash. See: - http://code.google.com/p/modwsgi/issues/detail?id=33 + https://code.google.com/archive/p/modwsgi/issues/33 This was only occuring for some HTTPS configurations, but not known what exactly was different about those configurations to cause the problem. @@ -57,4 +57,4 @@ mod_logio module when loaded and when handling request in daemon process. This is needed to prevent core output filters calling this function and triggering a crash due to configuration for mod_logio not being setup. See: - http://code.google.com/p/modwsgi/issues/detail?id=34 + https://code.google.com/archive/p/modwsgi/issues/34 diff --git a/docs/release-notes/version-1.2.rst b/docs/release-notes/version-1.2.rst index f4b6a23c..18640c7e 100644 --- a/docs/release-notes/version-1.2.rst +++ b/docs/release-notes/version-1.2.rst @@ -25,7 +25,7 @@ the WSGI specification. In particular the specification says: In mod_wsgi when an iterable was returned from the application, the headers were being flushed even if the string was empty. See: - http://code.google.com/p/modwsgi/issues/detail?id=35 + https://code.google.com/archive/p/modwsgi/issues/35 2. Calling start_response() a second time to supply exception information and status to replace prior response headers and status, was resulting in @@ -33,7 +33,7 @@ a process crash when there had actually been response content sent and the existing response headers and status flushed and written back to the client. See: - http://code.google.com/p/modwsgi/issues/detail?id=36 + https://code.google.com/archive/p/modwsgi/issues/36 3. Added additional logging to highlight instance where WSGI script file was removed in between the time that Apache matched request to it and the WSGI @@ -52,7 +52,7 @@ name would be wrong where the URL had repeating slashes in it after the leading portion of the URL which mapped to the mount point of the WSGI application. See: - http://code.google.com/p/modwsgi/issues/detail?id=39 + https://code.google.com/archive/p/modwsgi/issues/39 In particular, for a URL with the repeating slash the application group name would have a trailing slash appended when it shouldn't. The @@ -77,4 +77,4 @@ the default. daemon processes were not being caught properly. This was because mod_wsgi was wrongly blocking SIGCHLD signal. See: - http://code.google.com/p/modwsgi/issues/detail?id=38 + https://code.google.com/archive/p/modwsgi/issues/38 diff --git a/docs/release-notes/version-1.4.rst b/docs/release-notes/version-1.4.rst index 0120f1cf..f5c94f58 100644 --- a/docs/release-notes/version-1.4.rst +++ b/docs/release-notes/version-1.4.rst @@ -16,7 +16,7 @@ status was being returned instead of a 500 error. 2. Fix bug which was resulting in logging destined for !VirtualHost !ErrorLog going missing or ending up in main Apache error log. - http://code.google.com/p/modwsgi/issues/detail?id=79 + https://code.google.com/archive/p/modwsgi/issues/79 Features Added -------------- diff --git a/docs/release-notes/version-1.5.rst b/docs/release-notes/version-1.5.rst index 176528a7..d1dd5fb5 100644 --- a/docs/release-notes/version-1.5.rst +++ b/docs/release-notes/version-1.5.rst @@ -14,6 +14,6 @@ being leaked in Apache parent process on a graceful restart. Also fixes problem where UNIX listener socket was left in filesystem on both graceful restart and graceful shutdown. For details see: - http://code.google.com/p/modwsgi/issues/detail?id=95 + https://code.google.com/archive/p/modwsgi/issues/95 This is a backport of change from version 2.2 of mod_wsgi. diff --git a/docs/release-notes/version-2.0.rst b/docs/release-notes/version-2.0.rst index c15f85c9..70491557 100644 --- a/docs/release-notes/version-2.0.rst +++ b/docs/release-notes/version-2.0.rst @@ -73,7 +73,7 @@ just the script file will apply. For more details see: - http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode + https://code.google.com/archive/p/modwsgi/wikis/ReloadingSourceCode 2. When application is running in embedded mode, and WSGIApacheExtensions directive is set to On, then a Python CObject reference is added to the @@ -93,7 +93,7 @@ The 'ap_swig_py' package has not yet been released and is still in development. The package can be obtained from the Subversion repository at: - https://bitbucket.org/grahamdumpleton/apswigpy/wiki/Home + https://bitbucket.org/grahamdumpleton/apswigpy/wikis/Home With the SWIG binding for the Apache API, the intention is that many of the internal features of Apache would then be available. For example:: @@ -269,7 +269,7 @@ the auth provider:: For more details see: - http://code.google.com/p/modwsgi/wiki/AccessControlMechanisms + https://code.google.com/archive/p/modwsgi/wikis/AccessControlMechanisms 4. When Apache 2.2 is being used, now possible to provide a script file containing a callable which returns the groups that a user is a member of. @@ -305,7 +305,7 @@ and 'groups_for_user()' function with a sample as shown below:: For more details see: - http://code.google.com/p/modwsgi/wiki/AccessControlMechanisms + https://code.google.com/archive/p/modwsgi/wikis/AccessControlMechanisms 5. Implemented WSGIDispatchScript directive. This directive can be used to designate a script file in which can be optionally defined any of the @@ -444,7 +444,7 @@ file itself. For more details see: - http://code.google.com/p/modwsgi/wiki/VirtualEnvironments + https://code.google.com/archive/p/modwsgi/wikis/VirtualEnvironments 11. Added WSGIPythonEggs directive and corresponding 'python-eggs' option for WSGIDaemonProcess directive. These allow the location of the Python diff --git a/docs/release-notes/version-2.1.rst b/docs/release-notes/version-2.1.rst index fcf8a752..af9652b0 100644 --- a/docs/release-notes/version-2.1.rst +++ b/docs/release-notes/version-2.1.rst @@ -12,9 +12,9 @@ Bug Fixes 1. Fix bug which was resulting in logging destined for !VirtualHost !ErrorLog going missing or ending up in main Apache error log. - http://code.google.com/p/modwsgi/issues/detail?id=79 + https://code.google.com/archive/p/modwsgi/issues/79 2. Fix bug where WSGI application returning None rather than valid iterable causes process to crash. - http://code.google.com/p/modwsgi/issues/detail?id=88 + https://code.google.com/archive/p/modwsgi/issues/88 diff --git a/docs/release-notes/version-2.2.rst b/docs/release-notes/version-2.2.rst index a11fde64..9f71f49b 100644 --- a/docs/release-notes/version-2.2.rst +++ b/docs/release-notes/version-2.2.rst @@ -15,7 +15,7 @@ Features Changed 1. Use official way of setting process names on FreeBSD, NetBSD and OpenBSD. For details see: - http://code.google.com/p/modwsgi/issues/detail?id=90 + https://code.google.com/archive/p/modwsgi/issues/90 This is a backport of change from version 3.0 of mod_wsgi. @@ -26,23 +26,23 @@ Bug Fixes WSGIImportScript directive can cause Apache child processes to crash. For details see: - http://code.google.com/p/modwsgi/issues/detail?id=91 + https://code.google.com/archive/p/modwsgi/issues/91 2. Fix bug where mod_wsgi daemon process startup could fail due to old stale UNIX listener socket file as described in: - http://code.google.com/p/modwsgi/issues/detail?id=77 + https://code.google.com/archive/p/modwsgi/issues/77 3. Fix bug where listener socket file descriptors for daemon processes were being leaked in Apache parent process on a graceful restart. Also fixes problem where UNIX listener socket was left in filesystem on both graceful restart and graceful shutdown. For details see: - http://code.google.com/p/modwsgi/issues/detail?id=95 + https://code.google.com/archive/p/modwsgi/issues/95 4. Fix bug where response was truncated when a null character appeared as first character in block of data being returned from wsgi.file_wrapper. Only occurred when code fell back to using iteration over supplied file like object, rather than optimised method such as sendfile(). - http://code.google.com/p/modwsgi/issues/detail?id=100 + https://code.google.com/archive/p/modwsgi/issues/100 diff --git a/docs/release-notes/version-2.3.rst b/docs/release-notes/version-2.3.rst index 49ba4dac..5f1c92dd 100644 --- a/docs/release-notes/version-2.3.rst +++ b/docs/release-notes/version-2.3.rst @@ -34,4 +34,4 @@ process to crash as corresponding arguments wouldn't have ben provided. For details see: - http://code.google.com/p/modwsgi/issues/detail?id=90 + https://code.google.com/archive/p/modwsgi/issues/90 diff --git a/docs/release-notes/version-2.4.rst b/docs/release-notes/version-2.4.rst index bb16e46a..995dd578 100644 --- a/docs/release-notes/version-2.4.rst +++ b/docs/release-notes/version-2.4.rst @@ -17,9 +17,9 @@ introduced by changes in mod_wsgi 2.3. directives at startup. This could later result in memory corruption and may account for problems seen with 'fopen()' errors. See: - http://code.google.com/p/modwsgi/issues/detail?id=78 + https://code.google.com/archive/p/modwsgi/issues/78 - http://code.google.com/p/modwsgi/issues/detail?id=108 + https://code.google.com/archive/p/modwsgi/issues/108 3. Fix bug where Python interpreter not being destroyed correctly in Apache parent process on an Apache restart. This was resulting in slow memory leak @@ -39,13 +39,13 @@ Python seem to occur for some versions of Python on particular platforms. For further details see: - http://code.google.com/p/modwsgi/issues/detail?id=99 + https://code.google.com/archive/p/modwsgi/issues/99 4. Fix bug whereby POST requests where 100-continue was expected by client would see request content actually truncated and not be available to WSGI application if application running in daemon mode. See: - http://code.google.com/p/modwsgi/issues/detail?id=121 + https://code.google.com/archive/p/modwsgi/issues/121 5. Fix bug where Apache optimisation related to keep alive connections can kick in when using wsgi.file_wrapper with result that if amount of data is @@ -55,7 +55,7 @@ straight away but holding it over in case subsequent request on connection arrives. By then the file object used with wsgi.file_wrapper can have been closed and underlying file descriptor will not longer be valid. See: - http://code.google.com/p/modwsgi/issues/detail?id=132 + https://code.google.com/archive/p/modwsgi/issues/132 6. Modify how daemon process shutdown request is detected such that no need to block signals in request threads. Doing this caused problems in @@ -65,12 +65,12 @@ handler writes a character, with main thread performing a poll on pipe waiting for that character to know when to shutdown. For additional details see: - http://code.google.com/p/modwsgi/issues/detail?id=87 + https://code.google.com/archive/p/modwsgi/issues/87 7. Fix bug where excessive transient memory usage could occur when calling read() or readline() on wsgi.input with no argument. See: - http://code.google.com/p/modwsgi/issues/detail?id=126 + https://code.google.com/archive/p/modwsgi/issues/126 Note that calling read() with no argument is actually a violation of WSGI specification and any application doing that is not a WSGI compliant @@ -79,12 +79,12 @@ application. 8. Fix bug where daemon process would crash if User/Group directives were not specified prior to WSGIDaemonProcess in Apache configuration file. See: - http://code.google.com/p/modwsgi/issues/detail?id=40 + https://code.google.com/archive/p/modwsgi/issues/40 9. Fix bug whereby Python exception state wasn't being cleared correctly when error occurred in loading target of WSGIImportScript. See: - http://code.google.com/p/modwsgi/issues/detail?id=117 + https://code.google.com/archive/p/modwsgi/issues/117 Features Changed ---------------- @@ -101,7 +101,7 @@ Features Added 1. Added 'mod_wsgi.version' to WSGI environment passed to WSGI application. For details see: - http://code.google.com/p/modwsgi/issues/detail?id=93 + https://code.google.com/archive/p/modwsgi/issues/93 2. Added 'process_group' and 'application_group' attributes to mod_wsgi module that is created within each Python interpreter instance. This allows code @@ -110,7 +110,7 @@ running in a daemon process group and what it may be called. Similarly, can determine if running in first interpreter or some other sub interpreter. For details see: - http://code.google.com/p/modwsgi/issues/detail?id=27 + https://code.google.com/archive/p/modwsgi/issues/27 3. Added closed and isatty attributes to Log object as well as close() method. For wsgi.errors these aren't required, but log object also used for stderr @@ -119,17 +119,17 @@ stderr and stdout. The closed and isatty attributes always yield false and close() will raise a run time error indicating that log cannot be closed. For details see: - http://code.google.com/p/modwsgi/issues/detail?id=82 + https://code.google.com/archive/p/modwsgi/issues/82 4. Apache scoreboard cleaned up when daemon processes first initialised to prevent any user code interfering with operation of Apache. For details see: - http://code.google.com/p/modwsgi/issues/detail?id=104 + https://code.google.com/archive/p/modwsgi/issues/104 5. When running configure script, can now supply additional options for CPPFLAGS, LDFLAGS and LDLIBS through environment variables. For details see: - http://code.google.com/p/modwsgi/issues/detail?id=107 + https://code.google.com/archive/p/modwsgi/issues/107 6. Better checking done on response headers and an explicit error will now be produce if name or value of response header contains an embedded newline. @@ -138,7 +138,7 @@ when handing response in Apache child process. In embedded mode, could allow application to pass back malformed response headers to client. For details see: - http://code.google.com/p/modwsgi/issues/detail?id=81 + https://code.google.com/archive/p/modwsgi/issues/81 7: Ensure that SYSLIBS linker options from Python configuration used when linking mod_wsgi Apache module. This is now prooving necessary as some Apache @@ -146,7 +146,7 @@ distributions are no longer linking system maths library and Python requires it. To avoid problem simply link against mod_wsgi Apache module and system libraries that Python needs. For details see: - http://code.google.com/p/modwsgi/issues/detail?id=115 + https://code.google.com/archive/p/modwsgi/issues/115 8: Reorder sys.path after having called site.addsitedir() in WSGIPythonPath and python-path option for WSGIDaemonProcess. This ensures that newly added @@ -155,7 +155,7 @@ standard directories. This in part avoids need to ensure --no-site-packages option used when creating virtual environments, as shouldn't have an issue with standard directories still overriding additions. For details see: - http://code.google.com/p/modwsgi/issues/detail?id=112 + https://code.google.com/archive/p/modwsgi/issues/112 9. Update USER, USERNAME and LOGNAME environment variables if set in daemon process to be the actual user that the process runs as rather than @@ -163,7 +163,7 @@ what may be inherited from Apache root process, which would typically be 'root' or the user that executed 'sudo' to start Apache, if they hadn't used '-H' option to 'sudo'. See: - http://code.google.com/p/modwsgi/issues/detail?id=129 + https://code.google.com/archive/p/modwsgi/issues/129 10. Build process now inserts what is believed to be the directory where Python shared library is installed, into the library search path before the @@ -171,4 +171,4 @@ Python config directory. This should negate the need to ensure that Python shared library is also symlink into the config directory next to the static library as linkers would normally expect it. See: - http://code.google.com/p/modwsgi/issues/detail?id=136 + https://code.google.com/archive/p/modwsgi/issues/136 diff --git a/docs/release-notes/version-2.5.rst b/docs/release-notes/version-2.5.rst index 9fc3a2d4..f68803bf 100644 --- a/docs/release-notes/version-2.5.rst +++ b/docs/release-notes/version-2.5.rst @@ -8,7 +8,7 @@ Version 2.5 of mod_wsgi can be obtained from: For Windows binaries see: - http://code.google.com/p/modwsgi/wiki/InstallationOnWindows + https://code.google.com/archive/p/modwsgi/wikis/InstallationOnWindows Note that this release does not support Python 3.0. Python 3.0 will only be supported in mod_wsgi 3.0. @@ -31,7 +31,7 @@ in compiler tools suite. For more details see: - http://code.google.com/p/modwsgi/issues/detail?id=28 + https://code.google.com/archive/p/modwsgi/issues/28 2. Remove isatty from Log object used for stdout/stderr. It should have been a function and not an attribute. Even so, isatty() is not meant to be @@ -42,4 +42,4 @@ not supply this, but the packages which were trying to use it. For more details see: - http://code.google.com/p/modwsgi/issues/detail?id=146 + https://code.google.com/archive/p/modwsgi/issues/146 diff --git a/docs/release-notes/version-2.6.rst b/docs/release-notes/version-2.6.rst index d141d45b..2bc8c112 100644 --- a/docs/release-notes/version-2.6.rst +++ b/docs/release-notes/version-2.6.rst @@ -8,7 +8,7 @@ Version 2.6 of mod_wsgi can be obtained from: For Windows binaries see: - http://code.google.com/p/modwsgi/wiki/InstallationOnWindows + https://code.google.com/archive/p/modwsgi/wikis/InstallationOnWindows Note that this release does not support Python 3.0. Python 3.0 will only be supported in mod_wsgi 3.0. @@ -25,7 +25,7 @@ run time. This was caused by '-W,-l' option prefix being dropped from '-F' option in LDFLAGS of Makefile and not reverted back when related changes undone. This would affect Python 2.3 through 2.5. For more details see: - http://code.google.com/p/modwsgi/issues/detail?id=28 + https://code.google.com/archive/p/modwsgi/issues/28 2. Fixed build issue on MacOS X where incorrect Python framework found at run time. This was caused by '-L/-l' flags being used for versions of Python @@ -39,7 +39,7 @@ particular setup this isn't working, then the '--disable-framework' option can be supplied to 'configure' script to force use of '-L/-l'. For more details see: - http://code.google.com/p/modwsgi/issues/detail?id=28 + https://code.google.com/archive/p/modwsgi/issues/28 3. Fixed bug where was decrementing Python object reference count on NULL pointer, causing a crash. This was possibly only occuring in embedded mode @@ -61,4 +61,4 @@ installed Apache header files. Do this as some Linux distributions build boxes do not actually have Apache executable itself installed, only the header files and apxs tool needed to build modules. For more details see: - http://code.google.com/p/modwsgi/issues/detail?id=147 + https://code.google.com/archive/p/modwsgi/issues/147 diff --git a/docs/release-notes/version-2.8.rst b/docs/release-notes/version-2.8.rst index 645c3407..ddab33fb 100644 --- a/docs/release-notes/version-2.8.rst +++ b/docs/release-notes/version-2.8.rst @@ -14,4 +14,4 @@ when running 'configure' script are prefixed by '-Wc,' before being passed to 'apxs' to build module. Without this 'apxs' will incorrectly interpret the compiler options. For more details see: - http://code.google.com/p/modwsgi/issues/detail?id=166 + https://code.google.com/archive/p/modwsgi/issues/166 diff --git a/docs/release-notes/version-3.0.rst b/docs/release-notes/version-3.0.rst index f20d1205..948dae62 100644 --- a/docs/release-notes/version-3.0.rst +++ b/docs/release-notes/version-3.0.rst @@ -9,7 +9,7 @@ Version 3.0 of mod_wsgi can be obtained from: Precompiled Windows binaries for Apache 2.2 and Python 2.6 and 3.1 are also available from: - http://code.google.com/p/modwsgi/downloads/list + https://code.google.com/archive/p/modwsgi/downloads/list Note that mod_wsgi 3.0 was originally derived from mod_wsgi 2.0. It has though all changes from later releases in the 2.X branch. Thus also see: @@ -27,7 +27,7 @@ Bug Fixes 1. Fix bug with quoting of options to mod_wsgi directives as described in: - http://code.google.com/p/modwsgi/issues/detail?id=55 + https://code.google.com/archive/p/modwsgi/issues/55 2. For any code not run in the first Python interpreter instance, thread local data was being thrown away at the end of the request, rather than @@ -37,7 +37,7 @@ where data was intended to persist for the life of the process. The result was that any such data would have had to have been recreated on every request. See: - http://code.google.com/p/modwsgi/issues/detail?id=120 + https://code.google.com/archive/p/modwsgi/issues/120 Features Changed ---------------- @@ -52,7 +52,7 @@ allow zero length read to propogate to Apache input filters when done, if the zero length read is the very first read against the input stream. For details see: - http://code.google.com/p/modwsgi/issues/detail?id=52 + https://code.google.com/archive/p/modwsgi/issues/52 2. The WSGIImportScript can now appear inside of VirtualHost. However, there are now additional restrictions. @@ -72,7 +72,7 @@ daemon process group defined in a VirtualHost context. For additional details see: - http://code.google.com/p/modwsgi/issues/detail?id=110 + https://code.google.com/archive/p/modwsgi/issues/110 3. The restriction on accessing sys.stdin and sys.stdout has been lifted. This was originally done to promote the writing of portable WSGI code. In @@ -104,7 +104,7 @@ of process reloading always used, unless of course WSGIScriptReloadig is Off and all reloading is disabled. Doesn't affect embedded mode where script reloading was always the only option. For details see: - http://code.google.com/p/modwsgi/issues/detail?id=72 + https://code.google.com/archive/p/modwsgi/issues/72 2. There is no longer an attempt to set Content-Length header for a response if not supplied and iterable was a sequence of length 1. This was suggested @@ -126,7 +126,7 @@ Features Added What constitutes support for Python 3.X is described in: - http://code.google.com/p/modwsgi/wiki/SupportForPython3X + https://code.google.com/archive/p/modwsgi/wikis/SupportForPython3X Note that Python 3.0 is not supported and cannot be used. You must use Python 3.1 or later as mod_wsgi relies on features only added in Python 3.1. @@ -190,7 +190,7 @@ connection. For details see: - http://code.google.com/p/modwsgi/issues/detail?id=29 + https://code.google.com/archive/p/modwsgi/issues/29 4. Added new 'chroot' option to WSGIDaemonProcess directive to force daemon process to run inside of a chroot environment. @@ -231,7 +231,7 @@ pointers to what may need to be done for Debian/Ubuntu see article at: For details on this change also see: - http://code.google.com/p/modwsgi/issues/detail?id=106 + https://code.google.com/archive/p/modwsgi/issues/106 5. Added WSGIPy3kWarningFlag directive when Python 2.6 being used. This should be at server scope outside of any VirtualHost and will apply to whole server:: @@ -241,18 +241,18 @@ be at server scope outside of any VirtualHost and will apply to whole server:: This should have same affect as -3 option to 'python' executable. For more details see: - http://code.google.com/p/modwsgi/issues/detail?id=109 + https://code.google.com/archive/p/modwsgi/issues/109 6: Fix up how Python thread state API is used to avoid internal Python assertion error when Python compiled with Py_DEBUG preprocessor symbol. For details see: - http://code.google.com/p/modwsgi/issues/detail?id=113 + https://code.google.com/archive/p/modwsgi/issues/113 7. Now allow chunked request content. Such content will be dechunked and available for reading by WSGI application. See: - http://code.google.com/p/modwsgi/issues/detail?id=1 + https://code.google.com/archive/p/modwsgi/issues/1 To enable this feature, you must use:: @@ -283,7 +283,7 @@ using these your code will not be portable to other WSGI hosting mechanisms. 8. Values for HTTP headers now passed in environment dictionary to access, authentication and authorisation hooks. See: - http://code.google.com/p/modwsgi/issues/detail?id=69 + https://code.google.com/archive/p/modwsgi/issues/69 9. The flag wsgi.run_once is not set to True when running in daemon mode and both threads and maximum-requests is set to 1. With this configuration, are @@ -339,7 +339,7 @@ less memory in total. For more details see: - http://code.google.com/p/modwsgi/issues/detail?id=99 + https://code.google.com/archive/p/modwsgi/issues/99 11. If daemon process defined in virtual host which has its own error log, then associated stderr with that virtual hosts error log instead. This way @@ -356,7 +356,7 @@ log and read data from the logs. as allowed for in CGI specification. Note though that this feature has only been implemented for mod_wsgi daemon mode. See: - http://code.google.com/p/modwsgi/issues/detail?id=14 + https://code.google.com/archive/p/modwsgi/issues/14 14. Implement WSGIErrorOverride directive which when set to On will result in Apache error documents being used rather than those passed back by the @@ -366,7 +366,7 @@ to the ProxyErrorOverride directive of Apache but for mod_wsgi only. Do note though that this feature has only been implemented for mod_wsgi daemon mode. See: - http://code.google.com/p/modwsgi/issues/detail?id=57 + https://code.google.com/archive/p/modwsgi/issues/57 15. Implement WSGIPythonWarnings directive as equivalent to the 'python' executable '-W' option. The directive can be used at global scope in Apache @@ -383,7 +383,7 @@ or:: For more details see: - http://code.google.com/p/modwsgi/issues/detail?id=137 + https://code.google.com/archive/p/modwsgi/issues/137 16. Added cpu-time-limit option to WSGIDaemonProcess directive. This allows one to define a time in seconds which will be the maximum amount of cpu @@ -392,7 +392,7 @@ daemon process restarted. The point of this is to provide some means of controlling potentially run away processes due to bad code that gets stuck in heavy processing loops. For more details see: - http://code.google.com/p/modwsgi/issues/detail?id=21 + https://code.google.com/archive/p/modwsgi/issues/21 17. Added cpu-priority option to WSGIDaemonProcess directive. This allows one to adjust the CPU priority associated with processes in a daemon process @@ -401,7 +401,7 @@ setpriority() function on your particular operating system accepts. Normally this is in the range of about -20 to 20, with 0 being normal. For more details see: - http://code.google.com/p/modwsgi/issues/detail?id=142 + https://code.google.com/archive/p/modwsgi/issues/142 18. Added WSGIHandlerScript directive. This allows one to nominate a WSGI script file that should be executed as a handler for a specific file type diff --git a/docs/release-notes/version-3.1.rst b/docs/release-notes/version-3.1.rst index 68d3c1e4..f1591ecf 100644 --- a/docs/release-notes/version-3.1.rst +++ b/docs/release-notes/version-3.1.rst @@ -18,7 +18,7 @@ when running 'configure' script are prefixed by '-Wc,' before being passed to 'apxs' to build module. Without this 'apxs' will incorrectly interpret the compiler options. For more details see: - http://code.google.com/p/modwsgi/issues/detail?id=166 + https://code.google.com/archive/p/modwsgi/issues/166 Features Changed ---------------- @@ -26,4 +26,4 @@ Features Changed 1. Now give more explicit error message when compilation fails due to the Apache or Python developer header files not being installed. See: - http://code.google.com/p/modwsgi/issues/detail?id=169 + https://code.google.com/archive/p/modwsgi/issues/169 diff --git a/docs/release-notes/version-3.2.rst b/docs/release-notes/version-3.2.rst index f2a5b13c..c619942e 100644 --- a/docs/release-notes/version-3.2.rst +++ b/docs/release-notes/version-3.2.rst @@ -18,7 +18,7 @@ the URL mapped was reported instead. causing all requests in daemon mode on a FreeBSD system to hang immediately upon Apache being started. - http://code.google.com/p/modwsgi/issues/detail?id=176 + https://code.google.com/archive/p/modwsgi/issues/176 Also use a distinct flag with condition variable in case condition variable is triggered even though condition not satisfied. This latter issue hasn't @@ -35,9 +35,9 @@ associated with Apache server data structure to close. Code should always check that there is an error log to avoid crashing mod_wsgi daemon process on startup by operating on null pointer. See: - http://code.google.com/p/modwsgi/issues/detail?id=178 + https://code.google.com/archive/p/modwsgi/issues/178 5. Code was not compiling with Apache 2.3. This is because ap_accept_lock_mech variable was removed. See: - http://code.google.com/p/modwsgi/issues/detail?id=186 + https://code.google.com/archive/p/modwsgi/issues/186 diff --git a/docs/release-notes/version-3.3.rst b/docs/release-notes/version-3.3.rst index 75ea8098..e5b3a494 100644 --- a/docs/release-notes/version-3.3.rst +++ b/docs/release-notes/version-3.3.rst @@ -12,23 +12,23 @@ Bug Fixes 1. Inactivity timeout not triggered at correct time when occurs for first request after process is started. See - http://code.google.com/p/modwsgi/issues/detail?id=182 + https://code.google.com/archive/p/modwsgi/issues/182 2. Back off timer for failed connections to daemon process group wasn't working correctly and no delay on reconnect attempts was being applied. See: - http://code.google.com/p/modwsgi/issues/detail?id=195 + https://code.google.com/archive/p/modwsgi/issues/195 3. Logging not appearing in Apache error log files when using daemon mode and have multiple virtual hosts against same server name. See: - http://code.google.com/p/modwsgi/issues/detail?id=204 + https://code.google.com/archive/p/modwsgi/issues/204 4. Eliminate logging of !KeyError exception in threading module when processes are shutdown when using Python 2.6.5 or 3.1.2 or later. This wasn't indicating any real problem but was annoying all the same. See: - http://code.google.com/p/modwsgi/issues/detail?id=197 + https://code.google.com/archive/p/modwsgi/issues/197 5. Fix potential for crash when logging error message resulting from failed group authorisation. @@ -44,7 +44,7 @@ same user that daemon process runs. This will at least allow a request handled under ITK MPM to be directed to daemon process owned by same user as script. See issue: - http://code.google.com/p/modwsgi/issues/detail?id=187 + https://code.google.com/archive/p/modwsgi/issues/187 2. Add isatty() to log objects used for sys.stdout/sys.stderr and wsgi.errors. The Python documentation says 'If a file-like object is not From 24fdda6f09a942e4a4ea7cd3a82d4481ccf73658 Mon Sep 17 00:00:00 2001 From: Natasha Mattson <22650546+natashamm@users.noreply.github.com> Date: Thu, 27 Apr 2023 15:51:06 -0700 Subject: [PATCH 08/28] python3 --- docs/user-guides/debugging-techniques.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/user-guides/debugging-techniques.rst b/docs/user-guides/debugging-techniques.rst index 3ec80fec..6b2ecaf9 100644 --- a/docs/user-guides/debugging-techniques.rst +++ b/docs/user-guides/debugging-techniques.rst @@ -313,8 +313,8 @@ follows:: self.__ocontent.flush() return self.__write(data) - def next(self): - data = self.__iterable.next() + def __next__(self): + data = self.__iterable.__next__() self.__ocontent.write(data) self.__ocontent.flush() return data From b871c948edb94d7c70f34481901a97786e106286 Mon Sep 17 00:00:00 2001 From: Graham Dumpleton Date: Wed, 21 Jun 2023 10:54:27 +1000 Subject: [PATCH 09/28] Attempt test builds for Python 3.12. --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1e7adbb1..d2bbd946 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -36,7 +36,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["2.7", "3.5", "3.6", "3.7", "3.8", "3.9", "3.10", "3.11-dev"] + python-version: ["2.7", "3.5", "3.6", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12-dev"] steps: - uses: "actions/checkout@v2" - uses: "actions/setup-python@v2" From 804d0c8170dcfd3014604542459c60968fa0c413 Mon Sep 17 00:00:00 2001 From: Graham Dumpleton Date: Wed, 21 Jun 2023 11:06:38 +1000 Subject: [PATCH 10/28] GitHub actions no longer supports testing with Python 2.7 so time to drop support. --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d2bbd946..cee4c2a1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -36,7 +36,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["2.7", "3.5", "3.6", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12-dev"] + python-version: ["3.5", "3.6", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12-dev"] steps: - uses: "actions/checkout@v2" - uses: "actions/setup-python@v2" From 9de48802b90e305bd2b947d05b5cf59238d0c1e3 Mon Sep 17 00:00:00 2001 From: Graham Dumpleton Date: Wed, 21 Jun 2023 11:13:04 +1000 Subject: [PATCH 11/28] GitHub actions no longer supports Python 3.5 for testing. --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index cee4c2a1..02e2357a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -36,7 +36,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.5", "3.6", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12-dev"] + python-version: ["3.6", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12-dev"] steps: - uses: "actions/checkout@v2" - uses: "actions/setup-python@v2" From 2f40a11feecceaed4c38fdd4d9a3943348125722 Mon Sep 17 00:00:00 2001 From: Graham Dumpleton Date: Mon, 26 Jun 2023 16:31:39 +1000 Subject: [PATCH 12/28] Add ReadTheDocs configuration file. --- .readthedocs.yaml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .readthedocs.yaml diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 00000000..f3aa1f5a --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,22 @@ +# .readthedocs.yaml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Set the version of Python and other tools you might need +build: + os: ubuntu-22.04 + tools: + python: "3.11" + +# Build documentation in the docs/ directory with Sphinx +sphinx: + configuration: docs/conf.py + +# We recommend specifying your dependencies to enable reproducible builds: +# https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html +# python: +# install: +# - requirements: docs/requirements.txt From d068418c57ef364cd795cacef11da473db9cfcde Mon Sep 17 00:00:00 2001 From: Natasha Mattson <22650546+natashamm@users.noreply.github.com> Date: Wed, 26 Jul 2023 17:01:29 -0700 Subject: [PATCH 13/28] Suggestion --- docs/user-guides/debugging-techniques.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user-guides/debugging-techniques.rst b/docs/user-guides/debugging-techniques.rst index 6b2ecaf9..2d4768d8 100644 --- a/docs/user-guides/debugging-techniques.rst +++ b/docs/user-guides/debugging-techniques.rst @@ -314,7 +314,7 @@ follows:: return self.__write(data) def __next__(self): - data = self.__iterable.__next__() + data = next(self.__iterable) self.__ocontent.write(data) self.__ocontent.flush() return data From 70bed479cb0270ecc5faebcdcad40bc27b866f4f Mon Sep 17 00:00:00 2001 From: Jared Deckard Date: Fri, 22 Sep 2023 11:19:37 -0500 Subject: [PATCH 14/28] Migrate from distutils to setuptools + sysconfig --- configure | 29 ++++++++++++++--------------- configure.ac | 5 ++--- setup.py | 10 +++++----- src/server/__init__.py | 3 +-- 4 files changed, 22 insertions(+), 25 deletions(-) diff --git a/configure b/configure index c1c77c1f..2a80749d 100755 --- a/configure +++ b/configure @@ -2850,11 +2850,11 @@ fi PYTHON_VERSION=`${PYTHON} -c 'from sys import stdout; \ - from distutils import sysconfig; \ + import sysconfig; \ stdout.write(sysconfig.get_config_var("VERSION"))'` PYTHON_LDVERSION=`${PYTHON} -c 'from sys import stdout; \ - from distutils import sysconfig; \ + import sysconfig; \ stdout.write(sysconfig.get_config_var("LDVERSION") or "")'` if test x"${PYTHON_LDVERSION}" = x""; then @@ -2862,11 +2862,11 @@ if test x"${PYTHON_LDVERSION}" = x""; then fi CPPFLAGS1=`${PYTHON} -c 'from sys import stdout; \ - from distutils import sysconfig; \ + import sysconfig; \ stdout.write("-I" + sysconfig.get_config_var("INCLUDEPY"))'` CPPFLAGS2=`${PYTHON} -c 'from sys import stdout; \ - from distutils import sysconfig; \ + import sysconfig; \ stdout.write(" ".join(filter(lambda x: x.startswith("-D"), \ sysconfig.get_config_var("CFLAGS").split())))'` @@ -2881,20 +2881,19 @@ CPPFLAGS="${CPPFLAGS} ${CPPFLAGS1} ${CPPFLAGS2} ${CPPFLAGS3}" PYTHONLIBDIR=`${PYTHON} -c 'from sys import stdout; \ - from distutils import sysconfig; \ + import sysconfig; \ stdout.write(sysconfig.get_config_var("LIBDIR"))'` PYTHONCFGDIR=`${PYTHON} -c 'from sys import stdout; \ - import distutils.sysconfig; \ - stdout.write(distutils.sysconfig.get_python_lib(plat_specific=1, \ - standard_lib=1) +"/config")'` + import sysconfig; \ + stdout.write(sysconfig.get_path("platstdlib") +"/config")'` PYTHONFRAMEWORKDIR=`${PYTHON} -c 'from sys import stdout; \ - from distutils import sysconfig; \ + import sysconfig; \ stdout.write(sysconfig.get_config_var("PYTHONFRAMEWORKDIR"))'` PYTHONFRAMEWORKPREFIX=`${PYTHON} -c 'from sys import stdout; \ - from distutils import sysconfig; \ + import sysconfig; \ stdout.write(sysconfig.get_config_var("PYTHONFRAMEWORKPREFIX"))'` PYTHONFRAMEWORK=`${PYTHON} -c 'from sys import stdout; \ - from distutils import sysconfig; \ + import sysconfig; \ stdout.write(sysconfig.get_config_var("PYTHONFRAMEWORK"))'` if test "${PYTHON_LDVERSION}" != "${PYTHON_VERSION}"; then @@ -2920,10 +2919,10 @@ if test "${PYTHONFRAMEWORKDIR}" = "no-framework" -o \ fi LDLIBS2=`${PYTHON} -c 'from sys import stdout; \ - from distutils import sysconfig; \ + import sysconfig; \ stdout.write(sysconfig.get_config_var("LIBS"))'` LDLIBS3=`${PYTHON} -c 'from sys import stdout; \ - from distutils import sysconfig; \ + import sysconfig; \ stdout.write(sysconfig.get_config_var("SYSLIBS"))'` else LDFLAGS1="-Wl,-F${PYTHONFRAMEWORKPREFIX} -framework ${PYTHONFRAMEWORK}" @@ -2931,13 +2930,13 @@ else VERSION="${PYTHON_VERSION}" STRING="${PYTHONFRAMEWORKDIR}/Versions/${VERSION}/${PYTHONFRAMEWORK}" LDFLAGS2=`${PYTHON} -c "from sys import stdout; \ - from distutils import sysconfig; \ + import sysconfig; \ stdout.write(sysconfig.get_config_var( \"LINKFORSHARED\").replace(\"${STRING}\", ''))" | \ sed -e 's/-Wl,-stack_size,[0-9]*//'` LDLIBS1=`${PYTHON} -c 'from sys import stdout; \ - from distutils import sysconfig; \ + import sysconfig; \ stdout.write(sysconfig.get_config_var("LIBS"))'` fi diff --git a/configure.ac b/configure.ac index 25962bce..44f4718f 100644 --- a/configure.ac +++ b/configure.ac @@ -141,9 +141,8 @@ PYTHONLIBDIR=`${PYTHON} -c 'from sys import stdout; \ import sysconfig; \ stdout.write(sysconfig.get_config_var("LIBDIR"))'` PYTHONCFGDIR=`${PYTHON} -c 'from sys import stdout; \ - import distutils.sysconfig; \ - stdout.write(distutils.sysconfig.get_python_lib(plat_specific=1, \ - standard_lib=1) +"/config")'` + import sysconfig; \ + stdout.write(sysconfig.get_path("platstdlib") +"/config")'` PYTHONFRAMEWORKDIR=`${PYTHON} -c 'from sys import stdout; \ import sysconfig; \ stdout.write(sysconfig.get_config_var("PYTHONFRAMEWORKDIR"))'` diff --git a/setup.py b/setup.py index e0c8c844..41693758 100644 --- a/setup.py +++ b/setup.py @@ -15,9 +15,9 @@ from urllib import urlretrieve from setuptools import setup -from distutils.core import Extension -from distutils.sysconfig import get_config_var as get_python_config -from distutils.sysconfig import get_python_lib +from setuptools.extension import Extension +from sysconfig import get_config_var as get_python_config +from sysconfig import get_path as get_python_lib # First work out what all the available source code files are that should # be compiled. @@ -293,7 +293,7 @@ def get_apu_includes(): PYTHON_LIBDIR = get_python_config('LIBDIR') APXS_LIBDIR = get_apxs_config('LIBDIR') - PYTHON_CFGDIR = get_python_lib(plat_specific=1, standard_lib=1) + '/config' + PYTHON_CFGDIR = get_python_lib('platstdlib') + '/config' if PYTHON_LDVERSION and PYTHON_LDVERSION != PYTHON_VERSION: PYTHON_CFGDIR = '%s-%s' % (PYTHON_CFGDIR, PYTHON_LDVERSION) @@ -402,7 +402,7 @@ def _version(): not get_python_config('PYTHONFRAMEWORK')): print(SHARED_LIBRARY_WARNING) -# Now finally run distutils. +# Now finally run setuptools. package_name = 'mod_wsgi' long_description = open('README.rst').read() diff --git a/src/server/__init__.py b/src/server/__init__.py index 33f0fad3..f2d8632f 100644 --- a/src/server/__init__.py +++ b/src/server/__init__.py @@ -35,7 +35,6 @@ try: import sysconfig - import distutils.sysconfig _py_soabi = sysconfig.get_config_var('SOABI') @@ -63,7 +62,7 @@ MOD_WSGI_SO = posixpath.join(posixpath.dirname(__file__), MOD_WSGI_SO) if not os.path.exists(MOD_WSGI_SO) and os.name == 'nt': - MOD_WSGI_SO = 'mod_wsgi%s' % distutils.sysconfig.get_config_var('EXT_SUFFIX') + MOD_WSGI_SO = 'mod_wsgi%s' % sysconfig.get_config_var('EXT_SUFFIX') MOD_WSGI_SO = os.path.join(os.path.dirname(__file__), MOD_WSGI_SO) MOD_WSGI_SO = MOD_WSGI_SO.replace('\\', '/') From ac75a81fee8128bab2f0d5b8824da195c99444ea Mon Sep 17 00:00:00 2001 From: Jared Deckard Date: Fri, 22 Sep 2023 17:49:15 -0500 Subject: [PATCH 15/28] Install build dependencies before sdist --- package.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package.sh b/package.sh index ee5c58f3..fb9571af 100755 --- a/package.sh +++ b/package.sh @@ -6,6 +6,8 @@ rm -rf build dist rm -f pyproject.toml +pip install setuptools + python setup.py sdist ln -s pyproject.toml.in pyproject.toml From 851d63d6fdc822408467d4a8c5c42fe2c7ee841c Mon Sep 17 00:00:00 2001 From: Jared Deckard Date: Mon, 25 Sep 2023 21:20:39 -0500 Subject: [PATCH 16/28] Build and test supported python versions --- .github/workflows/main.yml | 12 ++++++++---- setup.py | 8 +------- tox.ini | 7 ++----- 3 files changed, 11 insertions(+), 16 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 02e2357a..245ebd6c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -11,11 +11,15 @@ jobs: build: name: "Build mod_wsgi packages" runs-on: "ubuntu-20.04" + strategy: + fail-fast: false + matrix: + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12-dev"] steps: - uses: "actions/checkout@v2" - uses: "actions/setup-python@v2" with: - python-version: "3.9" + python-version: "${{ matrix.python-version }}" - name: "Update package details" run: sudo apt --fix-missing update - name: "Install Apache package" @@ -25,7 +29,7 @@ jobs: - name: "Store built packages" uses: actions/upload-artifact@v2 with: - name: dist + name: dist ${{ matrix.python-version }} path: dist/* tests: @@ -36,7 +40,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.6", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12-dev"] + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12-dev"] steps: - uses: "actions/checkout@v2" - uses: "actions/setup-python@v2" @@ -45,7 +49,7 @@ jobs: - name: "Download built packages" uses: actions/download-artifact@v2 with: - name: dist + name: dist ${{ matrix.python-version }} path: dist - name: "Update package details" run: sudo apt --fix-missing update diff --git a/setup.py b/setup.py index 41693758..0c8463fc 100644 --- a/setup.py +++ b/setup.py @@ -440,17 +440,11 @@ def _version(): 'Operating System :: POSIX :: SunOS/Solaris', 'Programming Language :: Python', 'Programming Language :: Python :: Implementation :: CPython', - 'Programming Language :: Python :: 2.6', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3.3', - 'Programming Language :: Python :: 3.4', - 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', + 'Programming Language :: Python :: 3.12', 'Topic :: Internet :: WWW/HTTP :: WSGI', 'Topic :: Internet :: WWW/HTTP :: WSGI :: Server' ], diff --git a/tox.ini b/tox.ini index acdfe7e6..499ac78e 100644 --- a/tox.ini +++ b/tox.ini @@ -1,13 +1,10 @@ [tox] -envlist = py26,py27,py33,py34,py35,py36,py37,py38,py39,py310,py311 +envlist = py38,py39,py310,py311,py312 [gh-actions] python = - 2.7: py27 - 3.5: py35 - 3.6: py36 - 3.7: py37 3.8: py38 3.9: py39 3.10: py310 3.11: py311 + 3.12: py312 From 1d7ac58ad2db96fb89c26ab1fcf03ec9645de199 Mon Sep 17 00:00:00 2001 From: Graham Dumpleton Date: Mon, 2 Oct 2023 14:32:36 +1100 Subject: [PATCH 17/28] Update GitHub actions versions. --- .github/workflows/main.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 245ebd6c..2cd21c7d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,8 +16,8 @@ jobs: matrix: python-version: ["3.8", "3.9", "3.10", "3.11", "3.12-dev"] steps: - - uses: "actions/checkout@v2" - - uses: "actions/setup-python@v2" + - uses: "actions/checkout@v4" + - uses: "actions/setup-python@v4" with: python-version: "${{ matrix.python-version }}" - name: "Update package details" @@ -27,7 +27,7 @@ jobs: - name: "Build mod_wsgi packages" run: ./package.sh && ls -las dist - name: "Store built packages" - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: dist ${{ matrix.python-version }} path: dist/* @@ -42,8 +42,8 @@ jobs: matrix: python-version: ["3.8", "3.9", "3.10", "3.11", "3.12-dev"] steps: - - uses: "actions/checkout@v2" - - uses: "actions/setup-python@v2" + - uses: "actions/checkout@v4" + - uses: "actions/setup-python@v4" with: python-version: "${{ matrix.python-version }}" - name: "Download built packages" From 71b53edda02a03b4cafbad1f51f8e951a5dd3566 Mon Sep 17 00:00:00 2001 From: Graham Dumpleton Date: Mon, 2 Oct 2023 14:42:35 +1100 Subject: [PATCH 18/28] Update GitHub actions version. --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2cd21c7d..d1f5ae79 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -47,7 +47,7 @@ jobs: with: python-version: "${{ matrix.python-version }}" - name: "Download built packages" - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: dist ${{ matrix.python-version }} path: dist From 3fce721cd807a8b45907d1d2ebaa86dec0e1359d Mon Sep 17 00:00:00 2001 From: Graham Dumpleton Date: Mon, 2 Oct 2023 15:30:22 +1100 Subject: [PATCH 19/28] Require Python 3.8 or greater. --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 0c8463fc..edbe7c8f 100644 --- a/setup.py +++ b/setup.py @@ -461,4 +461,5 @@ def _version(): ['mod_wsgi-express = mod_wsgi.server:main'],}, zip_safe = False, install_requires = standalone and ['mod_wsgi-httpd==2.4.54.1'] or [], + python_requires='>=3.8', ) From a5f41e028d65aec17a748027b116063620fd5b28 Mon Sep 17 00:00:00 2001 From: Graham Dumpleton Date: Mon, 2 Oct 2023 15:31:31 +1100 Subject: [PATCH 20/28] Update to version 5.0.0. --- src/server/wsgi_version.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/server/wsgi_version.h b/src/server/wsgi_version.h index 270cc747..c9c7c5c6 100755 --- a/src/server/wsgi_version.h +++ b/src/server/wsgi_version.h @@ -23,10 +23,10 @@ /* Module version information. */ -#define MOD_WSGI_MAJORVERSION_NUMBER 4 -#define MOD_WSGI_MINORVERSION_NUMBER 9 -#define MOD_WSGI_MICROVERSION_NUMBER 5 -#define MOD_WSGI_VERSION_STRING "4.9.5.dev1" +#define MOD_WSGI_MAJORVERSION_NUMBER 5 +#define MOD_WSGI_MINORVERSION_NUMBER 0 +#define MOD_WSGI_MICROVERSION_NUMBER 0 +#define MOD_WSGI_VERSION_STRING "5.0.0.dev1" /* ------------------------------------------------------------------------- */ From 960bd7e5276798f02e6b1a18ddb723988fcfe9f6 Mon Sep 17 00:00:00 2001 From: Graham Dumpleton Date: Mon, 2 Oct 2023 15:39:27 +1100 Subject: [PATCH 21/28] Add notes about update of version to 5.0 and dropping of Python 2.X support. --- README.rst | 5 +++++ docs/release-notes/version-4.9.5.rst | 13 ------------- docs/release-notes/version-5.0.0.rst | 25 +++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 13 deletions(-) delete mode 100644 docs/release-notes/version-4.9.5.rst create mode 100644 docs/release-notes/version-5.0.0.rst diff --git a/README.rst b/README.rst index 7602bdd5..b29758f9 100644 --- a/README.rst +++ b/README.rst @@ -5,6 +5,11 @@ The mod_wsgi package provides an Apache module that implements a WSGI compliant interface for hosting Python based web applications on top of the Apache web server. +*Note that a new major version is being used not because of any new major +features but because from version 5.0.0 onwards compatability with Python 2.7 is +no longer guaranteed. A minimum Python version of 3.8 will be enforced by the +Python package installation configuration.* + Installation of mod_wsgi from source code can be performed in one of two ways. diff --git a/docs/release-notes/version-4.9.5.rst b/docs/release-notes/version-4.9.5.rst deleted file mode 100644 index 780962ea..00000000 --- a/docs/release-notes/version-4.9.5.rst +++ /dev/null @@ -1,13 +0,0 @@ -============= -Version 4.9.5 -============= - -Version 4.9.5 of mod_wsgi can be obtained from: - - https://codeload.github.com/GrahamDumpleton/mod_wsgi/tar.gz/4.9.5 - -Bugs Fixed ----------- - -* Fix ability to build mod_wsgi against Apache 2.2. Do note that in general only - recent versions of Apache 2.4 are supported diff --git a/docs/release-notes/version-5.0.0.rst b/docs/release-notes/version-5.0.0.rst new file mode 100644 index 00000000..7ef65a45 --- /dev/null +++ b/docs/release-notes/version-5.0.0.rst @@ -0,0 +1,25 @@ +============= +Version 5.0.0 +============= + +Version 5.0.0 of mod_wsgi can be obtained from: + + https://codeload.github.com/GrahamDumpleton/mod_wsgi/tar.gz/5.0.0 + +*Note that the major version 5.0 was introduced not because of any new major +features but because from version 5.0 onwards compatability with Python 2.7 is +no longer guaranteed. A minimum Python version of 3.8 will be enforced by the +Python package installation configuration.* + +Features Changed +---------------- + +* The `setuptools` package is now required to be installed in order to use the + `pip install` method to install mod_wsgi. This is because `distutils` has been + removed in Python 3.12. + +Bugs Fixed +---------- + +* Fix ability to build mod_wsgi against Apache 2.2. Do note that in general only + recent versions of Apache 2.4 are supported From 22e3f1fb1eb8a79a393c4b070638a8eff646ffd5 Mon Sep 17 00:00:00 2001 From: Graham Dumpleton Date: Mon, 2 Oct 2023 15:42:28 +1100 Subject: [PATCH 22/28] Update README description about 5.0 and Python 2.X support. --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index b29758f9..19013a72 100644 --- a/README.rst +++ b/README.rst @@ -5,8 +5,8 @@ The mod_wsgi package provides an Apache module that implements a WSGI compliant interface for hosting Python based web applications on top of the Apache web server. -*Note that a new major version is being used not because of any new major -features but because from version 5.0.0 onwards compatability with Python 2.7 is +*Note that the major version 5.0 was introduced not because of any new major +features but because from version 5.0 onwards compatability with Python 2.7 is no longer guaranteed. A minimum Python version of 3.8 will be enforced by the Python package installation configuration.* From 6f91b9577c9c005f3655558d0697549823ccbdcf Mon Sep 17 00:00:00 2001 From: Graham Dumpleton Date: Mon, 2 Oct 2023 15:50:53 +1100 Subject: [PATCH 23/28] Update copyright year. --- configure.ac | 2 +- docs/conf.py | 2 +- src/server/mod_wsgi.c | 2 +- src/server/wsgi_apache.c | 2 +- src/server/wsgi_apache.h | 2 +- src/server/wsgi_buckets.c | 2 +- src/server/wsgi_buckets.h | 2 +- src/server/wsgi_convert.c | 2 +- src/server/wsgi_convert.h | 2 +- src/server/wsgi_daemon.c | 2 +- src/server/wsgi_daemon.h | 2 +- src/server/wsgi_interp.c | 2 +- src/server/wsgi_interp.h | 2 +- src/server/wsgi_logger.c | 2 +- src/server/wsgi_logger.h | 2 +- src/server/wsgi_memory.h | 2 +- src/server/wsgi_metrics.c | 2 +- src/server/wsgi_metrics.h | 2 +- src/server/wsgi_python.h | 2 +- src/server/wsgi_restrict.c | 2 +- src/server/wsgi_restrict.h | 2 +- src/server/wsgi_server.c | 2 +- src/server/wsgi_server.h | 2 +- src/server/wsgi_stream.c | 2 +- src/server/wsgi_stream.h | 2 +- src/server/wsgi_thread.c | 2 +- src/server/wsgi_thread.h | 2 +- src/server/wsgi_validate.c | 2 +- src/server/wsgi_validate.h | 2 +- src/server/wsgi_version.h | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/configure.ac b/configure.ac index 44f4718f..b9b31cbd 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ dnl vim: set sw=4 expandtab : dnl -dnl Copyright 2007-2022 GRAHAM DUMPLETON +dnl Copyright 2007-2023 GRAHAM DUMPLETON dnl dnl Licensed under the Apache License, Version 2.0 (the "License"); dnl you may not use this file except in compliance with the License. diff --git a/docs/conf.py b/docs/conf.py index f0ca9694..b89e0030 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -41,7 +41,7 @@ # General information about the project. project = u'mod_wsgi' -copyright = u'2007-2022, Graham Dumpleton' +copyright = u'2007-2023, Graham Dumpleton' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the diff --git a/src/server/mod_wsgi.c b/src/server/mod_wsgi.c index 967ac195..9bc07c67 100644 --- a/src/server/mod_wsgi.c +++ b/src/server/mod_wsgi.c @@ -1,7 +1,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_apache.c b/src/server/wsgi_apache.c index 375642da..82f26f70 100644 --- a/src/server/wsgi_apache.c +++ b/src/server/wsgi_apache.c @@ -1,7 +1,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_apache.h b/src/server/wsgi_apache.h index e6e7356f..b24dee32 100644 --- a/src/server/wsgi_apache.h +++ b/src/server/wsgi_apache.h @@ -4,7 +4,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_buckets.c b/src/server/wsgi_buckets.c index 3f1537e0..f383f88c 100644 --- a/src/server/wsgi_buckets.c +++ b/src/server/wsgi_buckets.c @@ -1,7 +1,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_buckets.h b/src/server/wsgi_buckets.h index 785ac0eb..791fe471 100644 --- a/src/server/wsgi_buckets.h +++ b/src/server/wsgi_buckets.h @@ -4,7 +4,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_convert.c b/src/server/wsgi_convert.c index d41b58c3..cc4a1be9 100644 --- a/src/server/wsgi_convert.c +++ b/src/server/wsgi_convert.c @@ -1,7 +1,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_convert.h b/src/server/wsgi_convert.h index 30d27159..dc35bed6 100644 --- a/src/server/wsgi_convert.h +++ b/src/server/wsgi_convert.h @@ -4,7 +4,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_daemon.c b/src/server/wsgi_daemon.c index 3a9f17d6..605b7f65 100644 --- a/src/server/wsgi_daemon.c +++ b/src/server/wsgi_daemon.c @@ -1,7 +1,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_daemon.h b/src/server/wsgi_daemon.h index 15bef555..3704d250 100644 --- a/src/server/wsgi_daemon.h +++ b/src/server/wsgi_daemon.h @@ -4,7 +4,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_interp.c b/src/server/wsgi_interp.c index 52090400..1543fe02 100644 --- a/src/server/wsgi_interp.c +++ b/src/server/wsgi_interp.c @@ -1,7 +1,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_interp.h b/src/server/wsgi_interp.h index 3abb8340..a182e5a5 100644 --- a/src/server/wsgi_interp.h +++ b/src/server/wsgi_interp.h @@ -4,7 +4,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_logger.c b/src/server/wsgi_logger.c index d4d4233d..6264c2bf 100644 --- a/src/server/wsgi_logger.c +++ b/src/server/wsgi_logger.c @@ -1,7 +1,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_logger.h b/src/server/wsgi_logger.h index 7e845ff7..b1220884 100644 --- a/src/server/wsgi_logger.h +++ b/src/server/wsgi_logger.h @@ -4,7 +4,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_memory.h b/src/server/wsgi_memory.h index c2f23659..5df3e1bf 100644 --- a/src/server/wsgi_memory.h +++ b/src/server/wsgi_memory.h @@ -4,7 +4,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_metrics.c b/src/server/wsgi_metrics.c index 7150ef97..db3f9176 100644 --- a/src/server/wsgi_metrics.c +++ b/src/server/wsgi_metrics.c @@ -1,7 +1,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_metrics.h b/src/server/wsgi_metrics.h index a136fc54..9f9a345a 100644 --- a/src/server/wsgi_metrics.h +++ b/src/server/wsgi_metrics.h @@ -4,7 +4,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_python.h b/src/server/wsgi_python.h index 6976ffd2..2d4d961f 100644 --- a/src/server/wsgi_python.h +++ b/src/server/wsgi_python.h @@ -4,7 +4,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_restrict.c b/src/server/wsgi_restrict.c index 2bde771e..b4a24943 100644 --- a/src/server/wsgi_restrict.c +++ b/src/server/wsgi_restrict.c @@ -1,7 +1,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_restrict.h b/src/server/wsgi_restrict.h index c4d86e9c..dbd3e740 100644 --- a/src/server/wsgi_restrict.h +++ b/src/server/wsgi_restrict.h @@ -4,7 +4,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_server.c b/src/server/wsgi_server.c index 8506c2a3..d79d4547 100644 --- a/src/server/wsgi_server.c +++ b/src/server/wsgi_server.c @@ -1,7 +1,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_server.h b/src/server/wsgi_server.h index 0bc842c2..c7270ab3 100644 --- a/src/server/wsgi_server.h +++ b/src/server/wsgi_server.h @@ -4,7 +4,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_stream.c b/src/server/wsgi_stream.c index 763bcf51..4f6abf93 100644 --- a/src/server/wsgi_stream.c +++ b/src/server/wsgi_stream.c @@ -1,7 +1,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_stream.h b/src/server/wsgi_stream.h index 861e7af7..3eebd13a 100644 --- a/src/server/wsgi_stream.h +++ b/src/server/wsgi_stream.h @@ -4,7 +4,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_thread.c b/src/server/wsgi_thread.c index c742e85b..db0487ab 100644 --- a/src/server/wsgi_thread.c +++ b/src/server/wsgi_thread.c @@ -1,7 +1,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_thread.h b/src/server/wsgi_thread.h index eeab38cc..927d62a0 100644 --- a/src/server/wsgi_thread.h +++ b/src/server/wsgi_thread.h @@ -4,7 +4,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_validate.c b/src/server/wsgi_validate.c index a37528c0..8c2bffd7 100644 --- a/src/server/wsgi_validate.c +++ b/src/server/wsgi_validate.c @@ -1,7 +1,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_validate.h b/src/server/wsgi_validate.h index 90cf0827..93bfbedb 100644 --- a/src/server/wsgi_validate.h +++ b/src/server/wsgi_validate.h @@ -4,7 +4,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/server/wsgi_version.h b/src/server/wsgi_version.h index c9c7c5c6..217292cc 100755 --- a/src/server/wsgi_version.h +++ b/src/server/wsgi_version.h @@ -4,7 +4,7 @@ /* ------------------------------------------------------------------------- */ /* - * Copyright 2007-2022 GRAHAM DUMPLETON + * Copyright 2007-2023 GRAHAM DUMPLETON * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From eafe21206c6c02bbade5b86c204ce0eb61033982 Mon Sep 17 00:00:00 2001 From: Graham Dumpleton Date: Mon, 2 Oct 2023 15:51:59 +1100 Subject: [PATCH 24/28] Fix release notes index. --- docs/release-notes.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/release-notes.rst b/docs/release-notes.rst index 5b1dbd3e..cca9d19a 100644 --- a/docs/release-notes.rst +++ b/docs/release-notes.rst @@ -5,7 +5,8 @@ Release Notes .. toctree:: :maxdepth: 2 - release-notes/version-4.9.5 + release-notes/version-5.0.0 + release-notes/version-4.9.4 release-notes/version-4.9.3 release-notes/version-4.9.2 From f489ad76ce568ae49be6f7480fdc1634abc446f0 Mon Sep 17 00:00:00 2001 From: Graham Dumpleton Date: Mon, 2 Oct 2023 16:57:43 +1100 Subject: [PATCH 25/28] Update triggers for GitHub actions. --- .github/workflows/main.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d1f5ae79..b706743c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -2,7 +2,9 @@ on: push: branches: - develop - - master + tags: + - "[0-9]+.[0-9]+.[0-9]+" + - "[0-9]+.[0-9]+.[0-9]+rc[0-9]+" pull_request: branches: - develop From 6dd478fc4736d58d003a80cb70231d0661032d34 Mon Sep 17 00:00:00 2001 From: Graham Dumpleton Date: Mon, 2 Oct 2023 17:42:23 +1100 Subject: [PATCH 26/28] Set version to be rc1. --- src/server/wsgi_version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/wsgi_version.h b/src/server/wsgi_version.h index 217292cc..e977687e 100755 --- a/src/server/wsgi_version.h +++ b/src/server/wsgi_version.h @@ -26,7 +26,7 @@ #define MOD_WSGI_MAJORVERSION_NUMBER 5 #define MOD_WSGI_MINORVERSION_NUMBER 0 #define MOD_WSGI_MICROVERSION_NUMBER 0 -#define MOD_WSGI_VERSION_STRING "5.0.0.dev1" +#define MOD_WSGI_VERSION_STRING "5.0.0rc1" /* ------------------------------------------------------------------------- */ From f94646e9f285f9855f1d7e9c8b14648cf1e9f7d0 Mon Sep 17 00:00:00 2001 From: Graham Dumpleton Date: Sun, 19 Nov 2023 21:08:38 +1100 Subject: [PATCH 27/28] Update version string to 5.0.0 for a release. --- src/server/wsgi_version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/wsgi_version.h b/src/server/wsgi_version.h index e977687e..1dc6f9ca 100755 --- a/src/server/wsgi_version.h +++ b/src/server/wsgi_version.h @@ -26,7 +26,7 @@ #define MOD_WSGI_MAJORVERSION_NUMBER 5 #define MOD_WSGI_MINORVERSION_NUMBER 0 #define MOD_WSGI_MICROVERSION_NUMBER 0 -#define MOD_WSGI_VERSION_STRING "5.0.0rc1" +#define MOD_WSGI_VERSION_STRING "5.0.0" /* ------------------------------------------------------------------------- */ From 26efe4a1a4bcbde1bfebe460921031ea3349c06a Mon Sep 17 00:00:00 2001 From: Graham Dumpleton Date: Sun, 19 Nov 2023 21:11:34 +1100 Subject: [PATCH 28/28] Update to use 3.12 final. --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b706743c..56c41b7b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,7 +16,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.8", "3.9", "3.10", "3.11", "3.12-dev"] + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] steps: - uses: "actions/checkout@v4" - uses: "actions/setup-python@v4" @@ -42,7 +42,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.8", "3.9", "3.10", "3.11", "3.12-dev"] + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] steps: - uses: "actions/checkout@v4" - uses: "actions/setup-python@v4"