[arch-commits] Commit in uwsgi/repos/community-testing-x86_64 (26 files)

David Runge dvzrv at archlinux.org
Sat Feb 27 12:41:32 UTC 2021


    Date: Saturday, February 27, 2021 @ 12:41:32
  Author: dvzrv
Revision: 874911

archrelease: copy trunk to community-testing-x86_64

Added:
  uwsgi/repos/community-testing-x86_64/PKGBUILD
    (from rev 874910, uwsgi/trunk/PKGBUILD)
  uwsgi/repos/community-testing-x86_64/archlinux.ini
    (from rev 874910, uwsgi/trunk/archlinux.ini)
  uwsgi/repos/community-testing-x86_64/emperor.ini
    (from rev 874910, uwsgi/trunk/emperor.ini)
  uwsgi/repos/community-testing-x86_64/emperor.uwsgi.service
    (from rev 874910, uwsgi/trunk/emperor.uwsgi.service)
  uwsgi/repos/community-testing-x86_64/emperor.uwsgi.socket
    (from rev 874910, uwsgi/trunk/emperor.uwsgi.socket)
  uwsgi/repos/community-testing-x86_64/uwsgi-1.9.13-ruby2.0.patch
    (from rev 874910, uwsgi/trunk/uwsgi-1.9.13-ruby2.0.patch)
  uwsgi/repos/community-testing-x86_64/uwsgi-2.0.19.1-php8.patch
    (from rev 874910, uwsgi/trunk/uwsgi-2.0.19.1-php8.patch)
  uwsgi/repos/community-testing-x86_64/uwsgi.install
    (from rev 874910, uwsgi/trunk/uwsgi.install)
  uwsgi/repos/community-testing-x86_64/uwsgi.logrotate
    (from rev 874910, uwsgi/trunk/uwsgi.logrotate)
  uwsgi/repos/community-testing-x86_64/uwsgi.sysusers
    (from rev 874910, uwsgi/trunk/uwsgi.sysusers)
  uwsgi/repos/community-testing-x86_64/uwsgi.tmpfiles
    (from rev 874910, uwsgi/trunk/uwsgi.tmpfiles)
  uwsgi/repos/community-testing-x86_64/uwsgi_at.service
    (from rev 874910, uwsgi/trunk/uwsgi_at.service)
  uwsgi/repos/community-testing-x86_64/uwsgi_at.socket
    (from rev 874910, uwsgi/trunk/uwsgi_at.socket)
Deleted:
  uwsgi/repos/community-testing-x86_64/PKGBUILD
  uwsgi/repos/community-testing-x86_64/archlinux.ini
  uwsgi/repos/community-testing-x86_64/emperor.ini
  uwsgi/repos/community-testing-x86_64/emperor.uwsgi.service
  uwsgi/repos/community-testing-x86_64/emperor.uwsgi.socket
  uwsgi/repos/community-testing-x86_64/uwsgi-1.9.13-ruby2.0.patch
  uwsgi/repos/community-testing-x86_64/uwsgi-2.0.19.1-php8.patch
  uwsgi/repos/community-testing-x86_64/uwsgi.install
  uwsgi/repos/community-testing-x86_64/uwsgi.logrotate
  uwsgi/repos/community-testing-x86_64/uwsgi.sysusers
  uwsgi/repos/community-testing-x86_64/uwsgi.tmpfiles
  uwsgi/repos/community-testing-x86_64/uwsgi_at.service
  uwsgi/repos/community-testing-x86_64/uwsgi_at.socket

----------------------------+
 PKGBUILD                   |  523 ++++++++---------
 archlinux.ini              |   12 
 emperor.ini                |    4 
 emperor.uwsgi.service      |   30 -
 emperor.uwsgi.socket       |   18 
 uwsgi-1.9.13-ruby2.0.patch |   84 +-
 uwsgi-2.0.19.1-php8.patch  | 1260 +++++++++++++++++++++----------------------
 uwsgi.install              |   18 
 uwsgi.logrotate            |   20 
 uwsgi.sysusers             |    2 
 uwsgi.tmpfiles             |    2 
 uwsgi_at.service           |   30 -
 uwsgi_at.socket            |   18 
 13 files changed, 1010 insertions(+), 1011 deletions(-)

Deleted: PKGBUILD
===================================================================
--- PKGBUILD	2021-02-27 12:40:19 UTC (rev 874910)
+++ PKGBUILD	2021-02-27 12:41:32 UTC (rev 874911)
@@ -1,262 +0,0 @@
-# Maintainer: Sven-Hendrik Haase <svenstaro at gmail.com>
-# Maintainer: David Runge <dvzrv at archlinux.org>
-# Contributor: Daniel Wallace <danielwallace at gtmanfred dot com>
-# Contributor: Valentin Hăloiu <vially.ichb+aur at gmail.com>
-# Contributor: Angel Velasquez <angvp at archlinux.org>
-# Contributor: Kevin Zuber <uKev at knet.eu>
-# Contributor: Vsevolod Balashov <vsevolod at balashov.name>
-# Contributor: David Runge <dave at sleepmap.de>
-
-pkgbase=uwsgi
-pkgname=(
-  uwsgi
-  uwsgi-plugin-rack
-  uwsgi-plugin-psgi
-  uwsgi-plugin-cgi
-  uwsgi-plugin-python
-  uwsgi-plugin-pypy
-  uwsgi-plugin-php
-  uwsgi-plugin-php7
-  uwsgi-plugin-lua51
-  uwsgi-plugin-jvm
-  uwsgi-plugin-mono
-  uwsgi-plugin-webdav
-  uwsgi-plugin-zabbix
-  uwsgi-plugin-notfound
-)
-pkgver=2.0.19.1
-pkgrel=9
-pkgdesc="A full stack for building hosting services"
-arch=(x86_64)
-url="https://uwsgi-docs.readthedocs.io/en/latest/"
-license=(GPL2)
-makedepends=(
-  classpath
-  jansson
-  java-environment=7
-  libxcrypt
-  libxml2
-  lua51
-  mono
-  openssl
-  pam
-  pcre
-  perl
-  php-embed
-  php7-embed
-  pypy
-  python
-  python-gevent
-  python-greenlet
-  ruby
-  systemd
-  util-linux
-  zlib
-)
-source=(
-  "https://projects.unbit.it/downloads/$pkgbase-$pkgver.tar.gz"
-  archlinux.ini
-  emperor.ini
-  emperor.uwsgi.service
-  emperor.uwsgi.socket
-  uwsgi_at.service
-  uwsgi_at.socket
-  uwsgi.logrotate
-  uwsgi.sysusers
-  uwsgi.tmpfiles
-  "${pkgbase}-1.9.13-ruby2.0.patch"
-  "${pkgbase}-2.0.19.1-php8.patch"
-)
-sha512sums=('e18359c5ea3606d5de7fb3a0074d777e1c4b41f51f4b1a21f1446f32253058d7924286d9ed8a159d4c6e6c0ea64df7fc3c70b2933c3433b9a9cce39737e702bf'
-            'f9f411cf63e724078e76113c7159012c3f84da1672cb86d219137617c4278723356bd128e66225568273d908005e3b8ee3603c40eb659263b129897921d7addf'
-            'd54c84838ddb2f389e115ebb81aa2583705c9e330f020e6583b496f9c271ed236b6820c2a065f2b55a79adbf13e262b9ff2428124a8044b8fa20ca29ca4930ac'
-            '068ada6281fdeb504fed7e47dae2729d047ed810bb596e5268c1821ad275cd32110e801e93e7ba0ee2d92dbc39e1954180cf43d88d2990d42b802ceb54b50a9e'
-            '592c85270f43b37e9c51aae126533830515b96fff9fcae969ee865fe173bd0550c7729530d5ff1e44ffee43cd5c78c96688ce091c677a4196379e24983c0180e'
-            '29e51d3f441bd8af23c9378bca6cb38376bbbf31bb3b07f318a04ea5620cf25d35d7799ba4a8ecff12634dccd903eef27a6957b932370706e35549f8fbcd2455'
-            'fb51a4d102a1bc7d9f7d4c4f310ee65076bcfbc94b47e2dafdf9b20e99a661c5f938185dcf698437d81409376f0276b966f09b13c8a29462c48612df43c3f3ef'
-            '937878372aa1556f6ba62ad7148d1681288c94d6cff609368a9e861dd4d4524330006a08ae5993441f7d3101170e3a0a681a4c8b3c2c13b364b8b1f81cf25117'
-            '9e9eab08199cf08810ec95b0697cd8817226986d1e3aeb54845c0140ea5887360580348f295060c0558fb2d6aaed26fec929ea36b28cfeaf2b3588ce40fec3df'
-            '4def9dcd06cfc2c6ce554add9d9545a01f3bb2681f0a2a6fc4ba68f91011111803a955cc41b5e70832ca448b196109368fdf874e81b7ec0edee4b51f864e16f7'
-            '162ca1be96282b32e8e6be919b6315bfd08954c491056958985bf99e7f5bdad3511665f059329d6cb6ef5d222f9aa11d4dc43c72e6a963ab941ada959fe8d964'
-            '91b9548bb24eb4fff86ff867121edab92b531db04dacf5402b9bd8849632edfbfa0878e244bf5d243f34dcd5ee0df0ad136c888a4f27984dd6a96fd7b5e0959e')
-b2sums=('3f13da44081e85dfee01c827593656c0d1074a0217ca5fde5424ff36e0ae529d506f65a2bca658bd7df0a07520cae21cf8ce72ec85c767ec73304afd8a70b89e'
-        '9ebfca60236363e113b3813d29e55d47f9aeef4c50db4e084690a94fa1f566ad7af626cac92cc671a1a31d40bad27d8dcacd4b85b767c6ea37a0d641626fa855'
-        '835a1036422e9821cd52ffdf5a6053bdd59fc700d473600bda60b6730746f6c0750c30c85f4139d3ea81c6b6dd10d6849f9406decee3179861c51aca90da6161'
-        '80aa3c4d3f0310f5029ac01690d2ba718d8c86fa49cd1b4f3fc1bd5ae9eadaed6562bf0a48a0fd611e92f100a8594e08fb4bae58e25765fc2eb648cdf1c60b35'
-        'b6838c0c91811d4b677bf0f558134c69015708c308ef7080df328f12b0b0d58ae6cdebe277c29b6d11c20cfeb0847a4934e3a8924323e57ed661d6e9f6656a34'
-        '6587282d48c53cff862951503c560fd3bfe2fbfe18d56af7b5fbf8299b2b99125101a866005ef1fbabe6af9640c200c5121949b3723865d8597a948ed3d650e8'
-        '24c61581bb922f8065a6ea73164ca5d0b6c63ab4ca7c265660b2ec257b69ff9dd4b0349572ff20f54950961b4286c77da36c1d2778698c80943cfd6ed6531b10'
-        'a8b7d003f66ed5c5b1b60d57c05339af3dcdcf346eab52760810086e17f6936dd29ed7fd26281657bc86ac6721c989cbfbaa8e81f97111c807bcd06baece3bf2'
-        '82e03ea95995cfa78abc4d930bd0c250f22788d9ca4dc0921cfbb44a965c0f851cbcc7a855e36ec6e6aa5bf33fbd313b4fe68a2f1c4b7935c2b297be25895324'
-        '9759827f7619358383bf0e68c955522c0054620f742f5122a59888fadfc0bc20bd587eab7a77bc73e8ee4d20cf8f02625c07f241462e8ab9c08f5af509daaef3'
-        '0068763ca5a2f1b60782f53070cbff8cf930e1463d9199b156b02413026bcdb3d923bffcbba063a26d620b8e734bdbd26a4c22776532546ad8c8e5c0c73bd7d6'
-        '1f070c1720381f08af2009d075aec17f08820820abf9f89eab1ce557610d51e3d5b9669467a0e4e8a484133fa49f6b90e48d174befb95da38a9d32aaf4674f87')
-
-prepare() {
-  local _patch
-
-  cd "$pkgbase-$pkgver"
-
-  for _patch in ../*.patch; do
-    printf "Applying patch %s...\n" "${_patch}"
-      patch -Np1 -i "${_patch}"
-  done
-
-  # fix default lua pkgconfig name
-  sed -e 's/lua5.1/lua51/' \
-      -i plugins/lua/uwsgiplugin.py
-  # move ruby plugin to new location and fix its name
-  mv plugins/ruby{19,}
-  sed -e 's/ruby19/ruby/' \
-      -i plugins/ruby/uwsgiplugin.py
-  # remove the explicit lib version from the linking stage of the PHP plugins
-  sed -e "s/ + php_version//" \
-      -i plugins/php/uwsgiplugin.py
-  # duplicate and modify php plugin for php7
-  cp -av plugins/php{,7}
-  mv -v plugins/php7/php{,7}_plugin.c
-  sed -e "s/'php'/'php7'/" \
-      -e 's/php-config/php-config7/g' \
-      -e 's/php_plugin/php7_plugin/g' \
-      -e 's/lphp/lphp7/g' \
-      -i plugins/php7/uwsgiplugin.py
-  # copy our custom build profile into place
-  cp -v ../archlinux.ini buildconf/
-}
-
-build() {
-  cd "$pkgbase-$pkgver"
-  python uwsgiconfig.py --verbose --build archlinux
-}
-
-package_uwsgi() {
-  depends=('glibc' 'jansson' 'libcap.so' 'libcrypt.so' 'libpam.so' 'libxml2'
-  'libsystemd.so' 'libuuid.so' 'openssl' 'pcre' 'zlib')
-  backup=('etc/uwsgi/emperor.ini')
-  install=uwsgi.install
-
-  cd "$pkgbase-$pkgver"
-  install -vDm 755 "${pkgbase}" -t "$pkgdir/usr/bin/"
-  install -vDm 644 ../uwsgi_at.service "$pkgdir"/usr/lib/systemd/system/uwsgi at .service
-  install -vDm 644 ../uwsgi_at.socket "$pkgdir"/usr/lib/systemd/system/uwsgi at .socket
-  install -vDm 644 ../emperor.uwsgi.service "$pkgdir"/usr/lib/systemd/system/emperor.uwsgi.service
-  install -vDm 644 ../emperor.uwsgi.socket "$pkgdir"/usr/lib/systemd/system/emperor.uwsgi.socket
-  install -vDm 644 ../emperor.ini -t "$pkgdir"/etc/uwsgi/
-  install -vDm 644 ../uwsgi.tmpfiles "$pkgdir"/usr/lib/tmpfiles.d/uwsgi.conf
-  install -vDm 644 ../uwsgi.logrotate "$pkgdir"/etc/logrotate.d/uwsgi
-  install -vDm 644 ../uwsgi.sysusers "$pkgdir"/usr/lib/sysusers.d/uwsgi.conf
-}
-
-package_uwsgi-plugin-cgi() {
-  pkgdesc+=" (CGI plugin)"
-  depends=('glibc' 'uwsgi')
-
-  cd "$pkgbase-$pkgver"
-  install -vDm 755 cgi_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
-}
-
-package_uwsgi-plugin-rack() {
-  depends=('glibc' 'ruby' 'uwsgi')
-  pkgdesc="Ruby rack plugin"
-
-  cd "$pkgbase-$pkgver"
-  install -vDm 755 {rack,fiber,rbthreads}_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
-}
-
-package_uwsgi-plugin-psgi() {
-  pkgdesc+=" (Perl psgi plugin)"
-  depends=('glibc' 'perl' 'uwsgi')
-
-  cd "$pkgbase-$pkgver"
-  install -vDm 755 psgi_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
-}
-
-package_uwsgi-plugin-python() {
-  local site_packages=$(python -c "import site; print(site.getsitepackages()[0])")
-
-  pkgdesc+=" (Python plugin)"
-  depends=('glibc' 'python' 'python-gevent' 'python-greenlet' 'uwsgi')
-
-  cd "$pkgbase-$pkgver"
-  install -vDm 755 {asyncio,gevent,greenlet,python}_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
-  install -vDm 644 uwsgidecorators.py -t "${pkgdir}${site_packages}"
-  python -m compileall "${pkgdir}${site_packages}"
-  python -O -m compileall "${pkgdir}${site_packages}"
-}
-
-package_uwsgi-plugin-pypy() {
-  pkgdesc+=" (PyPy plugin)"
-  depends=('glibc' 'pypy' 'uwsgi')
-
-  cd "$pkgbase-$pkgver"
-  install -vDm 755 pypy_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
-  install -vDm 644 uwsgidecorators.py -t "$pkgdir"/opt/pypy/site-packages/
-  pypy -m compileall "$pkgdir"/opt/pypy/site-packages/
-  pypy -O -m compileall "$pkgdir"/opt/pypy/site-packages/
-}
-
-package_uwsgi-plugin-lua51() {
-  pkgdesc+=" (LUA plugin)"
-  depends=('glibc' 'lua51' 'uwsgi')
-
-  cd "$pkgbase-$pkgver"
-  install -vDm 755 lua_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
-}
-
-package_uwsgi-plugin-php() {
-  pkgdesc+=" (PHP plugin)"
-  depends=('glibc' 'php-embed' 'uwsgi')
-
-  cd "$pkgbase-$pkgver"
-  install -vDm 755 php_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
-}
-
-package_uwsgi-plugin-php7() {
-  pkgdesc+=" (PHP7 plugin)"
-  depends=('glibc' 'php7-embed' 'uwsgi')
-
-  cd "$pkgbase-$pkgver"
-  install -vDm 755 php7_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
-}
-
-package_uwsgi-plugin-jvm() {
-  pkgdesc+=" (JVM plugin)"
-  depends=('classpath' 'glibc' 'uwsgi' 'java-environment=7')
-
-  cd "$pkgbase-$pkgver"
-  install -vDm 755 jvm_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
-  install -vDm 644 plugins/jvm/uwsgi.jar -t "$pkgdir"/usr/share/java/
-}
-
-package_uwsgi-plugin-mono() {
-  pkgdesc+=" (mono plugin)"
-  depends=('glibc' 'mono' 'uwsgi')
-
-  cd "$pkgbase-$pkgver"
-  install -vDm 755 plugins/mono/uwsgi.dll -t "$pkgdir"/usr/lib/mono/2.0/
-  install -vDm 755 mono_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
-}
-
-package_uwsgi-plugin-webdav() {
-  pkgdesc+=" (WebDav plugin)"
-  depends=('glibc' 'libxml2' 'uwsgi')
-
-  cd "$pkgbase-$pkgver"
-  install -vDm 755 webdav_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
-}
-
-package_uwsgi-plugin-zabbix() {
-  pkgdesc+=" (zabbix plugin)"
-  depends=('glibc' 'uwsgi')
-
-  cd "$pkgbase-$pkgver"
-  install -vDm 755 zabbix_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
-}
-
-package_uwsgi-plugin-notfound() {
-  pkgdesc+=" (notfound plugin)"
-  depends=('uwsgi')
-
-  cd "$pkgbase-$pkgver"
-  install -vDm 755 notfound_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
-}

Copied: uwsgi/repos/community-testing-x86_64/PKGBUILD (from rev 874910, uwsgi/trunk/PKGBUILD)
===================================================================
--- PKGBUILD	                        (rev 0)
+++ PKGBUILD	2021-02-27 12:41:32 UTC (rev 874911)
@@ -0,0 +1,261 @@
+# Maintainer: Sven-Hendrik Haase <svenstaro at gmail.com>
+# Maintainer: David Runge <dvzrv at archlinux.org>
+# Contributor: Daniel Wallace <danielwallace at gtmanfred dot com>
+# Contributor: Valentin Hăloiu <vially.ichb+aur at gmail.com>
+# Contributor: Angel Velasquez <angvp at archlinux.org>
+# Contributor: Kevin Zuber <uKev at knet.eu>
+# Contributor: Vsevolod Balashov <vsevolod at balashov.name>
+# Contributor: David Runge <dave at sleepmap.de>
+
+pkgbase=uwsgi
+pkgname=(
+  uwsgi
+  uwsgi-plugin-rack
+  uwsgi-plugin-psgi
+  uwsgi-plugin-cgi
+  uwsgi-plugin-python
+  uwsgi-plugin-pypy
+  uwsgi-plugin-php
+  uwsgi-plugin-php7
+  uwsgi-plugin-lua51
+  uwsgi-plugin-jvm
+  uwsgi-plugin-mono
+  uwsgi-plugin-webdav
+  uwsgi-plugin-zabbix
+  uwsgi-plugin-notfound
+)
+pkgver=2.0.19.1
+pkgrel=10
+pkgdesc="A full stack for building hosting services"
+arch=(x86_64)
+url="https://uwsgi-docs.readthedocs.io/en/latest/"
+license=(GPL2)
+makedepends=(
+  classpath
+  jansson
+  java-environment=7
+  libxcrypt
+  libxml2
+  lua51
+  mono
+  openssl
+  pam
+  pcre
+  perl
+  php-embed
+  php7-embed
+  pypy
+  python
+  python-gevent
+  python-greenlet
+  ruby
+  systemd
+  util-linux
+  zlib
+)
+source=(
+  "https://projects.unbit.it/downloads/$pkgbase-$pkgver.tar.gz"
+  archlinux.ini
+  emperor.ini
+  emperor.uwsgi.service
+  emperor.uwsgi.socket
+  uwsgi_at.service
+  uwsgi_at.socket
+  uwsgi.logrotate
+  uwsgi.sysusers
+  uwsgi.tmpfiles
+  "${pkgbase}-1.9.13-ruby2.0.patch"
+  "${pkgbase}-2.0.19.1-php8.patch"
+)
+sha512sums=('e18359c5ea3606d5de7fb3a0074d777e1c4b41f51f4b1a21f1446f32253058d7924286d9ed8a159d4c6e6c0ea64df7fc3c70b2933c3433b9a9cce39737e702bf'
+            'f2be78fb77938ced8a4edb2899e4ee532bfc48cdc04b26a18c69e618bde869b19b546d1bf60decc5dc95de09de81a5bdd4f071501ce5c5d735eac158a995d5ed'
+            'd54c84838ddb2f389e115ebb81aa2583705c9e330f020e6583b496f9c271ed236b6820c2a065f2b55a79adbf13e262b9ff2428124a8044b8fa20ca29ca4930ac'
+            '068ada6281fdeb504fed7e47dae2729d047ed810bb596e5268c1821ad275cd32110e801e93e7ba0ee2d92dbc39e1954180cf43d88d2990d42b802ceb54b50a9e'
+            '592c85270f43b37e9c51aae126533830515b96fff9fcae969ee865fe173bd0550c7729530d5ff1e44ffee43cd5c78c96688ce091c677a4196379e24983c0180e'
+            '29e51d3f441bd8af23c9378bca6cb38376bbbf31bb3b07f318a04ea5620cf25d35d7799ba4a8ecff12634dccd903eef27a6957b932370706e35549f8fbcd2455'
+            'fb51a4d102a1bc7d9f7d4c4f310ee65076bcfbc94b47e2dafdf9b20e99a661c5f938185dcf698437d81409376f0276b966f09b13c8a29462c48612df43c3f3ef'
+            '937878372aa1556f6ba62ad7148d1681288c94d6cff609368a9e861dd4d4524330006a08ae5993441f7d3101170e3a0a681a4c8b3c2c13b364b8b1f81cf25117'
+            '9e9eab08199cf08810ec95b0697cd8817226986d1e3aeb54845c0140ea5887360580348f295060c0558fb2d6aaed26fec929ea36b28cfeaf2b3588ce40fec3df'
+            '4def9dcd06cfc2c6ce554add9d9545a01f3bb2681f0a2a6fc4ba68f91011111803a955cc41b5e70832ca448b196109368fdf874e81b7ec0edee4b51f864e16f7'
+            '162ca1be96282b32e8e6be919b6315bfd08954c491056958985bf99e7f5bdad3511665f059329d6cb6ef5d222f9aa11d4dc43c72e6a963ab941ada959fe8d964'
+            '91b9548bb24eb4fff86ff867121edab92b531db04dacf5402b9bd8849632edfbfa0878e244bf5d243f34dcd5ee0df0ad136c888a4f27984dd6a96fd7b5e0959e')
+b2sums=('3f13da44081e85dfee01c827593656c0d1074a0217ca5fde5424ff36e0ae529d506f65a2bca658bd7df0a07520cae21cf8ce72ec85c767ec73304afd8a70b89e'
+        '4a1e79fd4d450de11079b305f1b82660c6632ca6a2f15e641ab1a404a3b867c2439aa6031cc95956ff75ac21960f8734d7b1bec28330fecbfe95af3023ec8a32'
+        '835a1036422e9821cd52ffdf5a6053bdd59fc700d473600bda60b6730746f6c0750c30c85f4139d3ea81c6b6dd10d6849f9406decee3179861c51aca90da6161'
+        '80aa3c4d3f0310f5029ac01690d2ba718d8c86fa49cd1b4f3fc1bd5ae9eadaed6562bf0a48a0fd611e92f100a8594e08fb4bae58e25765fc2eb648cdf1c60b35'
+        'b6838c0c91811d4b677bf0f558134c69015708c308ef7080df328f12b0b0d58ae6cdebe277c29b6d11c20cfeb0847a4934e3a8924323e57ed661d6e9f6656a34'
+        '6587282d48c53cff862951503c560fd3bfe2fbfe18d56af7b5fbf8299b2b99125101a866005ef1fbabe6af9640c200c5121949b3723865d8597a948ed3d650e8'
+        '24c61581bb922f8065a6ea73164ca5d0b6c63ab4ca7c265660b2ec257b69ff9dd4b0349572ff20f54950961b4286c77da36c1d2778698c80943cfd6ed6531b10'
+        'a8b7d003f66ed5c5b1b60d57c05339af3dcdcf346eab52760810086e17f6936dd29ed7fd26281657bc86ac6721c989cbfbaa8e81f97111c807bcd06baece3bf2'
+        '82e03ea95995cfa78abc4d930bd0c250f22788d9ca4dc0921cfbb44a965c0f851cbcc7a855e36ec6e6aa5bf33fbd313b4fe68a2f1c4b7935c2b297be25895324'
+        '9759827f7619358383bf0e68c955522c0054620f742f5122a59888fadfc0bc20bd587eab7a77bc73e8ee4d20cf8f02625c07f241462e8ab9c08f5af509daaef3'
+        '0068763ca5a2f1b60782f53070cbff8cf930e1463d9199b156b02413026bcdb3d923bffcbba063a26d620b8e734bdbd26a4c22776532546ad8c8e5c0c73bd7d6'
+        '1f070c1720381f08af2009d075aec17f08820820abf9f89eab1ce557610d51e3d5b9669467a0e4e8a484133fa49f6b90e48d174befb95da38a9d32aaf4674f87')
+
+prepare() {
+  local _patch
+
+  cd "$pkgbase-$pkgver"
+
+  for _patch in ../*.patch; do
+    printf "Applying patch %s...\n" "${_patch}"
+      patch -Np1 -i "${_patch}"
+  done
+
+  # fix default lua pkgconfig name
+  sed -e 's/lua5.1/lua51/' \
+      -i plugins/lua/uwsgiplugin.py
+  # move ruby plugin to new location and fix its name
+  mv plugins/ruby{19,}
+  sed -e 's/ruby19/ruby/' \
+      -i plugins/ruby/uwsgiplugin.py
+  # duplicate the php plugin, so that we can modify it (and leave the php7
+  # version unmodified)
+  cp -av plugins/php{,7}
+  # remove the explicit lib version from the linking stage of the PHP plugin as
+  # we do not provide /usr/lib/libphp8.so
+  sed -e "s/ + php_version//" \
+      -i plugins/php/uwsgiplugin.py
+  # copy our custom build profile into place
+  cp -v ../archlinux.ini buildconf/
+}
+
+build() {
+  cd "$pkgbase-$pkgver"
+  python uwsgiconfig.py --verbose --build archlinux
+  # build php7 plugin separately and override php-config in use
+  UWSGICONFIG_PHPPATH='php-config7' \
+  python uwsgiconfig.py --verbose --plugin plugins/php7 archlinux php7
+}
+
+package_uwsgi() {
+  depends=('glibc' 'jansson' 'libcap.so' 'libcrypt.so' 'libpam.so' 'libxml2'
+  'libsystemd.so' 'libuuid.so' 'openssl' 'pcre' 'zlib')
+  backup=('etc/uwsgi/emperor.ini')
+  install=uwsgi.install
+
+  cd "$pkgbase-$pkgver"
+  install -vDm 755 "${pkgbase}" -t "$pkgdir/usr/bin/"
+  install -vDm 644 ../uwsgi_at.service "$pkgdir"/usr/lib/systemd/system/uwsgi at .service
+  install -vDm 644 ../uwsgi_at.socket "$pkgdir"/usr/lib/systemd/system/uwsgi at .socket
+  install -vDm 644 ../emperor.uwsgi.service "$pkgdir"/usr/lib/systemd/system/emperor.uwsgi.service
+  install -vDm 644 ../emperor.uwsgi.socket "$pkgdir"/usr/lib/systemd/system/emperor.uwsgi.socket
+  install -vDm 644 ../emperor.ini -t "$pkgdir"/etc/uwsgi/
+  install -vDm 644 ../uwsgi.tmpfiles "$pkgdir"/usr/lib/tmpfiles.d/uwsgi.conf
+  install -vDm 644 ../uwsgi.logrotate "$pkgdir"/etc/logrotate.d/uwsgi
+  install -vDm 644 ../uwsgi.sysusers "$pkgdir"/usr/lib/sysusers.d/uwsgi.conf
+}
+
+package_uwsgi-plugin-cgi() {
+  pkgdesc+=" (CGI plugin)"
+  depends=('glibc' 'uwsgi')
+
+  cd "$pkgbase-$pkgver"
+  install -vDm 755 cgi_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
+}
+
+package_uwsgi-plugin-rack() {
+  depends=('glibc' 'ruby' 'uwsgi')
+  pkgdesc="Ruby rack plugin"
+
+  cd "$pkgbase-$pkgver"
+  install -vDm 755 {rack,fiber,rbthreads}_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
+}
+
+package_uwsgi-plugin-psgi() {
+  pkgdesc+=" (Perl psgi plugin)"
+  depends=('glibc' 'perl' 'uwsgi')
+
+  cd "$pkgbase-$pkgver"
+  install -vDm 755 psgi_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
+}
+
+package_uwsgi-plugin-python() {
+  local site_packages=$(python -c "import site; print(site.getsitepackages()[0])")
+
+  pkgdesc+=" (Python plugin)"
+  depends=('glibc' 'python' 'python-gevent' 'python-greenlet' 'uwsgi')
+
+  cd "$pkgbase-$pkgver"
+  install -vDm 755 {asyncio,gevent,greenlet,python}_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
+  install -vDm 644 uwsgidecorators.py -t "${pkgdir}${site_packages}"
+  python -m compileall "${pkgdir}${site_packages}"
+  python -O -m compileall "${pkgdir}${site_packages}"
+}
+
+package_uwsgi-plugin-pypy() {
+  pkgdesc+=" (PyPy plugin)"
+  depends=('glibc' 'pypy' 'uwsgi')
+
+  cd "$pkgbase-$pkgver"
+  install -vDm 755 pypy_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
+  install -vDm 644 uwsgidecorators.py -t "$pkgdir"/opt/pypy/site-packages/
+  pypy -m compileall "$pkgdir"/opt/pypy/site-packages/
+  pypy -O -m compileall "$pkgdir"/opt/pypy/site-packages/
+}
+
+package_uwsgi-plugin-lua51() {
+  pkgdesc+=" (LUA plugin)"
+  depends=('glibc' 'lua51' 'uwsgi')
+
+  cd "$pkgbase-$pkgver"
+  install -vDm 755 lua_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
+}
+
+package_uwsgi-plugin-php() {
+  pkgdesc+=" (PHP plugin)"
+  depends=('glibc' 'php-embed' 'uwsgi')
+
+  cd "$pkgbase-$pkgver"
+  install -vDm 755 php_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
+}
+
+package_uwsgi-plugin-php7() {
+  pkgdesc+=" (PHP7 plugin)"
+  depends=('glibc' 'php7-embed' 'uwsgi')
+
+  cd "$pkgbase-$pkgver"
+  install -vDm 755 php7_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
+}
+
+package_uwsgi-plugin-jvm() {
+  pkgdesc+=" (JVM plugin)"
+  depends=('classpath' 'glibc' 'uwsgi' 'java-environment=7')
+
+  cd "$pkgbase-$pkgver"
+  install -vDm 755 jvm_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
+  install -vDm 644 plugins/jvm/uwsgi.jar -t "$pkgdir"/usr/share/java/
+}
+
+package_uwsgi-plugin-mono() {
+  pkgdesc+=" (mono plugin)"
+  depends=('glibc' 'mono' 'uwsgi')
+
+  cd "$pkgbase-$pkgver"
+  install -vDm 755 plugins/mono/uwsgi.dll -t "$pkgdir"/usr/lib/mono/2.0/
+  install -vDm 755 mono_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
+}
+
+package_uwsgi-plugin-webdav() {
+  pkgdesc+=" (WebDav plugin)"
+  depends=('glibc' 'libxml2' 'uwsgi')
+
+  cd "$pkgbase-$pkgver"
+  install -vDm 755 webdav_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
+}
+
+package_uwsgi-plugin-zabbix() {
+  pkgdesc+=" (zabbix plugin)"
+  depends=('glibc' 'uwsgi')
+
+  cd "$pkgbase-$pkgver"
+  install -vDm 755 zabbix_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
+}
+
+package_uwsgi-plugin-notfound() {
+  pkgdesc+=" (notfound plugin)"
+  depends=('uwsgi')
+
+  cd "$pkgbase-$pkgver"
+  install -vDm 755 notfound_plugin.so -t "$pkgdir"/usr/lib/uwsgi/
+}

Deleted: archlinux.ini
===================================================================
--- archlinux.ini	2021-02-27 12:40:19 UTC (rev 874910)
+++ archlinux.ini	2021-02-27 12:41:32 UTC (rev 874911)
@@ -1,6 +0,0 @@
-[uwsgi]
-plugin_build_dir = .
-plugin_dir = /usr/lib/uwsgi
-plugins = asyncio, cgi, fiber, gevent, greenlet, jvm, php, php7, lua, mono, notfound, psgi, pypy, python, rack, rbthreads, webdav, zabbix
-main_plugin = systemd_logger,pam
-inherit = base

Copied: uwsgi/repos/community-testing-x86_64/archlinux.ini (from rev 874910, uwsgi/trunk/archlinux.ini)
===================================================================
--- archlinux.ini	                        (rev 0)
+++ archlinux.ini	2021-02-27 12:41:32 UTC (rev 874911)
@@ -0,0 +1,6 @@
+[uwsgi]
+plugin_build_dir = .
+plugin_dir = /usr/lib/uwsgi
+plugins = asyncio, cgi, fiber, gevent, greenlet, jvm, php, lua, mono, notfound, psgi, pypy, python, rack, rbthreads, webdav, zabbix
+main_plugin = systemd_logger,pam
+inherit = base

Deleted: emperor.ini
===================================================================
--- emperor.ini	2021-02-27 12:40:19 UTC (rev 874910)
+++ emperor.ini	2021-02-27 12:41:32 UTC (rev 874911)
@@ -1,2 +0,0 @@
-[uwsgi]
-emperor = /etc/uwsgi/vassals

Copied: uwsgi/repos/community-testing-x86_64/emperor.ini (from rev 874910, uwsgi/trunk/emperor.ini)
===================================================================
--- emperor.ini	                        (rev 0)
+++ emperor.ini	2021-02-27 12:41:32 UTC (rev 874911)
@@ -0,0 +1,2 @@
+[uwsgi]
+emperor = /etc/uwsgi/vassals

Deleted: emperor.uwsgi.service
===================================================================
--- emperor.uwsgi.service	2021-02-27 12:40:19 UTC (rev 874910)
+++ emperor.uwsgi.service	2021-02-27 12:41:32 UTC (rev 874911)
@@ -1,15 +0,0 @@
-[Unit]
-Description=uWSGI Emperor
-After=syslog.target
-
-[Service]
-ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/emperor.ini
-ExecReload=/bin/kill -HUP $MAINPID
-ExecStop=/bin/kill -INT $MAINPID
-Restart=always
-Type=notify
-NotifyAccess=all
-KillSignal=SIGQUIT
-
-[Install]
-WantedBy=multi-user.target

Copied: uwsgi/repos/community-testing-x86_64/emperor.uwsgi.service (from rev 874910, uwsgi/trunk/emperor.uwsgi.service)
===================================================================
--- emperor.uwsgi.service	                        (rev 0)
+++ emperor.uwsgi.service	2021-02-27 12:41:32 UTC (rev 874911)
@@ -0,0 +1,15 @@
+[Unit]
+Description=uWSGI Emperor
+After=syslog.target
+
+[Service]
+ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/emperor.ini
+ExecReload=/bin/kill -HUP $MAINPID
+ExecStop=/bin/kill -INT $MAINPID
+Restart=always
+Type=notify
+NotifyAccess=all
+KillSignal=SIGQUIT
+
+[Install]
+WantedBy=multi-user.target

Deleted: emperor.uwsgi.socket
===================================================================
--- emperor.uwsgi.socket	2021-02-27 12:40:19 UTC (rev 874910)
+++ emperor.uwsgi.socket	2021-02-27 12:41:32 UTC (rev 874911)
@@ -1,9 +0,0 @@
-[Unit]
-Description=Socket for uWSGI Emperor
-
-[Socket]
-# Change this to your uwsgi application port or unix socket location
-ListenStream=/run/uwsgi/emperor.sock
-
-[Install]
-WantedBy=sockets.target

Copied: uwsgi/repos/community-testing-x86_64/emperor.uwsgi.socket (from rev 874910, uwsgi/trunk/emperor.uwsgi.socket)
===================================================================
--- emperor.uwsgi.socket	                        (rev 0)
+++ emperor.uwsgi.socket	2021-02-27 12:41:32 UTC (rev 874911)
@@ -0,0 +1,9 @@
+[Unit]
+Description=Socket for uWSGI Emperor
+
+[Socket]
+# Change this to your uwsgi application port or unix socket location
+ListenStream=/run/uwsgi/emperor.sock
+
+[Install]
+WantedBy=sockets.target

Deleted: uwsgi-1.9.13-ruby2.0.patch
===================================================================
--- uwsgi-1.9.13-ruby2.0.patch	2021-02-27 12:40:19 UTC (rev 874910)
+++ uwsgi-1.9.13-ruby2.0.patch	2021-02-27 12:41:32 UTC (rev 874911)
@@ -1,42 +0,0 @@
-diff --git a/plugins/rack/uwsgiplugin.py b/plugins/rack/uwsgiplugin.py
-index 2375bc9..b908417 100644
---- a/plugins/rack/uwsgiplugin.py
-+++ b/plugins/rack/uwsgiplugin.py
-@@ -10,13 +10,14 @@ except:
- rbconfig = 'Config'
- 
- version = os.popen(RUBYPATH + " -e \"print RUBY_VERSION\"").read().rstrip()
--v = version.split('.')
- 
- GCC_LIST = ['rack_plugin', 'rack_api']
- 
--if (v[0] == '1' and v[1] == '9') or v[0] >= '2':
-+if version >= '1.9':
-     CFLAGS = os.popen(RUBYPATH + " -e \"require 'rbconfig';print RbConfig::CONFIG['CFLAGS']\"").read().rstrip().split()
-     CFLAGS.append('-DRUBY19')
-+    if version >= '2.0':
-+        CFLAGS.append('-DRUBY20')
-     CFLAGS.append('-Wno-unused-parameter')
-     rbconfig = 'RbConfig'	 
- else:
-diff --git a/plugins/ruby19/uwsgiplugin.py b/plugins/ruby19/uwsgiplugin.py
-index 4f35984..156018f 100644
---- a/plugins/ruby19/uwsgiplugin.py
-+++ b/plugins/ruby19/uwsgiplugin.py
-@@ -10,13 +10,14 @@ except:
- rbconfig = 'Config'
- 
- version = os.popen(RUBYPATH + " -e \"print RUBY_VERSION\"").read().rstrip()
--v = version.split('.')
- 
- GCC_LIST = ['../rack/rack_plugin', '../rack/rack_api']
- 
--if v[0] == '1' and v[1] == '9':
-+if version >= '1.9':
-     CFLAGS = os.popen(RUBYPATH + " -e \"require 'rbconfig';print RbConfig::CONFIG['CFLAGS']\"").read().rstrip().split()
-     CFLAGS.append('-DRUBY19')
-+    if version >= '2.0':
-+        CFLAGS.append('-DRUBY20')
-     CFLAGS.append('-Wno-unused-parameter')
-     rbconfig = 'RbConfig'	 
- else:

Copied: uwsgi/repos/community-testing-x86_64/uwsgi-1.9.13-ruby2.0.patch (from rev 874910, uwsgi/trunk/uwsgi-1.9.13-ruby2.0.patch)
===================================================================
--- uwsgi-1.9.13-ruby2.0.patch	                        (rev 0)
+++ uwsgi-1.9.13-ruby2.0.patch	2021-02-27 12:41:32 UTC (rev 874911)
@@ -0,0 +1,42 @@
+diff --git a/plugins/rack/uwsgiplugin.py b/plugins/rack/uwsgiplugin.py
+index 2375bc9..b908417 100644
+--- a/plugins/rack/uwsgiplugin.py
++++ b/plugins/rack/uwsgiplugin.py
+@@ -10,13 +10,14 @@ except:
+ rbconfig = 'Config'
+ 
+ version = os.popen(RUBYPATH + " -e \"print RUBY_VERSION\"").read().rstrip()
+-v = version.split('.')
+ 
+ GCC_LIST = ['rack_plugin', 'rack_api']
+ 
+-if (v[0] == '1' and v[1] == '9') or v[0] >= '2':
++if version >= '1.9':
+     CFLAGS = os.popen(RUBYPATH + " -e \"require 'rbconfig';print RbConfig::CONFIG['CFLAGS']\"").read().rstrip().split()
+     CFLAGS.append('-DRUBY19')
++    if version >= '2.0':
++        CFLAGS.append('-DRUBY20')
+     CFLAGS.append('-Wno-unused-parameter')
+     rbconfig = 'RbConfig'	 
+ else:
+diff --git a/plugins/ruby19/uwsgiplugin.py b/plugins/ruby19/uwsgiplugin.py
+index 4f35984..156018f 100644
+--- a/plugins/ruby19/uwsgiplugin.py
++++ b/plugins/ruby19/uwsgiplugin.py
+@@ -10,13 +10,14 @@ except:
+ rbconfig = 'Config'
+ 
+ version = os.popen(RUBYPATH + " -e \"print RUBY_VERSION\"").read().rstrip()
+-v = version.split('.')
+ 
+ GCC_LIST = ['../rack/rack_plugin', '../rack/rack_api']
+ 
+-if v[0] == '1' and v[1] == '9':
++if version >= '1.9':
+     CFLAGS = os.popen(RUBYPATH + " -e \"require 'rbconfig';print RbConfig::CONFIG['CFLAGS']\"").read().rstrip().split()
+     CFLAGS.append('-DRUBY19')
++    if version >= '2.0':
++        CFLAGS.append('-DRUBY20')
+     CFLAGS.append('-Wno-unused-parameter')
+     rbconfig = 'RbConfig'	 
+ else:

Deleted: uwsgi-2.0.19.1-php8.patch
===================================================================
--- uwsgi-2.0.19.1-php8.patch	2021-02-27 12:40:19 UTC (rev 874910)
+++ uwsgi-2.0.19.1-php8.patch	2021-02-27 12:41:32 UTC (rev 874911)
@@ -1,630 +0,0 @@
-diff --git c/plugins/php/common.h w/plugins/php/common.h
-index 9bf1c069..061b0b59 100644
---- c/plugins/php/common.h
-+++ w/plugins/php/common.h
-@@ -3,11 +3,6 @@
- #include "php_main.h"
- #include "php_variables.h"
- 
--#if (PHP_MAJOR_VERSION < 7)
--#include "ext/standard/php_smart_str.h"
--#else
--#define UWSGI_PHP7
--#endif
- #include "ext/standard/info.h"
- 
- #include "ext/session/php_session.h"
-diff --git c/plugins/php/php_plugin.c w/plugins/php/php_plugin.c
-index 5cec7805..717d6317 100644
---- c/plugins/php/php_plugin.c
-+++ w/plugins/php/php_plugin.c
-@@ -4,6 +4,11 @@ extern struct uwsgi_server uwsgi;
- 
- static sapi_module_struct uwsgi_sapi_module;
- 
-+static int uwsgi_php_init(void);
-+
-+typedef size_t php_strlen_size;
-+typedef zend_long php_long_size;
-+
- struct uwsgi_php {
- 	struct uwsgi_string_list *allowed_docroot;
- 	struct uwsgi_string_list *allowed_ext;
-@@ -17,7 +22,6 @@ struct uwsgi_php {
- 	struct uwsgi_string_list *vars;
- 	struct uwsgi_string_list *constants;
- 	char *docroot;
--	size_t docroot_len;
- 	char *app;
- 	char *app_qs;
- 	char *fallback;
-@@ -32,7 +36,10 @@ struct uwsgi_php {
- 	struct uwsgi_string_list *exec_after;
- 
- 	char *sapi_name;
-+
-+	int sapi_initialized;
- 	HashTable user_config_cache;
-+	struct uwsgi_dyn_dict *mountpoint;
- } uphp;
- 
- void uwsgi_opt_php_ini(char *opt, char *value, void *foobar) {
-@@ -40,6 +47,10 @@ void uwsgi_opt_php_ini(char *opt, char *value, void *foobar) {
-         uwsgi_sapi_module.php_ini_ignore = 1;
- }
- 
-+void uwsgi_opt_early_php(char *opt, char *value, void *foobar) {
-+	uwsgi_php_init();
-+}
-+
- struct uwsgi_option uwsgi_php_options[] = {
- 
-         {"php-ini", required_argument, 0, "set php.ini path", uwsgi_opt_php_ini, NULL, 0},
-@@ -69,15 +80,15 @@ struct uwsgi_option uwsgi_php_options[] = {
-         {"php-exec-after", required_argument, 0, "run specified php code after the requested script", uwsgi_opt_add_string_list, &uphp.exec_after, 0},
-         {"php-exec-end", required_argument, 0, "run specified php code after the requested script", uwsgi_opt_add_string_list, &uphp.exec_after, 0},
-         {"php-sapi-name", required_argument, 0, "hack the sapi name (required for enabling zend opcode cache)", uwsgi_opt_set_str, &uphp.sapi_name, 0},
-+
-+        {"early-php", no_argument, 0, "initialize an early perl interpreter shared by all loaders", uwsgi_opt_early_php, NULL, UWSGI_OPT_IMMEDIATE},
-+        {"early-php-sapi-name", required_argument, 0, "hack the sapi name (required for enabling zend opcode cache)", uwsgi_opt_set_str, &uphp.sapi_name, UWSGI_OPT_IMMEDIATE},
-+        {"php-mount", required_argument, 0, "add a php mountpoint", uwsgi_opt_add_dyn_dict, &uphp.mountpoint, 0},
- 	UWSGI_END_OF_OPTIONS
- };
- 
- 
--#ifdef UWSGI_PHP7
--static size_t sapi_uwsgi_ub_write(const char *str, size_t str_length TSRMLS_DC)
--#else
--static int sapi_uwsgi_ub_write(const char *str, uint str_length TSRMLS_DC)
--#endif
-+static size_t sapi_uwsgi_ub_write(const char *str, size_t str_length)
- {
- 	struct wsgi_request *wsgi_req = (struct wsgi_request *) SG(server_context);
- 
-@@ -89,7 +100,7 @@ static int sapi_uwsgi_ub_write(const char *str, uint str_length TSRMLS_DC)
- 	return str_length;
- }
- 
--static int sapi_uwsgi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
-+static int sapi_uwsgi_send_headers(sapi_headers_struct *sapi_headers)
- {
- 	sapi_header_struct *h;
- 	zend_llist_position pos;
-@@ -123,11 +134,7 @@ static int sapi_uwsgi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
- 	return SAPI_HEADER_SENT_SUCCESSFULLY;
- }
- 
--#ifdef UWSGI_PHP7
--static size_t sapi_uwsgi_read_post(char *buffer, size_t count_bytes TSRMLS_DC)
--#else
--static int sapi_uwsgi_read_post(char *buffer, uint count_bytes TSRMLS_DC)
--#endif
-+static size_t sapi_uwsgi_read_post(char *buffer, size_t count_bytes)
- {
- 	uint read_bytes = 0;
- 	
-@@ -151,7 +158,7 @@ static int sapi_uwsgi_read_post(char *buffer, uint count_bytes TSRMLS_DC)
- }
- 
- 
--static char *sapi_uwsgi_read_cookies(TSRMLS_D)
-+static char *sapi_uwsgi_read_cookies()
- {
- 	uint16_t len = 0;
- 	struct wsgi_request *wsgi_req = (struct wsgi_request *) SG(server_context);
-@@ -164,55 +171,55 @@ static char *sapi_uwsgi_read_cookies(TSRMLS_D)
- 	return NULL;
- }
- 
--static void sapi_uwsgi_register_variables(zval *track_vars_array TSRMLS_DC)
-+static void sapi_uwsgi_register_variables(zval *track_vars_array)
- {
- 	int i;
- 	struct wsgi_request *wsgi_req = (struct wsgi_request *) SG(server_context);
--	php_import_environment_variables(track_vars_array TSRMLS_CC);
-+	php_import_environment_variables(track_vars_array);
- 
- 	if (uphp.server_software) {
- 		if (!uphp.server_software_len) uphp.server_software_len = strlen(uphp.server_software);
--		php_register_variable_safe("SERVER_SOFTWARE", uphp.server_software, uphp.server_software_len, track_vars_array TSRMLS_CC);
-+		php_register_variable_safe("SERVER_SOFTWARE", uphp.server_software, uphp.server_software_len, track_vars_array);
- 	}
- 	else {
--		php_register_variable_safe("SERVER_SOFTWARE", "uWSGI", 5, track_vars_array TSRMLS_CC);
-+		php_register_variable_safe("SERVER_SOFTWARE", "uWSGI", 5, track_vars_array);
- 	}
- 
- 	for (i = 0; i < wsgi_req->var_cnt; i += 2) {
- 		php_register_variable_safe( estrndup(wsgi_req->hvec[i].iov_base, wsgi_req->hvec[i].iov_len),
- 			wsgi_req->hvec[i + 1].iov_base, wsgi_req->hvec[i + 1].iov_len,
--			track_vars_array TSRMLS_CC);
-+			track_vars_array);
-         }
- 
--	php_register_variable_safe("PATH_INFO", wsgi_req->path_info, wsgi_req->path_info_len, track_vars_array TSRMLS_CC);
-+	php_register_variable_safe("PATH_INFO", wsgi_req->path_info, wsgi_req->path_info_len, track_vars_array);
- 	if (wsgi_req->query_string_len > 0) {
--		php_register_variable_safe("QUERY_STRING", wsgi_req->query_string, wsgi_req->query_string_len, track_vars_array TSRMLS_CC);
-+		php_register_variable_safe("QUERY_STRING", wsgi_req->query_string, wsgi_req->query_string_len, track_vars_array);
- 	}
- 
--	php_register_variable_safe("SCRIPT_NAME", wsgi_req->script_name, wsgi_req->script_name_len, track_vars_array TSRMLS_CC);
--	php_register_variable_safe("SCRIPT_FILENAME", wsgi_req->file, wsgi_req->file_len, track_vars_array TSRMLS_CC);
-+	php_register_variable_safe("SCRIPT_NAME", wsgi_req->script_name, wsgi_req->script_name_len, track_vars_array);
-+	php_register_variable_safe("SCRIPT_FILENAME", wsgi_req->file, wsgi_req->file_len, track_vars_array);
- 
--	php_register_variable_safe("DOCUMENT_ROOT", wsgi_req->document_root, wsgi_req->document_root_len, track_vars_array TSRMLS_CC);
-+	php_register_variable_safe("DOCUMENT_ROOT", wsgi_req->document_root, wsgi_req->document_root_len, track_vars_array);
- 
- 	if (wsgi_req->path_info_len) {
- 		char *path_translated = ecalloc(1, wsgi_req->file_len + wsgi_req->path_info_len + 1);
- 
- 		memcpy(path_translated, wsgi_req->file, wsgi_req->file_len);
- 		memcpy(path_translated + wsgi_req->file_len, wsgi_req->path_info, wsgi_req->path_info_len);
--		php_register_variable_safe("PATH_TRANSLATED", path_translated, wsgi_req->file_len + wsgi_req->path_info_len , track_vars_array TSRMLS_CC);
-+		php_register_variable_safe("PATH_TRANSLATED", path_translated, wsgi_req->file_len + wsgi_req->path_info_len , track_vars_array);
- 	}
- 	else {
--		php_register_variable_safe("PATH_TRANSLATED", "", 0, track_vars_array TSRMLS_CC);
-+		php_register_variable_safe("PATH_TRANSLATED", "", 0, track_vars_array);
- 	}
- 
--	php_register_variable_safe("PHP_SELF", wsgi_req->script_name, wsgi_req->script_name_len, track_vars_array TSRMLS_CC);
-+	php_register_variable_safe("PHP_SELF", wsgi_req->script_name, wsgi_req->script_name_len, track_vars_array);
- 
- 	struct uwsgi_string_list *usl = uphp.vars;
- 	while(usl) {
- 		char *equal = strchr(usl->value, '=');
- 		if (equal) {
- 			php_register_variable_safe( estrndup(usl->value, equal-usl->value),
--				equal+1, strlen(equal+1), track_vars_array TSRMLS_CC);
-+				equal+1, strlen(equal+1), track_vars_array);
- 		}
- 		usl = usl->next;
- 	}
-@@ -253,10 +260,7 @@ PHP_MINIT_FUNCTION(uwsgi_php_minit) {
- 			char *name = usl->value;
- 			char *strval = equal + 1;
- 			equal = NULL;
--#ifndef UWSGI_PHP7
--			name_len = name_len + 1;
--#endif
--			zend_register_string_constant(name, name_len, strval, CONST_CS | CONST_PERSISTENT, module_number TSRMLS_CC);
-+			zend_register_string_constant(name, name_len, strval, CONST_CS | CONST_PERSISTENT, module_number);
- 		}
- 		usl = usl->next;
- 	}
-@@ -264,11 +268,7 @@ PHP_MINIT_FUNCTION(uwsgi_php_minit) {
- }
- 
- PHP_FUNCTION(uwsgi_version) {
--#ifdef UWSGI_PHP7
- 	RETURN_STRING(UWSGI_VERSION);
--#else
--	RETURN_STRING(UWSGI_VERSION, 1);
--#endif
- }
- 
- PHP_FUNCTION(uwsgi_worker_id) {
-@@ -285,11 +285,11 @@ PHP_FUNCTION(uwsgi_masterpid) {
- PHP_FUNCTION(uwsgi_cache_exists) {
- 
-         char *key = NULL;
--        int keylen = 0;
-+        php_strlen_size keylen = 0;
-         char *cache = NULL;
--        int cachelen = 0;
-+        php_strlen_size cachelen = 0;
- 
--        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &key, &keylen, &cache, &cachelen) == FAILURE) {
-+        if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|s", &key, &keylen, &cache, &cachelen) == FAILURE) {
-                 RETURN_NULL();
-         }
- 
-@@ -303,9 +303,9 @@ PHP_FUNCTION(uwsgi_cache_exists) {
- PHP_FUNCTION(uwsgi_cache_clear) {
- 
-         char *cache = NULL;
--        int cachelen = 0;
-+        php_strlen_size cachelen = 0;
- 
--        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &cache, &cachelen) == FAILURE) {
-+        if (zend_parse_parameters(ZEND_NUM_ARGS(), "|s", &cache, &cachelen) == FAILURE) {
-                 RETURN_NULL();
-         }
- 
-@@ -318,13 +318,13 @@ PHP_FUNCTION(uwsgi_cache_clear) {
- 
- 
- PHP_FUNCTION(uwsgi_cache_del) {
--	
-+
- 	char *key = NULL;
--        int keylen = 0;
-+	php_strlen_size keylen = 0;
- 	char *cache = NULL;
--	int cachelen = 0;
-+	php_strlen_size cachelen = 0;
- 
--        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &key, &keylen, &cache, &cachelen) == FAILURE) {
-+        if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|s", &key, &keylen, &cache, &cachelen) == FAILURE) {
-                 RETURN_NULL();
-         }
- 
-@@ -338,15 +338,15 @@ PHP_FUNCTION(uwsgi_cache_del) {
- PHP_FUNCTION(uwsgi_cache_get) {
- 
- 	char *key = NULL;
--	int keylen = 0;
-+	php_strlen_size keylen = 0;
- 	char *cache = NULL;
--	int cachelen = 0;
-+	php_strlen_size cachelen = 0;
- 	uint64_t valsize;
- 
- 	if (!uwsgi.caches)
- 		RETURN_NULL();
- 
--	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &key, &keylen, &cache, &cachelen) == FAILURE) {
-+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|s", &key, &keylen, &cache, &cachelen) == FAILURE) {
-                 RETURN_NULL();
-         }
- 
-@@ -354,28 +354,24 @@ PHP_FUNCTION(uwsgi_cache_get) {
- 	if (value) {
- 		char *ret = estrndup(value, valsize);
- 		free(value);
--#ifdef UWSGI_PHP7
- 		RETURN_STRING(ret);
--#else
--		RETURN_STRING(ret, 0);
--#endif
- 	}
- 	RETURN_NULL();
- }
- 
- PHP_FUNCTION(uwsgi_cache_set) {
- 	char *key = NULL;	
--	int keylen;
-+	php_strlen_size keylen = 0;
- 	char *value = NULL;
--	int vallen;
--	uint64_t expires = 0;
-+	php_strlen_size vallen = 0;
-+	php_long_size expires = 0;
- 	char *cache = NULL;
--	int cachelen = 0;
-+	php_strlen_size cachelen = 0;
- 
- 	if (!uwsgi.caches)
- 		RETURN_NULL();
- 
--	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|ls", &key, &keylen, &value, &vallen, &expires, &cache, &cachelen) == FAILURE) {
-+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|ls", &key, &keylen, &value, &vallen, &expires, &cache, &cachelen) == FAILURE) {
-                 RETURN_NULL();
-         }
- 
-@@ -388,17 +384,17 @@ PHP_FUNCTION(uwsgi_cache_set) {
- 
- PHP_FUNCTION(uwsgi_cache_update) {
-         char *key = NULL;
--        int keylen;
-+        php_strlen_size keylen = 0;
-         char *value = NULL;
--        int vallen;
--        uint64_t expires = 0;
-+        php_strlen_size vallen = 0;
-+        php_long_size expires = 0;
-         char *cache = NULL;
--        int cachelen = 0;
-+        php_strlen_size cachelen = 0;
- 
-         if (!uwsgi.caches)
-                 RETURN_NULL();
- 
--        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|ls", &key, &keylen, &value, &vallen, &expires, &cache, &cachelen) == FAILURE) {
-+        if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|ls", &key, &keylen, &value, &vallen, &expires, &cache, &cachelen) == FAILURE) {
-                 RETURN_NULL();
-         }
- 
-@@ -423,7 +419,7 @@ PHP_FUNCTION(uwsgi_rpc) {
-         uint16_t argvs[256];
- 	uint64_t size = 0;
- 
--	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "+", &varargs, &num_args) == FAILURE) {
-+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "+", &varargs, &num_args) == FAILURE) {
- 		RETURN_NULL();
- 	}
- 
-@@ -462,11 +458,7 @@ PHP_FUNCTION(uwsgi_rpc) {
- 		// here we do not free varargs for performance reasons
- 		char *ret = estrndup(response, size);
- 		free(response);
--#ifdef UWSGI_PHP7
- 		RETURN_STRING(ret);
--#else
--		RETURN_STRING(ret, 0);
--#endif
-         }
- 
- clear:
-@@ -481,7 +473,7 @@ PHP_FUNCTION(uwsgi_setprocname) {
- 	char *name;
- 	int name_len;
- 
--	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) {
-+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &name, &name_len) == FAILURE) {
- 		RETURN_NULL();
- 	}
- 
-@@ -495,7 +487,7 @@ PHP_FUNCTION(uwsgi_signal) {
- 	long long_signum;
- 	uint8_t signum = 0;
- 
--        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &long_signum) == FAILURE) {
-+        if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &long_signum) == FAILURE) {
-                 RETURN_NULL();
-         }
- 
-@@ -629,10 +621,12 @@ static int php_uwsgi_startup(sapi_module_struct *sapi_module)
- 	}
- }
- 
--#if ((PHP_MAJOR_VERSION >= 7) && (PHP_MINOR_VERSION >= 1))
-+#if (PHP_MAJOR_VERSION >= 8)
-+static void sapi_uwsgi_log_message(const char *message, int syslog_type_int) {
-+#elif ((PHP_MAJOR_VERSION == 7) && (PHP_MINOR_VERSION >= 1))
- static void sapi_uwsgi_log_message(char *message, int syslog_type_int) {
- #else
--static void sapi_uwsgi_log_message(char *message TSRMLS_DC) {
-+static void sapi_uwsgi_log_message(char *message) {
- #endif
- 	uwsgi_log("%s\n", message);
- }
-@@ -668,16 +662,32 @@ static sapi_module_struct uwsgi_sapi_module = {
- 	STANDARD_SAPI_MODULE_PROPERTIES
- };
- 
--int uwsgi_php_init(void) {
-+static void uwsgi_php_init_mount(struct uwsgi_dyn_dict *mount_dict) {
-+	struct uwsgi_dyn_dict *udd = mount_dict;
-+	while (udd) {
-+		char *orig_dest = udd->value;
-+		udd->value = uwsgi_expand_path(udd->value, udd->vallen, NULL);
-+		udd->vallen = strlen(udd->value);
-+		if (!udd->value) {
-+			uwsgi_log("Unable to expand php mountpoint to %s\n", orig_dest);
-+			exit(1);
-+		}
-+		udd = udd->next;
-+	}
-+}
-+
-+static int uwsgi_php_init(void) {
- 
- 	struct uwsgi_string_list *pset = uphp.set;
- 	struct uwsgi_string_list *append_config = uphp.append_config;
- 
-+	if (!uphp.sapi_initialized) {
- #ifdef ZTS
--        tsrm_startup(1, 1, 0, NULL);
-+        	tsrm_startup(1, 1, 0, NULL);
- #endif
--
--	sapi_startup(&uwsgi_sapi_module);
-+		sapi_startup(&uwsgi_sapi_module);
-+		uphp.sapi_initialized = 1;
-+	}
- 
- 	// applying custom options
- 	while(append_config) {
-@@ -705,13 +715,14 @@ int uwsgi_php_init(void) {
- 			uwsgi_log("unable to set php docroot to %s\n", orig_docroot);
- 			exit(1);
- 		}
--		uwsgi_log("PHP document root set to %s\n", uphp.docroot);
--		uphp.docroot_len = strlen(uphp.docroot);
- 	}
- 
-+	uwsgi_php_init_mount(uphp.mountpoint);
-+
- 	if (uphp.sapi_name) {
- 		uwsgi_sapi_module.name = uphp.sapi_name;
- 	}
-+
- 	uwsgi_sapi_module.startup(&uwsgi_sapi_module);
- 	uwsgi_log("PHP %s initialized\n", PHP_VERSION);
- 
-@@ -776,6 +787,33 @@ int uwsgi_php_walk(struct wsgi_request *wsgi_req, char *full_path, char *docroot
- 
- }
- 
-+static char *uwsgi_php_get_mount(char *path_info, uint16_t path_info_len, struct uwsgi_dyn_dict *mount_dict, int *discard_base) {
-+	int best_found = 0;
-+	struct uwsgi_dyn_dict *udd = mount_dict, *chosen = NULL;
-+
-+	while (udd) {
-+		if (mount_dict->vallen) {
-+			if (!uwsgi_starts_with(path_info, path_info_len, udd->key, udd->keylen)) {
-+				if (udd->keylen > best_found) {
-+					best_found = udd->keylen;
-+					chosen = udd;
-+				}
-+			}
-+		}
-+		udd = udd->next;
-+	}
-+
-+	if (chosen) {
-+		*discard_base = chosen->keylen;
-+		if (chosen->key[chosen->keylen-1] == '/') {
-+			*discard_base = *discard_base - 1;
-+		}
-+		return chosen->value;
-+	} else {
-+		return NULL;
-+	}
-+}
-+
- 
- int uwsgi_php_request(struct wsgi_request *wsgi_req) {
- 
-@@ -788,10 +826,6 @@ int uwsgi_php_request(struct wsgi_request *wsgi_req) {
- 
- 	zend_file_handle file_handle;
- 
--#ifdef ZTS
--	TSRMLS_FETCH();
--#endif
--
- 	SG(server_context) = (void *) wsgi_req;
- 
- 	if (uwsgi_parse_vars(wsgi_req)) {
-@@ -801,7 +835,15 @@ int uwsgi_php_request(struct wsgi_request *wsgi_req) {
- 	char *orig_path_info = wsgi_req->path_info;
- 	uint16_t orig_path_info_len = wsgi_req->path_info_len;
- 
--	if (uphp.docroot) {
-+	int discard_base = 0;
-+
-+	char *mount_docroot = uwsgi_php_get_mount(wsgi_req->path_info, wsgi_req->path_info_len, uphp.mountpoint, &discard_base);
-+
-+	if (mount_docroot) {
-+		wsgi_req->document_root = mount_docroot;
-+		wsgi_req->path_info = wsgi_req->path_info+discard_base;
-+		wsgi_req->path_info_len = wsgi_req->path_info_len-discard_base;
-+	} else if (uphp.docroot) {
- 		wsgi_req->document_root = uphp.docroot;
- 	}
- 	// fallback to cwd
-@@ -833,7 +875,8 @@ int uwsgi_php_request(struct wsgi_request *wsgi_req) {
-                 }
- #endif
- 
--		strcpy(real_filename, uphp.app);	
-+		strncpy(real_filename, uphp.app, PATH_MAX);
-+		real_filename[PATH_MAX-1] = '\0';
- 		if (wsgi_req->path_info_len == 1 && wsgi_req->path_info[0] == '/') {
- 			goto appready;
- 		}
-@@ -926,7 +969,6 @@ oldstyle:
- 	free(filename);
- 	real_filename_len = strlen(real_filename);
- 
--	// first check for valid doc roots
- 	if (uphp.allowed_docroot) {
- 		struct uwsgi_string_list *usl = uphp.allowed_docroot;
- 		while(usl) {
-@@ -939,16 +981,6 @@ oldstyle:
- 		uwsgi_log("PHP security error: %s is not under an allowed docroot\n", real_filename);
- 		return -1;
- 	}
--	// then for default docroot (if any)
--	else if (uphp.docroot)
--	{
--		if (!uwsgi_starts_with(real_filename, real_filename_len, uphp.docroot, uphp.docroot_len)) {
--			goto secure;
--		}
--		uwsgi_403(wsgi_req);
--		uwsgi_log("PHP security error: %s is not under the default docroot\n", real_filename);
--		return -1;
--	}
- 
- secure:
- 
-@@ -1065,7 +1097,7 @@ secure3:
-         file_handle.type = ZEND_HANDLE_FILENAME;
-         file_handle.filename = real_filename;
- 
--        if (php_request_startup(TSRMLS_C) == FAILURE) {
-+        if (php_request_startup() == FAILURE) {
- 		uwsgi_500(wsgi_req);
-                 return -1;
-         }
-@@ -1073,13 +1105,13 @@ secure3:
- 	struct uwsgi_string_list *usl=NULL;
- 
- 	uwsgi_foreach(usl, uphp.exec_before) {
--		if (zend_eval_string_ex(usl->value, NULL, "uWSGI php exec before", 1 TSRMLS_CC) == FAILURE) goto end;
-+		if (zend_eval_string_ex(usl->value, NULL, "uWSGI php exec before", 1) == FAILURE) goto end;
- 	}
- 
--        php_execute_script(&file_handle TSRMLS_CC);
-+        php_execute_script(&file_handle);
- 
- 	uwsgi_foreach(usl, uphp.exec_after) {
--		if (zend_eval_string_ex(usl->value, NULL, "uWSGI php exec after", 1 TSRMLS_CC) == FAILURE) goto end;
-+		if (zend_eval_string_ex(usl->value, NULL, "uWSGI php exec after", 1) == FAILURE) goto end;
- 	}
- 
- end:
-diff --git c/plugins/php/session.c w/plugins/php/session.c
-index 2312b6b9..cce06985 100644
---- c/plugins/php/session.c
-+++ w/plugins/php/session.c
-@@ -12,34 +12,20 @@ PS_CLOSE_FUNC(uwsgi) {
- PS_READ_FUNC(uwsgi) {
- 	char *cache = PS_GET_MOD_DATA();
- 	uint64_t valsize = 0;
--#ifdef UWSGI_PHP7
- 	char *value = uwsgi_cache_magic_get(key->val, key->len , &valsize, NULL, cache);
--#else
--	char *value = uwsgi_cache_magic_get((char *)key, strlen((char *)key), &valsize, NULL, cache);
--#endif
--        if (!value) return FAILURE;
--#ifdef UWSGI_PHP7
-+	if (!value) {
-+		*val = STR_EMPTY_ALLOC();
-+		return SUCCESS;
-+	}
- 	*val = zend_string_init(value, valsize, 0);
--#else
--	char *new_val = emalloc(valsize);
--	memcpy(new_val, value, valsize);
--	free(value);
--	*val = new_val;
--	*vallen = valsize;
--#endif
- 	return SUCCESS;
- 	
- }
- 
- PS_WRITE_FUNC(uwsgi) {
- 	char *cache = PS_GET_MOD_DATA();
--#ifdef UWSGI_PHP7
- 	if (val->len == 0) return SUCCESS;
- 	if (!uwsgi_cache_magic_set(key->val, key->len, val->val, val->len, 0, UWSGI_CACHE_FLAG_UPDATE, cache)) {
--#else
--	if (vallen == 0) return SUCCESS;
--	if (!uwsgi_cache_magic_set((char *)key, strlen(key), (char *)val, vallen, 0, UWSGI_CACHE_FLAG_UPDATE, cache)) {
--#endif
- 		return SUCCESS;	
- 	}
- 	return FAILURE;
-@@ -47,11 +33,10 @@ PS_WRITE_FUNC(uwsgi) {
- 
- PS_DESTROY_FUNC(uwsgi) {
- 	char *cache = PS_GET_MOD_DATA();
--#ifdef UWSGI_PHP7
-+	if (!uwsgi_cache_magic_exists(key->val, key->len, cache))
-+		return SUCCESS;
-+
- 	if (!uwsgi_cache_magic_del(key->val, key->len, cache)) {
--#else
--	if (!uwsgi_cache_magic_del((char *)key, strlen(key), cache)) {
--#endif
- 		return SUCCESS;
- 	}
- 	return FAILURE;
-diff --git c/plugins/php/uwsgiplugin.py w/plugins/php/uwsgiplugin.py
-index d930c44e..8657eb70 100644
---- c/plugins/php/uwsgiplugin.py
-+++ w/plugins/php/uwsgiplugin.py
-@@ -1,6 +1,6 @@
- import os
- 
--NAME='php'
-+NAME = 'php'
- 
- ld_run_path = None
- PHPPATH = 'php-config'

Copied: uwsgi/repos/community-testing-x86_64/uwsgi-2.0.19.1-php8.patch (from rev 874910, uwsgi/trunk/uwsgi-2.0.19.1-php8.patch)
===================================================================
--- uwsgi-2.0.19.1-php8.patch	                        (rev 0)
+++ uwsgi-2.0.19.1-php8.patch	2021-02-27 12:41:32 UTC (rev 874911)
@@ -0,0 +1,630 @@
+diff --git c/plugins/php/common.h w/plugins/php/common.h
+index 9bf1c069..061b0b59 100644
+--- c/plugins/php/common.h
++++ w/plugins/php/common.h
+@@ -3,11 +3,6 @@
+ #include "php_main.h"
+ #include "php_variables.h"
+ 
+-#if (PHP_MAJOR_VERSION < 7)
+-#include "ext/standard/php_smart_str.h"
+-#else
+-#define UWSGI_PHP7
+-#endif
+ #include "ext/standard/info.h"
+ 
+ #include "ext/session/php_session.h"
+diff --git c/plugins/php/php_plugin.c w/plugins/php/php_plugin.c
+index 5cec7805..717d6317 100644
+--- c/plugins/php/php_plugin.c
++++ w/plugins/php/php_plugin.c
+@@ -4,6 +4,11 @@ extern struct uwsgi_server uwsgi;
+ 
+ static sapi_module_struct uwsgi_sapi_module;
+ 
++static int uwsgi_php_init(void);
++
++typedef size_t php_strlen_size;
++typedef zend_long php_long_size;
++
+ struct uwsgi_php {
+ 	struct uwsgi_string_list *allowed_docroot;
+ 	struct uwsgi_string_list *allowed_ext;
+@@ -17,7 +22,6 @@ struct uwsgi_php {
+ 	struct uwsgi_string_list *vars;
+ 	struct uwsgi_string_list *constants;
+ 	char *docroot;
+-	size_t docroot_len;
+ 	char *app;
+ 	char *app_qs;
+ 	char *fallback;
+@@ -32,7 +36,10 @@ struct uwsgi_php {
+ 	struct uwsgi_string_list *exec_after;
+ 
+ 	char *sapi_name;
++
++	int sapi_initialized;
+ 	HashTable user_config_cache;
++	struct uwsgi_dyn_dict *mountpoint;
+ } uphp;
+ 
+ void uwsgi_opt_php_ini(char *opt, char *value, void *foobar) {
+@@ -40,6 +47,10 @@ void uwsgi_opt_php_ini(char *opt, char *value, void *foobar) {
+         uwsgi_sapi_module.php_ini_ignore = 1;
+ }
+ 
++void uwsgi_opt_early_php(char *opt, char *value, void *foobar) {
++	uwsgi_php_init();
++}
++
+ struct uwsgi_option uwsgi_php_options[] = {
+ 
+         {"php-ini", required_argument, 0, "set php.ini path", uwsgi_opt_php_ini, NULL, 0},
+@@ -69,15 +80,15 @@ struct uwsgi_option uwsgi_php_options[] = {
+         {"php-exec-after", required_argument, 0, "run specified php code after the requested script", uwsgi_opt_add_string_list, &uphp.exec_after, 0},
+         {"php-exec-end", required_argument, 0, "run specified php code after the requested script", uwsgi_opt_add_string_list, &uphp.exec_after, 0},
+         {"php-sapi-name", required_argument, 0, "hack the sapi name (required for enabling zend opcode cache)", uwsgi_opt_set_str, &uphp.sapi_name, 0},
++
++        {"early-php", no_argument, 0, "initialize an early perl interpreter shared by all loaders", uwsgi_opt_early_php, NULL, UWSGI_OPT_IMMEDIATE},
++        {"early-php-sapi-name", required_argument, 0, "hack the sapi name (required for enabling zend opcode cache)", uwsgi_opt_set_str, &uphp.sapi_name, UWSGI_OPT_IMMEDIATE},
++        {"php-mount", required_argument, 0, "add a php mountpoint", uwsgi_opt_add_dyn_dict, &uphp.mountpoint, 0},
+ 	UWSGI_END_OF_OPTIONS
+ };
+ 
+ 
+-#ifdef UWSGI_PHP7
+-static size_t sapi_uwsgi_ub_write(const char *str, size_t str_length TSRMLS_DC)
+-#else
+-static int sapi_uwsgi_ub_write(const char *str, uint str_length TSRMLS_DC)
+-#endif
++static size_t sapi_uwsgi_ub_write(const char *str, size_t str_length)
+ {
+ 	struct wsgi_request *wsgi_req = (struct wsgi_request *) SG(server_context);
+ 
+@@ -89,7 +100,7 @@ static int sapi_uwsgi_ub_write(const char *str, uint str_length TSRMLS_DC)
+ 	return str_length;
+ }
+ 
+-static int sapi_uwsgi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
++static int sapi_uwsgi_send_headers(sapi_headers_struct *sapi_headers)
+ {
+ 	sapi_header_struct *h;
+ 	zend_llist_position pos;
+@@ -123,11 +134,7 @@ static int sapi_uwsgi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
+ 	return SAPI_HEADER_SENT_SUCCESSFULLY;
+ }
+ 
+-#ifdef UWSGI_PHP7
+-static size_t sapi_uwsgi_read_post(char *buffer, size_t count_bytes TSRMLS_DC)
+-#else
+-static int sapi_uwsgi_read_post(char *buffer, uint count_bytes TSRMLS_DC)
+-#endif
++static size_t sapi_uwsgi_read_post(char *buffer, size_t count_bytes)
+ {
+ 	uint read_bytes = 0;
+ 	
+@@ -151,7 +158,7 @@ static int sapi_uwsgi_read_post(char *buffer, uint count_bytes TSRMLS_DC)
+ }
+ 
+ 
+-static char *sapi_uwsgi_read_cookies(TSRMLS_D)
++static char *sapi_uwsgi_read_cookies()
+ {
+ 	uint16_t len = 0;
+ 	struct wsgi_request *wsgi_req = (struct wsgi_request *) SG(server_context);
+@@ -164,55 +171,55 @@ static char *sapi_uwsgi_read_cookies(TSRMLS_D)
+ 	return NULL;
+ }
+ 
+-static void sapi_uwsgi_register_variables(zval *track_vars_array TSRMLS_DC)
++static void sapi_uwsgi_register_variables(zval *track_vars_array)
+ {
+ 	int i;
+ 	struct wsgi_request *wsgi_req = (struct wsgi_request *) SG(server_context);
+-	php_import_environment_variables(track_vars_array TSRMLS_CC);
++	php_import_environment_variables(track_vars_array);
+ 
+ 	if (uphp.server_software) {
+ 		if (!uphp.server_software_len) uphp.server_software_len = strlen(uphp.server_software);
+-		php_register_variable_safe("SERVER_SOFTWARE", uphp.server_software, uphp.server_software_len, track_vars_array TSRMLS_CC);
++		php_register_variable_safe("SERVER_SOFTWARE", uphp.server_software, uphp.server_software_len, track_vars_array);
+ 	}
+ 	else {
+-		php_register_variable_safe("SERVER_SOFTWARE", "uWSGI", 5, track_vars_array TSRMLS_CC);
++		php_register_variable_safe("SERVER_SOFTWARE", "uWSGI", 5, track_vars_array);
+ 	}
+ 
+ 	for (i = 0; i < wsgi_req->var_cnt; i += 2) {
+ 		php_register_variable_safe( estrndup(wsgi_req->hvec[i].iov_base, wsgi_req->hvec[i].iov_len),
+ 			wsgi_req->hvec[i + 1].iov_base, wsgi_req->hvec[i + 1].iov_len,
+-			track_vars_array TSRMLS_CC);
++			track_vars_array);
+         }
+ 
+-	php_register_variable_safe("PATH_INFO", wsgi_req->path_info, wsgi_req->path_info_len, track_vars_array TSRMLS_CC);
++	php_register_variable_safe("PATH_INFO", wsgi_req->path_info, wsgi_req->path_info_len, track_vars_array);
+ 	if (wsgi_req->query_string_len > 0) {
+-		php_register_variable_safe("QUERY_STRING", wsgi_req->query_string, wsgi_req->query_string_len, track_vars_array TSRMLS_CC);
++		php_register_variable_safe("QUERY_STRING", wsgi_req->query_string, wsgi_req->query_string_len, track_vars_array);
+ 	}
+ 
+-	php_register_variable_safe("SCRIPT_NAME", wsgi_req->script_name, wsgi_req->script_name_len, track_vars_array TSRMLS_CC);
+-	php_register_variable_safe("SCRIPT_FILENAME", wsgi_req->file, wsgi_req->file_len, track_vars_array TSRMLS_CC);
++	php_register_variable_safe("SCRIPT_NAME", wsgi_req->script_name, wsgi_req->script_name_len, track_vars_array);
++	php_register_variable_safe("SCRIPT_FILENAME", wsgi_req->file, wsgi_req->file_len, track_vars_array);
+ 
+-	php_register_variable_safe("DOCUMENT_ROOT", wsgi_req->document_root, wsgi_req->document_root_len, track_vars_array TSRMLS_CC);
++	php_register_variable_safe("DOCUMENT_ROOT", wsgi_req->document_root, wsgi_req->document_root_len, track_vars_array);
+ 
+ 	if (wsgi_req->path_info_len) {
+ 		char *path_translated = ecalloc(1, wsgi_req->file_len + wsgi_req->path_info_len + 1);
+ 
+ 		memcpy(path_translated, wsgi_req->file, wsgi_req->file_len);
+ 		memcpy(path_translated + wsgi_req->file_len, wsgi_req->path_info, wsgi_req->path_info_len);
+-		php_register_variable_safe("PATH_TRANSLATED", path_translated, wsgi_req->file_len + wsgi_req->path_info_len , track_vars_array TSRMLS_CC);
++		php_register_variable_safe("PATH_TRANSLATED", path_translated, wsgi_req->file_len + wsgi_req->path_info_len , track_vars_array);
+ 	}
+ 	else {
+-		php_register_variable_safe("PATH_TRANSLATED", "", 0, track_vars_array TSRMLS_CC);
++		php_register_variable_safe("PATH_TRANSLATED", "", 0, track_vars_array);
+ 	}
+ 
+-	php_register_variable_safe("PHP_SELF", wsgi_req->script_name, wsgi_req->script_name_len, track_vars_array TSRMLS_CC);
++	php_register_variable_safe("PHP_SELF", wsgi_req->script_name, wsgi_req->script_name_len, track_vars_array);
+ 
+ 	struct uwsgi_string_list *usl = uphp.vars;
+ 	while(usl) {
+ 		char *equal = strchr(usl->value, '=');
+ 		if (equal) {
+ 			php_register_variable_safe( estrndup(usl->value, equal-usl->value),
+-				equal+1, strlen(equal+1), track_vars_array TSRMLS_CC);
++				equal+1, strlen(equal+1), track_vars_array);
+ 		}
+ 		usl = usl->next;
+ 	}
+@@ -253,10 +260,7 @@ PHP_MINIT_FUNCTION(uwsgi_php_minit) {
+ 			char *name = usl->value;
+ 			char *strval = equal + 1;
+ 			equal = NULL;
+-#ifndef UWSGI_PHP7
+-			name_len = name_len + 1;
+-#endif
+-			zend_register_string_constant(name, name_len, strval, CONST_CS | CONST_PERSISTENT, module_number TSRMLS_CC);
++			zend_register_string_constant(name, name_len, strval, CONST_CS | CONST_PERSISTENT, module_number);
+ 		}
+ 		usl = usl->next;
+ 	}
+@@ -264,11 +268,7 @@ PHP_MINIT_FUNCTION(uwsgi_php_minit) {
+ }
+ 
+ PHP_FUNCTION(uwsgi_version) {
+-#ifdef UWSGI_PHP7
+ 	RETURN_STRING(UWSGI_VERSION);
+-#else
+-	RETURN_STRING(UWSGI_VERSION, 1);
+-#endif
+ }
+ 
+ PHP_FUNCTION(uwsgi_worker_id) {
+@@ -285,11 +285,11 @@ PHP_FUNCTION(uwsgi_masterpid) {
+ PHP_FUNCTION(uwsgi_cache_exists) {
+ 
+         char *key = NULL;
+-        int keylen = 0;
++        php_strlen_size keylen = 0;
+         char *cache = NULL;
+-        int cachelen = 0;
++        php_strlen_size cachelen = 0;
+ 
+-        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &key, &keylen, &cache, &cachelen) == FAILURE) {
++        if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|s", &key, &keylen, &cache, &cachelen) == FAILURE) {
+                 RETURN_NULL();
+         }
+ 
+@@ -303,9 +303,9 @@ PHP_FUNCTION(uwsgi_cache_exists) {
+ PHP_FUNCTION(uwsgi_cache_clear) {
+ 
+         char *cache = NULL;
+-        int cachelen = 0;
++        php_strlen_size cachelen = 0;
+ 
+-        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &cache, &cachelen) == FAILURE) {
++        if (zend_parse_parameters(ZEND_NUM_ARGS(), "|s", &cache, &cachelen) == FAILURE) {
+                 RETURN_NULL();
+         }
+ 
+@@ -318,13 +318,13 @@ PHP_FUNCTION(uwsgi_cache_clear) {
+ 
+ 
+ PHP_FUNCTION(uwsgi_cache_del) {
+-	
++
+ 	char *key = NULL;
+-        int keylen = 0;
++	php_strlen_size keylen = 0;
+ 	char *cache = NULL;
+-	int cachelen = 0;
++	php_strlen_size cachelen = 0;
+ 
+-        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &key, &keylen, &cache, &cachelen) == FAILURE) {
++        if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|s", &key, &keylen, &cache, &cachelen) == FAILURE) {
+                 RETURN_NULL();
+         }
+ 
+@@ -338,15 +338,15 @@ PHP_FUNCTION(uwsgi_cache_del) {
+ PHP_FUNCTION(uwsgi_cache_get) {
+ 
+ 	char *key = NULL;
+-	int keylen = 0;
++	php_strlen_size keylen = 0;
+ 	char *cache = NULL;
+-	int cachelen = 0;
++	php_strlen_size cachelen = 0;
+ 	uint64_t valsize;
+ 
+ 	if (!uwsgi.caches)
+ 		RETURN_NULL();
+ 
+-	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &key, &keylen, &cache, &cachelen) == FAILURE) {
++	if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|s", &key, &keylen, &cache, &cachelen) == FAILURE) {
+                 RETURN_NULL();
+         }
+ 
+@@ -354,28 +354,24 @@ PHP_FUNCTION(uwsgi_cache_get) {
+ 	if (value) {
+ 		char *ret = estrndup(value, valsize);
+ 		free(value);
+-#ifdef UWSGI_PHP7
+ 		RETURN_STRING(ret);
+-#else
+-		RETURN_STRING(ret, 0);
+-#endif
+ 	}
+ 	RETURN_NULL();
+ }
+ 
+ PHP_FUNCTION(uwsgi_cache_set) {
+ 	char *key = NULL;	
+-	int keylen;
++	php_strlen_size keylen = 0;
+ 	char *value = NULL;
+-	int vallen;
+-	uint64_t expires = 0;
++	php_strlen_size vallen = 0;
++	php_long_size expires = 0;
+ 	char *cache = NULL;
+-	int cachelen = 0;
++	php_strlen_size cachelen = 0;
+ 
+ 	if (!uwsgi.caches)
+ 		RETURN_NULL();
+ 
+-	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|ls", &key, &keylen, &value, &vallen, &expires, &cache, &cachelen) == FAILURE) {
++	if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|ls", &key, &keylen, &value, &vallen, &expires, &cache, &cachelen) == FAILURE) {
+                 RETURN_NULL();
+         }
+ 
+@@ -388,17 +384,17 @@ PHP_FUNCTION(uwsgi_cache_set) {
+ 
+ PHP_FUNCTION(uwsgi_cache_update) {
+         char *key = NULL;
+-        int keylen;
++        php_strlen_size keylen = 0;
+         char *value = NULL;
+-        int vallen;
+-        uint64_t expires = 0;
++        php_strlen_size vallen = 0;
++        php_long_size expires = 0;
+         char *cache = NULL;
+-        int cachelen = 0;
++        php_strlen_size cachelen = 0;
+ 
+         if (!uwsgi.caches)
+                 RETURN_NULL();
+ 
+-        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|ls", &key, &keylen, &value, &vallen, &expires, &cache, &cachelen) == FAILURE) {
++        if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|ls", &key, &keylen, &value, &vallen, &expires, &cache, &cachelen) == FAILURE) {
+                 RETURN_NULL();
+         }
+ 
+@@ -423,7 +419,7 @@ PHP_FUNCTION(uwsgi_rpc) {
+         uint16_t argvs[256];
+ 	uint64_t size = 0;
+ 
+-	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "+", &varargs, &num_args) == FAILURE) {
++	if (zend_parse_parameters(ZEND_NUM_ARGS(), "+", &varargs, &num_args) == FAILURE) {
+ 		RETURN_NULL();
+ 	}
+ 
+@@ -462,11 +458,7 @@ PHP_FUNCTION(uwsgi_rpc) {
+ 		// here we do not free varargs for performance reasons
+ 		char *ret = estrndup(response, size);
+ 		free(response);
+-#ifdef UWSGI_PHP7
+ 		RETURN_STRING(ret);
+-#else
+-		RETURN_STRING(ret, 0);
+-#endif
+         }
+ 
+ clear:
+@@ -481,7 +473,7 @@ PHP_FUNCTION(uwsgi_setprocname) {
+ 	char *name;
+ 	int name_len;
+ 
+-	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) {
++	if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &name, &name_len) == FAILURE) {
+ 		RETURN_NULL();
+ 	}
+ 
+@@ -495,7 +487,7 @@ PHP_FUNCTION(uwsgi_signal) {
+ 	long long_signum;
+ 	uint8_t signum = 0;
+ 
+-        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &long_signum) == FAILURE) {
++        if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &long_signum) == FAILURE) {
+                 RETURN_NULL();
+         }
+ 
+@@ -629,10 +621,12 @@ static int php_uwsgi_startup(sapi_module_struct *sapi_module)
+ 	}
+ }
+ 
+-#if ((PHP_MAJOR_VERSION >= 7) && (PHP_MINOR_VERSION >= 1))
++#if (PHP_MAJOR_VERSION >= 8)
++static void sapi_uwsgi_log_message(const char *message, int syslog_type_int) {
++#elif ((PHP_MAJOR_VERSION == 7) && (PHP_MINOR_VERSION >= 1))
+ static void sapi_uwsgi_log_message(char *message, int syslog_type_int) {
+ #else
+-static void sapi_uwsgi_log_message(char *message TSRMLS_DC) {
++static void sapi_uwsgi_log_message(char *message) {
+ #endif
+ 	uwsgi_log("%s\n", message);
+ }
+@@ -668,16 +662,32 @@ static sapi_module_struct uwsgi_sapi_module = {
+ 	STANDARD_SAPI_MODULE_PROPERTIES
+ };
+ 
+-int uwsgi_php_init(void) {
++static void uwsgi_php_init_mount(struct uwsgi_dyn_dict *mount_dict) {
++	struct uwsgi_dyn_dict *udd = mount_dict;
++	while (udd) {
++		char *orig_dest = udd->value;
++		udd->value = uwsgi_expand_path(udd->value, udd->vallen, NULL);
++		udd->vallen = strlen(udd->value);
++		if (!udd->value) {
++			uwsgi_log("Unable to expand php mountpoint to %s\n", orig_dest);
++			exit(1);
++		}
++		udd = udd->next;
++	}
++}
++
++static int uwsgi_php_init(void) {
+ 
+ 	struct uwsgi_string_list *pset = uphp.set;
+ 	struct uwsgi_string_list *append_config = uphp.append_config;
+ 
++	if (!uphp.sapi_initialized) {
+ #ifdef ZTS
+-        tsrm_startup(1, 1, 0, NULL);
++        	tsrm_startup(1, 1, 0, NULL);
+ #endif
+-
+-	sapi_startup(&uwsgi_sapi_module);
++		sapi_startup(&uwsgi_sapi_module);
++		uphp.sapi_initialized = 1;
++	}
+ 
+ 	// applying custom options
+ 	while(append_config) {
+@@ -705,13 +715,14 @@ int uwsgi_php_init(void) {
+ 			uwsgi_log("unable to set php docroot to %s\n", orig_docroot);
+ 			exit(1);
+ 		}
+-		uwsgi_log("PHP document root set to %s\n", uphp.docroot);
+-		uphp.docroot_len = strlen(uphp.docroot);
+ 	}
+ 
++	uwsgi_php_init_mount(uphp.mountpoint);
++
+ 	if (uphp.sapi_name) {
+ 		uwsgi_sapi_module.name = uphp.sapi_name;
+ 	}
++
+ 	uwsgi_sapi_module.startup(&uwsgi_sapi_module);
+ 	uwsgi_log("PHP %s initialized\n", PHP_VERSION);
+ 
+@@ -776,6 +787,33 @@ int uwsgi_php_walk(struct wsgi_request *wsgi_req, char *full_path, char *docroot
+ 
+ }
+ 
++static char *uwsgi_php_get_mount(char *path_info, uint16_t path_info_len, struct uwsgi_dyn_dict *mount_dict, int *discard_base) {
++	int best_found = 0;
++	struct uwsgi_dyn_dict *udd = mount_dict, *chosen = NULL;
++
++	while (udd) {
++		if (mount_dict->vallen) {
++			if (!uwsgi_starts_with(path_info, path_info_len, udd->key, udd->keylen)) {
++				if (udd->keylen > best_found) {
++					best_found = udd->keylen;
++					chosen = udd;
++				}
++			}
++		}
++		udd = udd->next;
++	}
++
++	if (chosen) {
++		*discard_base = chosen->keylen;
++		if (chosen->key[chosen->keylen-1] == '/') {
++			*discard_base = *discard_base - 1;
++		}
++		return chosen->value;
++	} else {
++		return NULL;
++	}
++}
++
+ 
+ int uwsgi_php_request(struct wsgi_request *wsgi_req) {
+ 
+@@ -788,10 +826,6 @@ int uwsgi_php_request(struct wsgi_request *wsgi_req) {
+ 
+ 	zend_file_handle file_handle;
+ 
+-#ifdef ZTS
+-	TSRMLS_FETCH();
+-#endif
+-
+ 	SG(server_context) = (void *) wsgi_req;
+ 
+ 	if (uwsgi_parse_vars(wsgi_req)) {
+@@ -801,7 +835,15 @@ int uwsgi_php_request(struct wsgi_request *wsgi_req) {
+ 	char *orig_path_info = wsgi_req->path_info;
+ 	uint16_t orig_path_info_len = wsgi_req->path_info_len;
+ 
+-	if (uphp.docroot) {
++	int discard_base = 0;
++
++	char *mount_docroot = uwsgi_php_get_mount(wsgi_req->path_info, wsgi_req->path_info_len, uphp.mountpoint, &discard_base);
++
++	if (mount_docroot) {
++		wsgi_req->document_root = mount_docroot;
++		wsgi_req->path_info = wsgi_req->path_info+discard_base;
++		wsgi_req->path_info_len = wsgi_req->path_info_len-discard_base;
++	} else if (uphp.docroot) {
+ 		wsgi_req->document_root = uphp.docroot;
+ 	}
+ 	// fallback to cwd
+@@ -833,7 +875,8 @@ int uwsgi_php_request(struct wsgi_request *wsgi_req) {
+                 }
+ #endif
+ 
+-		strcpy(real_filename, uphp.app);	
++		strncpy(real_filename, uphp.app, PATH_MAX);
++		real_filename[PATH_MAX-1] = '\0';
+ 		if (wsgi_req->path_info_len == 1 && wsgi_req->path_info[0] == '/') {
+ 			goto appready;
+ 		}
+@@ -926,7 +969,6 @@ oldstyle:
+ 	free(filename);
+ 	real_filename_len = strlen(real_filename);
+ 
+-	// first check for valid doc roots
+ 	if (uphp.allowed_docroot) {
+ 		struct uwsgi_string_list *usl = uphp.allowed_docroot;
+ 		while(usl) {
+@@ -939,16 +981,6 @@ oldstyle:
+ 		uwsgi_log("PHP security error: %s is not under an allowed docroot\n", real_filename);
+ 		return -1;
+ 	}
+-	// then for default docroot (if any)
+-	else if (uphp.docroot)
+-	{
+-		if (!uwsgi_starts_with(real_filename, real_filename_len, uphp.docroot, uphp.docroot_len)) {
+-			goto secure;
+-		}
+-		uwsgi_403(wsgi_req);
+-		uwsgi_log("PHP security error: %s is not under the default docroot\n", real_filename);
+-		return -1;
+-	}
+ 
+ secure:
+ 
+@@ -1065,7 +1097,7 @@ secure3:
+         file_handle.type = ZEND_HANDLE_FILENAME;
+         file_handle.filename = real_filename;
+ 
+-        if (php_request_startup(TSRMLS_C) == FAILURE) {
++        if (php_request_startup() == FAILURE) {
+ 		uwsgi_500(wsgi_req);
+                 return -1;
+         }
+@@ -1073,13 +1105,13 @@ secure3:
+ 	struct uwsgi_string_list *usl=NULL;
+ 
+ 	uwsgi_foreach(usl, uphp.exec_before) {
+-		if (zend_eval_string_ex(usl->value, NULL, "uWSGI php exec before", 1 TSRMLS_CC) == FAILURE) goto end;
++		if (zend_eval_string_ex(usl->value, NULL, "uWSGI php exec before", 1) == FAILURE) goto end;
+ 	}
+ 
+-        php_execute_script(&file_handle TSRMLS_CC);
++        php_execute_script(&file_handle);
+ 
+ 	uwsgi_foreach(usl, uphp.exec_after) {
+-		if (zend_eval_string_ex(usl->value, NULL, "uWSGI php exec after", 1 TSRMLS_CC) == FAILURE) goto end;
++		if (zend_eval_string_ex(usl->value, NULL, "uWSGI php exec after", 1) == FAILURE) goto end;
+ 	}
+ 
+ end:
+diff --git c/plugins/php/session.c w/plugins/php/session.c
+index 2312b6b9..cce06985 100644
+--- c/plugins/php/session.c
++++ w/plugins/php/session.c
+@@ -12,34 +12,20 @@ PS_CLOSE_FUNC(uwsgi) {
+ PS_READ_FUNC(uwsgi) {
+ 	char *cache = PS_GET_MOD_DATA();
+ 	uint64_t valsize = 0;
+-#ifdef UWSGI_PHP7
+ 	char *value = uwsgi_cache_magic_get(key->val, key->len , &valsize, NULL, cache);
+-#else
+-	char *value = uwsgi_cache_magic_get((char *)key, strlen((char *)key), &valsize, NULL, cache);
+-#endif
+-        if (!value) return FAILURE;
+-#ifdef UWSGI_PHP7
++	if (!value) {
++		*val = STR_EMPTY_ALLOC();
++		return SUCCESS;
++	}
+ 	*val = zend_string_init(value, valsize, 0);
+-#else
+-	char *new_val = emalloc(valsize);
+-	memcpy(new_val, value, valsize);
+-	free(value);
+-	*val = new_val;
+-	*vallen = valsize;
+-#endif
+ 	return SUCCESS;
+ 	
+ }
+ 
+ PS_WRITE_FUNC(uwsgi) {
+ 	char *cache = PS_GET_MOD_DATA();
+-#ifdef UWSGI_PHP7
+ 	if (val->len == 0) return SUCCESS;
+ 	if (!uwsgi_cache_magic_set(key->val, key->len, val->val, val->len, 0, UWSGI_CACHE_FLAG_UPDATE, cache)) {
+-#else
+-	if (vallen == 0) return SUCCESS;
+-	if (!uwsgi_cache_magic_set((char *)key, strlen(key), (char *)val, vallen, 0, UWSGI_CACHE_FLAG_UPDATE, cache)) {
+-#endif
+ 		return SUCCESS;	
+ 	}
+ 	return FAILURE;
+@@ -47,11 +33,10 @@ PS_WRITE_FUNC(uwsgi) {
+ 
+ PS_DESTROY_FUNC(uwsgi) {
+ 	char *cache = PS_GET_MOD_DATA();
+-#ifdef UWSGI_PHP7
++	if (!uwsgi_cache_magic_exists(key->val, key->len, cache))
++		return SUCCESS;
++
+ 	if (!uwsgi_cache_magic_del(key->val, key->len, cache)) {
+-#else
+-	if (!uwsgi_cache_magic_del((char *)key, strlen(key), cache)) {
+-#endif
+ 		return SUCCESS;
+ 	}
+ 	return FAILURE;
+diff --git c/plugins/php/uwsgiplugin.py w/plugins/php/uwsgiplugin.py
+index d930c44e..8657eb70 100644
+--- c/plugins/php/uwsgiplugin.py
++++ w/plugins/php/uwsgiplugin.py
+@@ -1,6 +1,6 @@
+ import os
+ 
+-NAME='php'
++NAME = 'php'
+ 
+ ld_run_path = None
+ PHPPATH = 'php-config'

Deleted: uwsgi.install
===================================================================
--- uwsgi.install	2021-02-27 12:40:19 UTC (rev 874910)
+++ uwsgi.install	2021-02-27 12:41:32 UTC (rev 874911)
@@ -1,9 +0,0 @@
-post_update(){
-    echo "To use uwsgi at .socket and uwsgi at .service:"
-    echo "\tAll you need to do is put the name of your .ini file after the @ sign"
-    echo "\tYou can use either the .socket or .service, but if you use the .socket"
-    echo "\tuwsgi@<sameinifile>.service won't be started until the first time your http"
-    echo "\tserver touches the socket. You will also not need to specify the socket in"
-    echo "\tthe .ini file or in the .service file.  Systemd will handle listening to"
-    echo "\tthe socket for you."
-}

Copied: uwsgi/repos/community-testing-x86_64/uwsgi.install (from rev 874910, uwsgi/trunk/uwsgi.install)
===================================================================
--- uwsgi.install	                        (rev 0)
+++ uwsgi.install	2021-02-27 12:41:32 UTC (rev 874911)
@@ -0,0 +1,9 @@
+post_update(){
+    echo "To use uwsgi at .socket and uwsgi at .service:"
+    echo "\tAll you need to do is put the name of your .ini file after the @ sign"
+    echo "\tYou can use either the .socket or .service, but if you use the .socket"
+    echo "\tuwsgi@<sameinifile>.service won't be started until the first time your http"
+    echo "\tserver touches the socket. You will also not need to specify the socket in"
+    echo "\tthe .ini file or in the .service file.  Systemd will handle listening to"
+    echo "\tthe socket for you."
+}

Deleted: uwsgi.logrotate
===================================================================
--- uwsgi.logrotate	2021-02-27 12:40:19 UTC (rev 874910)
+++ uwsgi.logrotate	2021-02-27 12:41:32 UTC (rev 874911)
@@ -1,10 +0,0 @@
-/var/log/uwsgi/*.log /var/log/uwsgi/*/*.log {
-  copytruncate
-  daily
-  rotate 7
-  compress
-  delaycompress
-  missingok
-  notifempty
-  su root uwsgi
-}

Copied: uwsgi/repos/community-testing-x86_64/uwsgi.logrotate (from rev 874910, uwsgi/trunk/uwsgi.logrotate)
===================================================================
--- uwsgi.logrotate	                        (rev 0)
+++ uwsgi.logrotate	2021-02-27 12:41:32 UTC (rev 874911)
@@ -0,0 +1,10 @@
+/var/log/uwsgi/*.log /var/log/uwsgi/*/*.log {
+  copytruncate
+  daily
+  rotate 7
+  compress
+  delaycompress
+  missingok
+  notifempty
+  su root uwsgi
+}

Deleted: uwsgi.sysusers
===================================================================
--- uwsgi.sysusers	2021-02-27 12:40:19 UTC (rev 874910)
+++ uwsgi.sysusers	2021-02-27 12:41:32 UTC (rev 874911)
@@ -1 +0,0 @@
-g uwsgi 53 -

Copied: uwsgi/repos/community-testing-x86_64/uwsgi.sysusers (from rev 874910, uwsgi/trunk/uwsgi.sysusers)
===================================================================
--- uwsgi.sysusers	                        (rev 0)
+++ uwsgi.sysusers	2021-02-27 12:41:32 UTC (rev 874911)
@@ -0,0 +1 @@
+g uwsgi 53 -

Deleted: uwsgi.tmpfiles
===================================================================
--- uwsgi.tmpfiles	2021-02-27 12:40:19 UTC (rev 874910)
+++ uwsgi.tmpfiles	2021-02-27 12:41:32 UTC (rev 874911)
@@ -1 +0,0 @@
-d /run/uwsgi 0775 root http - - 

Copied: uwsgi/repos/community-testing-x86_64/uwsgi.tmpfiles (from rev 874910, uwsgi/trunk/uwsgi.tmpfiles)
===================================================================
--- uwsgi.tmpfiles	                        (rev 0)
+++ uwsgi.tmpfiles	2021-02-27 12:41:32 UTC (rev 874911)
@@ -0,0 +1 @@
+d /run/uwsgi 0775 root http - - 

Deleted: uwsgi_at.service
===================================================================
--- uwsgi_at.service	2021-02-27 12:40:19 UTC (rev 874910)
+++ uwsgi_at.service	2021-02-27 12:41:32 UTC (rev 874911)
@@ -1,15 +0,0 @@
-[Unit]
-Description=uWSGI service unit
-After=syslog.target
-
-[Service]
-ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/%I.ini
-ExecReload=/bin/kill -HUP $MAINPID
-ExecStop=/bin/kill -INT $MAINPID
-Restart=always
-Type=notify
-NotifyAccess=all
-KillSignal=SIGQUIT
-
-[Install]
-WantedBy=multi-user.target

Copied: uwsgi/repos/community-testing-x86_64/uwsgi_at.service (from rev 874910, uwsgi/trunk/uwsgi_at.service)
===================================================================
--- uwsgi_at.service	                        (rev 0)
+++ uwsgi_at.service	2021-02-27 12:41:32 UTC (rev 874911)
@@ -0,0 +1,15 @@
+[Unit]
+Description=uWSGI service unit
+After=syslog.target
+
+[Service]
+ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/%I.ini
+ExecReload=/bin/kill -HUP $MAINPID
+ExecStop=/bin/kill -INT $MAINPID
+Restart=always
+Type=notify
+NotifyAccess=all
+KillSignal=SIGQUIT
+
+[Install]
+WantedBy=multi-user.target

Deleted: uwsgi_at.socket
===================================================================
--- uwsgi_at.socket	2021-02-27 12:40:19 UTC (rev 874910)
+++ uwsgi_at.socket	2021-02-27 12:41:32 UTC (rev 874911)
@@ -1,9 +0,0 @@
-[Unit]
-Description=Socket for uWSGI %I
-
-[Socket]
-# Change this to your uwsgi application port or unix socket location
-ListenStream=/run/uwsgi/%I.sock
-
-[Install]
-WantedBy=sockets.target

Copied: uwsgi/repos/community-testing-x86_64/uwsgi_at.socket (from rev 874910, uwsgi/trunk/uwsgi_at.socket)
===================================================================
--- uwsgi_at.socket	                        (rev 0)
+++ uwsgi_at.socket	2021-02-27 12:41:32 UTC (rev 874911)
@@ -0,0 +1,9 @@
+[Unit]
+Description=Socket for uWSGI %I
+
+[Socket]
+# Change this to your uwsgi application port or unix socket location
+ListenStream=/run/uwsgi/%I.sock
+
+[Install]
+WantedBy=sockets.target


More information about the arch-commits mailing list