Date: Wednesday, November 6, 2019 @ 15:07:53 Author: felixonmars Revision: 524392
archrelease: copy trunk to community-staging-x86_64 Added: mod_wsgi/repos/community-staging-x86_64/ mod_wsgi/repos/community-staging-x86_64/PKGBUILD (from rev 524391, mod_wsgi/trunk/PKGBUILD) mod_wsgi/repos/community-staging-x86_64/mod_wsgi.install (from rev 524391, mod_wsgi/trunk/mod_wsgi.install) mod_wsgi/repos/community-staging-x86_64/python-3.8.patch (from rev 524391, mod_wsgi/trunk/python-3.8.patch) ------------------+ PKGBUILD | 62 +++++++++++++++++++++++++++++++++ mod_wsgi.install | 14 +++++++ python-3.8.patch | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 173 insertions(+) Copied: mod_wsgi/repos/community-staging-x86_64/PKGBUILD (from rev 524391, mod_wsgi/trunk/PKGBUILD) =================================================================== --- community-staging-x86_64/PKGBUILD (rev 0) +++ community-staging-x86_64/PKGBUILD 2019-11-06 15:07:53 UTC (rev 524392) @@ -0,0 +1,62 @@ +# Maintainer: Alexander F Rødseth <xypr...@archlinux.org> +# Contributor: Andrea Scarpino <and...@archlinux.org> +# Contributor: Ryan Coyner <rcoy...@gmail.com> + +pkgbase=mod_wsgi +pkgname=($pkgbase 'mod_wsgi2') +pkgver=4.5.24 +pkgrel=3 +pkgdesc='Python WSGI adapter module for Apache' +arch=('x86_64') +url='http://www.modwsgi.org/' +license=('APACHE') +makedepends=('apache' 'git' 'python' 'python2') +install='mod_wsgi.install' +source=("git+https://github.com/GrahamDumpleton/mod_wsgi#tag=$pkgver" + python-3.8.patch) +md5sums=('SKIP' + '73ac9f44d14c04e4bd14eeb506313ec4') + +prepare() { + cp -r "$pkgbase" py2 + patch -Np1 -d "$pkgbase" <python-3.8.patch +} + +build() { + # Configure and build mod_wsgi for py2 + cd py2 + ./configure \ + --prefix=/usr \ + --with-apxs=/usr/bin/apxs \ + --with-python=/usr/bin/python2 + + make + + # Configure and build mod_wsgi for py3 + cd "$srcdir/$pkgbase" + ./configure \ + --prefix=/usr \ + --with-apxs=/usr/bin/apxs \ + --with-python=/usr/bin/python + + make LDLIBS="$(pkg-config python3 --libs) -lpthread -ldl -lutil -lm" +} + +package_mod_wsgi() { + pkgdesc='Python WSGI adapter module for Apache' + depends=('apache' 'python') + conflicts=('mod_wsgi2') + + make -C "$pkgbase" DESTDIR="$pkgdir" install +} + +package_mod_wsgi2() { + pkgdesc='Python2 WSGI adapter module for Apache' + depends=('apache' 'python2') + conflicts=('mod_wsgi') + + make -C py2 DESTDIR="$pkgdir" install +} + +# getver: github.com/GrahamDumpleton/mod_wsgi +# vim: ts=2 sw=2 et: Copied: mod_wsgi/repos/community-staging-x86_64/mod_wsgi.install (from rev 524391, mod_wsgi/trunk/mod_wsgi.install) =================================================================== --- community-staging-x86_64/mod_wsgi.install (rev 0) +++ community-staging-x86_64/mod_wsgi.install 2019-11-06 15:07:53 UTC (rev 524392) @@ -0,0 +1,14 @@ +post_install() { + cat<<meow +==> +==> +==> To install mod_wsgi, add the following line in +==> /etc/httpd/conf/httpd.conf file : +==> +==> LoadModule wsgi_module modules/mod_wsgi.so +==> +==> and restart/reload Apache. +==> +==> +meow +} Copied: mod_wsgi/repos/community-staging-x86_64/python-3.8.patch (from rev 524391, mod_wsgi/trunk/python-3.8.patch) =================================================================== --- community-staging-x86_64/python-3.8.patch (rev 0) +++ community-staging-x86_64/python-3.8.patch 2019-11-06 15:07:53 UTC (rev 524392) @@ -0,0 +1,97 @@ +From 0f34844009075391c55419a3afb90e469facf35e Mon Sep 17 00:00:00 2001 +From: Graham Dumpleton <graham.dumple...@gmail.com> +Date: Tue, 14 May 2019 16:14:07 +1000 +Subject: [PATCH] Changed functions to pre/post actions when forking. + +--- + src/server/mod_wsgi.c | 13 ++++++++++++- + 1 file changed, 12 insertions(+), 1 deletion(-) + +diff --git a/src/server/mod_wsgi.c b/src/server/mod_wsgi.c +index 2e4bb24d..bf55945a 100644 +--- a/src/server/mod_wsgi.c ++++ b/src/server/mod_wsgi.c +@@ -4345,8 +4345,13 @@ static void wsgi_python_child_init(apr_pool_t *p) + * do it if Python was initialised in parent process. + */ + +- if (wsgi_python_initialized && !wsgi_python_after_fork) ++ if (wsgi_python_initialized && !wsgi_python_after_fork) { ++#if PY_MAJOR_VERSION > 3 || (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 7) ++ PyOS_AfterFork_Child(); ++#else + PyOS_AfterFork(); ++#endif ++ } + + /* Finalise any Python objects required by child process. */ + +@@ -10422,6 +10427,12 @@ static int wsgi_start_process(apr_pool_t *p, WSGIDaemonProcess *daemon) + wsgi_exit_daemon_process(0); + } + ++ if (wsgi_python_initialized) { ++#if PY_MAJOR_VERSION > 3 || (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 7) ++ PyOS_AfterFork_Parent(); ++#endif ++ } ++ + apr_pool_note_subprocess(p, &daemon->process, APR_KILL_AFTER_TIMEOUT); + apr_proc_other_child_register(&daemon->process, wsgi_manage_process, + daemon, NULL, p); + +From b03b02df6318afe26052db5b0365732152cacea2 Mon Sep 17 00:00:00 2001 +From: Graham Dumpleton <graham.dumple...@gmail.com> +Date: Tue, 14 May 2019 16:14:42 +1000 +Subject: [PATCH] Use official APIs for accessing interpreter list. + +--- + src/server/wsgi_interp.c | 18 ++++++++++++------ + 1 file changed, 12 insertions(+), 6 deletions(-) + +diff --git a/src/server/wsgi_interp.c b/src/server/wsgi_interp.c +index 4a948509..3fbca04b 100644 +--- a/src/server/wsgi_interp.c ++++ b/src/server/wsgi_interp.c +@@ -338,9 +338,10 @@ static PyObject *ShutdownInterpreter_call( + + PyThreadState_Swap(NULL); + +- tstate = tstate->interp->tstate_head; ++ tstate = PyInterpreterState_ThreadHead(tstate->interp); ++ + while (tstate) { +- tstate_next = tstate->next; ++ tstate_next = PyThreadState_Next(tstate); + if (tstate != tstate_save) { + PyThreadState_Swap(tstate); + PyThreadState_Clear(tstate); +@@ -436,9 +437,13 @@ InterpreterObject *newInterpreterObject(const char *name) + */ + + if (!name) { ++#if PY_MAJOR_VERSION > 3 || (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 7) ++ interp = PyInterpreterState_Main(); ++#else + interp = PyInterpreterState_Head(); +- while (interp->next) +- interp = interp->next; ++ while (PyInterpreterState_Next(interp)) ++ interp = PyInterpreterState_Next(interp); ++#endif + + name = ""; + } +@@ -1883,9 +1888,10 @@ static void Interpreter_dealloc(InterpreterObject *self) + + PyThreadState_Swap(NULL); + +- tstate = tstate->interp->tstate_head; ++ tstate = PyInterpreterState_ThreadHead(tstate->interp); ++ + while (tstate) { +- tstate_next = tstate->next; ++ tstate_next = PyThreadState_Next(tstate); + if (tstate != tstate_save) { + PyThreadState_Swap(tstate); + PyThreadState_Clear(tstate);