diff --git a/.gitignore b/.gitignore index cceb6ff..7951476 100644 --- a/.gitignore +++ b/.gitignore @@ -58,15 +58,3 @@ /uwsgi-docs-4e23afe.tar.gz /2.0.25.1.tar.gz /uwsgi-docs-8dcaacd.tar.gz -/2.0.26.tar.gz -/uwsgi-docs-59e6cd1.tar.gz -/2.0.27.tar.gz -/uwsgi-docs-c0f17cd.tar.gz -/2.0.28.tar.gz -/uwsgi-docs-9606cb0.tar.gz -/2.0.29.tar.gz -/uwsgi-docs-b9da5ea.tar.gz -/2.0.30.tar.gz -/uwsgi-docs-f728a25.tar.gz -/uwsgi-docs-5784c30.tar.gz -/2.0.31.tar.gz diff --git a/fedora.ini b/fedora.ini index 7c3cda6..951846b 100644 --- a/fedora.ini +++ b/fedora.ini @@ -35,6 +35,7 @@ plugins = airbrake, notfound, pam, pty, + rack, rawrouter, redislog, router_basicauth, diff --git a/sources b/sources index 6394bca..9afac1d 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -SHA512 (uwsgi-docs-5784c30.tar.gz) = 4f966da4a867e45043a0eb4a123b439c8ab1f7ce6e8b32d770545ff7fae586e4e7dd011106aa6ed0ec82a6c6192937e0fd12ed681443332205566fc329e11cd8 -SHA512 (2.0.31.tar.gz) = d4d327f36455438e165298cb5a7d483c951f4acd3d834b46ceeda105bd3664792ead226b02e06db62e92c210544778119bf75a55d9d4f30f8fba896c7de51e6d +SHA512 (2.0.25.1.tar.gz) = 3b2a78917b129f5a2f38f3538e30b132e4cd6e270df55365ccc0dc6b94641a262af1484c62b252d0a24121eb68417cb061210e89e2b7885992ab4ffa07092119 +SHA512 (uwsgi-docs-8dcaacd.tar.gz) = 03f520652becb4409e9cf5fe30a2ce5595693786a08dac9ee59e05a7ba29283dced45f2416e8ccf758b1064f3002e34d6ae9fa166af5eea5cdbc99aaaf36ec4f diff --git a/uwsgi-2.0.27-graceful-reload.patch b/uwsgi-2.0.27-graceful-reload.patch deleted file mode 100644 index dcec832..0000000 --- a/uwsgi-2.0.27-graceful-reload.patch +++ /dev/null @@ -1,41 +0,0 @@ -diff -uNr a/core/master_utils.c b/core/master_utils.c ---- a/core/master_utils.c 2024-09-23 22:05:33.000000000 +0200 -+++ b/core/master_utils.c 2024-10-14 19:57:00.233290804 +0200 -@@ -54,12 +54,6 @@ - - uwsgi_detach_daemons(); - -- for (i = 1; i <= uwsgi.numproc; i++) { -- if (uwsgi.workers[i].pid > 0) { -- waitpid(uwsgi.workers[i].pid, &waitpid_status, 0); -- } -- } -- - for (i = 0; i < ushared->gateways_cnt; i++) { - if (ushared->gateways[i].pid > 0) { - kill(ushared->gateways[i].pid, SIGKILL); -diff -uNr a/core/uwsgi.c b/core/uwsgi.c ---- a/core/uwsgi.c 2024-09-23 22:05:33.000000000 +0200 -+++ b/core/uwsgi.c 2024-10-14 19:57:00.134291181 +0200 -@@ -1319,6 +1319,8 @@ - // gracefully destroy - void gracefully_kill_them_all(int signum) { - -+ int waitpid_status; -+ - if (uwsgi_instance_is_dying) return; - uwsgi.status.gracefully_destroying = 1; - -@@ -1341,6 +1343,12 @@ - } - } - -+ -+ for (i = 1; i <= uwsgi.numproc; i++) { -+ if (uwsgi.workers[i].pid > 0) { -+ waitpid(uwsgi.workers[i].pid, &waitpid_status, 0); -+ } -+ } - uwsgi_destroy_processes(); - } - diff --git a/uwsgi.spec b/uwsgi.spec index 424e718..08f0cf4 100644 --- a/uwsgi.spec +++ b/uwsgi.spec @@ -1,5 +1,5 @@ # Documentation sources: -%global commit 5784c30866a94942a5200db4d5f6c2850afb1caa +%global commit 8dcaacd4900accea52939f5495bfffd0f7408ad1 %global shortcommit %(c=%{commit}; echo ${c:0:7}) %global docrepo uwsgi-docs @@ -26,13 +26,12 @@ %bcond_without tuntap %bcond_without zeromq %bcond_without perl -%bcond_with perlcoro +%bcond_without perlcoro %bcond_without glusterfs %bcond_without php %bcond_without pq %bcond_without gloox %bcond_without geoip -%bcond_without ruby_rack # javapackages-tools retired (apache-ivy orphanage) %bcond_with java # Fedora httpd includes mod_proxy_uwsgi @@ -58,6 +57,41 @@ #Fedora endif %endif +# Conditionally enable/disable some things in epel7 +%if 0%{?rhel} == 7 +# el7 does have java +%bcond_without java +%bcond_without python2 +%bcond_without python3 +%bcond_without python3_other +%bcond_without python3_greenlet +%bcond_without gloox +%bcond_without geoip +# This only exists on EL7 +%bcond_without tcp_wrappers +# el7 doesn't have zeromq +%bcond_with zeromq +# el7 does have python-greenlet, but only on x86_64 +%ifarch x86_64 +%bcond_without python2_greenlet +%endif +%bcond_without perl +# el7 does have perl-Coro +%bcond_without perlcoro +# el7 httpd does not include mod_proxy_uwsgi +%bcond_without mod_proxy_uwsgi +# el7 can now build glusterfs but only on x86_64 +%ifnarch x86_64 +%bcond_with glusterfs +%else +%bcond_without glusterfs +%endif +# this fails in el7 not sure why +%bcond_with gridfs +# EL7 PHP is too old +%bcond_with php +%endif + # epel8 builds pretty similar to Fedora for now %if 0%{?rhel} == 8 %bcond_without go @@ -73,7 +107,6 @@ %bcond_without pq %bcond_without gloox %bcond_without geoip -%bcond_without ruby_rack # javapackages-tools retired (apache-ivy orphanage) %bcond_with java # Fedora httpd includes mod_proxy_uwsgi @@ -115,7 +148,6 @@ %bcond_with glusterfs %bcond_without php %bcond_without pq -%bcond_without ruby_rack # EPEL9 doesn't have gloox yet %bcond_with gloox # EPEL9 doesn't have GeoIP yet @@ -143,88 +175,17 @@ %bcond_without gridfs %endif -# EL9 has multiple python3 versions -%bcond_without python3_alternate1 -%if %{with python3_alternate1} -%global python3_alternate1_pkgname python3.11 -%global __python3_alternate1 python3.11 -%global python3_alternate1_sitelib %(RPM_BUILD_ROOT= %{__python3_alternate1} -Ic "import sysconfig; print(sysconfig.get_path('purelib', vars={'platbase': '%{_prefix}', 'base': '%{_prefix}'}))") -%global python3_alternate1_version 3.11 -%global python3_alternate1_version_nodots 311 -%endif -%bcond_without python3_alternate2 -%if %{with python3_alternate2} -%global python3_alternate2_pkgname python3.12 -%global __python3_alternate2 python3.12 -%global python3_alternate2_sitelib %(RPM_BUILD_ROOT= %{__python3_alternate2} -Ic "import sysconfig; print(sysconfig.get_path('purelib', vars={'platbase': '%{_prefix}', 'base': '%{_prefix}'}))") -%global python3_alternate2_version 3.12 -%global python3_alternate2_version_nodots 312 -%endif -%bcond_without python3_alternate3 -%if %{with python3_alternate3} -%global python3_alternate3_pkgname python3.13 -%global __python3_alternate3 python3.13 -%global python3_alternate3_sitelib %(RPM_BUILD_ROOT= %{__python3_alternate3} -Ic "import sysconfig; print(sysconfig.get_path('purelib', vars={'platbase': '%{_prefix}', 'base': '%{_prefix}'}))") -%global python3_alternate3_version 3.13 -%global python3_alternate3_version_nodots 313 -%endif -#EL9 endif -%endif - -%if 0%{?rhel} == 10 -# EPEL10 does not have gcc-go -%bcond_with go -%bcond_without python3 -# EPEL10 does not have python-greenlet-devel any more -%bcond_with python3_greenlet -%bcond_without ruby19 -%bcond_without tuntap -# EPEL10 doesn't have zeromq yet -%bcond_with zeromq -%bcond_without perl -# EPEL10 doesn't have perl-Coro yet -%bcond_with perlcoro -# EPEL10 doesn't have glusterfs yet -%bcond_with glusterfs -%bcond_without php -%bcond_without pq -%bcond_without ruby_rack -# EPEL10 doesn't have gloox yet -%bcond_with gloox -# EPEL10 doesn't have GeoIP yet -%bcond_with geoip -# javapackages-tools retired (apache-ivy orphanage) -%bcond_with java -# Fedora httpd includes mod_proxy_uwsgi -# https://bugzilla.redhat.com/show_bug.cgi?id=1574335 -%bcond_with mod_proxy_uwsgi -#mono -# EPEL10 doesn't have mono yet -%ifarch %{mono_arches} -%bcond_with mono -%else -%bcond_with mono -%endif -# mongodblibs -# mongo-cxx-driver-legacy broken in rawhide rhbz#1675407 -%bcond_with mongodblibs -# v8-314 retired -%bcond_with v8 -#mongodblibs dependency -%if %{without mongodblibs} -%bcond_with gridfs -%else -%bcond_without gridfs -%endif - -# EL10 has multiple python3 versions -%bcond_without python3_alternate1 -%if %{with python3_alternate1} -%global python3_alternate1_pkgname python3.12 -%global __python3_alternate1 python3.12 -%global python3_alternate1_sitelib %(RPM_BUILD_ROOT= %{__python3_alternate1} -Ic "import sysconfig; print(sysconfig.get_path('purelib', vars={'platbase': '%{_prefix}', 'base': '%{_prefix}'}))")} -%global python3_alternate1_version 3.12 -%global python3_alternate1_version_nodots 312 +# EL9 has multiple python3 versions, but does not provide the +# convenience macros that EL7 has. Set those ourselves. +# +# This needs some serious rework after EL7 is gone. +%bcond_without python3_other +%if %{with python3_other} +%global python3_other_pkgversion 3.11 +%global __python3_other python3.11 +%global python3_other_sitelib %(RPM_BUILD_ROOT= %{__python3_other} -Ic "import sysconfig; print(sysconfig.get_path('purelib', vars={'platbase': '%{_prefix}', 'base': '%{_prefix}'}))")} +%global python3_other_version 3.11 +%global python3_other_version_nodots 311 %endif #EL9 endif %endif @@ -241,14 +202,8 @@ %if %{with python3} %global __python %{__python3} %else -%if %{with python3_alternate1} -%global __python %{__python3_alternate1} -%else -%if %{with python3_alternate2} -%global __python %{__python3_alternate2} -%else -%if %{with python3_alternate3} -%global __python %{__python3_alternate3} +%if %{with python3_other} +%global __python %{__python3_other} %else %if %{with python2} %global __python %{__python2} @@ -257,17 +212,14 @@ %endif %endif %endif -%endif -%endif Name: uwsgi -Version: 2.0.31 -Release: 5%{?dist} +Version: 2.0.25.1 +Release: 1%{?dist} Summary: Fast, self-healing, application container server # uwsgi is licensed under GPLv2 with a linking exception # docs are licensed under MIT -# Automatically converted from old format: GPLv2 with exceptions and MIT - review is highly recommended. -License: LicenseRef-Callaway-GPLv2-with-exceptions AND LicenseRef-Callaway-MIT +License: GPLv2 with exceptions and MIT URL: https://github.com/unbit/uwsgi ExcludeArch: %{ix86} @@ -279,7 +231,6 @@ Source3: emperor.ini Source4: https://github.com/unbit/%{docrepo}/archive/%{commit}/%{docrepo}-%{shortcommit}.tar.gz Source5: README.Fedora Source7: uwsgi.tmpfiles -Source8: uwsgi.sysusers # When adding patches please add to the end, don't # reuse intermediate numbers @@ -296,7 +247,6 @@ Patch14: uwsgi_python312-2.patch BuildRequires: curl, libxml2-devel, libuuid-devel, jansson-devel BuildRequires: libyaml-devel, ruby-devel -BuildRequires: libxcrypt-devel %if %{with tcp_wrappers} BuildRequires: tcp_wrappers-devel %endif @@ -312,19 +262,13 @@ BuildRequires: python%{python3_pkgversion}-devel %if %{with python3_greenlet} BuildRequires: python%{python3_pkgversion}-greenlet-devel %endif -%if %{with python3_alternate1} -BuildRequires: %{python3_alternate1_pkgname}-devel -%endif -%if %{with python3_alternate2} -BuildRequires: %{python3_alternate2_pkgname}-devel -%endif -%if %{with python3_alternate3} -BuildRequires: %{python3_alternate3_pkgname}-devel +%if %{with python3_other} +BuildRequires: python%{python3_other_pkgversion}-devel %endif %if %{with glusterfs} BuildRequires: glusterfs-devel, glusterfs-api-devel %endif -BuildRequires: lua-devel, ruby, pcre2-devel +BuildRequires: lua-devel, ruby, pcre-devel %if %{with php} BuildRequires: php-devel, php-embedded %endif @@ -387,6 +331,7 @@ Obsoletes: uwsgi-routers <= 2.0.6 Obsoletes: uwsgi-plugin-erlang <= 1.9.20-1 Obsoletes: uwsgi-plugin-admin <= 2.0.6 +Requires(pre): shadow-utils %{?systemd_requires} %filter_requires_in %{_usrsrc} @@ -443,36 +388,14 @@ The uwsgidecorators Python %{python3_version} module provides higher-level access to the uWSGI API. %endif -%if %{with python3_alternate1} -%package -n %{python3_alternate1_pkgname}-uwsgidecorators -Summary: Python %{python3_alternate1_version} decorators providing access to the uwsgi API +%if %{with python3_other} +%package -n python%{python3_other_pkgversion}-uwsgidecorators +Summary: Python %{python3_other_version} decorators providing access to the uwsgi API Requires: uwsgi = %{version}-%{release} -Requires: uwsgi-plugin-python%{python3_alternate1_version_nodots} = %{version}-%{release} +Requires: uwsgi-plugin-python%{python3_other_version_nodots} = %{version}-%{release} -%description -n %{python3_alternate1_pkgname}-uwsgidecorators -The uwsgidecorators Python %{python3_alternate1_version} module provides -higher-level access to the uWSGI API. -%endif - -%if %{with python3_alternate2} -%package -n %{python3_alternate2_pkgname}-uwsgidecorators -Summary: Python %{python3_alternate2_version} decorators providing access to the uwsgi API -Requires: uwsgi = %{version}-%{release} -Requires: uwsgi-plugin-python%{python3_alternate2_version_nodots} = %{version}-%{release} - -%description -n %{python3_alternate2_pkgname}-uwsgidecorators -The uwsgidecorators Python %{python3_alternate2_version} module provides -higher-level access to the uWSGI API. -%endif - -%if %{with python3_alternate3} -%package -n %{python3_alternate3_pkgname}-uwsgidecorators -Summary: Python %{python3_alternate3_version} decorators providing access to the uwsgi API -Requires: uwsgi = %{version}-%{release} -Requires: uwsgi-plugin-python%{python3_alternate3_version_nodots} = %{version}-%{release} - -%description -n %{python3_alternate3_pkgname}-uwsgidecorators -The uwsgidecorators Python %{python3_alternate3_version} module provides +%description -n python%{python3_other_pkgversion}-uwsgidecorators +The uwsgidecorators Python %{python3_other_version} module provides higher-level access to the uWSGI API. %endif @@ -770,14 +693,12 @@ Requires: uwsgi-plugin-common = %{version}-%{release} %description -n uwsgi-plugin-dummy This package contains the dummy plugin for uWSGI -%if %{with ruby_rack} %package -n uwsgi-plugin-fiber Summary: uWSGI - Plugin for Ruby Fiber support Requires: uwsgi-plugin-common = %{version}-%{release}, uwsgi-plugin-rack = %{version}-%{release} %description -n uwsgi-plugin-fiber This package contains the fiber plugin for uWSGI -%endif %if %{with go} %package -n uwsgi-plugin-gccgo @@ -817,31 +738,13 @@ Requires: uwsgi-plugin-python%{python3_pkgversion} = %{version}-%{release} This package contains the Python %{python3_version} gevent plugin for uWSGI %endif -%if %{with python3_alternate1} -%package -n uwsgi-plugin-python%{python3_alternate1_version_nodots}-gevent -Summary: uWSGI - Plugin for Python %{python3_alternate1_version} GEvent support -Requires: uwsgi-plugin-python%{python3_alternate1_version_nodots} = %{version}-%{release}, libevent +%if %{with python3_other} +%package -n uwsgi-plugin-python%{python3_other_version_nodots}-gevent +Summary: uWSGI - Plugin for Python %{python3_other_version} GEvent support +Requires: uwsgi-plugin-python%{python3_other_version_nodots} = %{version}-%{release}, libevent -%description -n uwsgi-plugin-python%{python3_alternate1_version_nodots}-gevent -This package contains the Python %{python3_alternate1_version} gevent plugin for uWSGI -%endif - -%if %{with python3_alternate2} -%package -n uwsgi-plugin-python%{python3_alternate2_version_nodots}-gevent -Summary: uWSGI - Plugin for Python %{python3_alternate2_version} GEvent support -Requires: uwsgi-plugin-python%{python3_alternate2_version_nodots} = %{version}-%{release}, libevent - -%description -n uwsgi-plugin-python%{python3_alternate2_version_nodots}-gevent -This package contains the Python %{python3_alternate2_version} gevent plugin for uWSGI -%endif - -%if %{with python3_alternate3} -%package -n uwsgi-plugin-python%{python3_alternate3_version_nodots}-gevent -Summary: uWSGI - Plugin for Python %{python3_alternate3_version} GEvent support -Requires: uwsgi-plugin-python%{python3_alternate3_version_nodots} = %{version}-%{release}, libevent - -%description -n uwsgi-plugin-python%{python3_alternate3_version_nodots}-gevent -This package contains the Python %{python3_alternate3_version} gevent plugin for uWSGI +%description -n uwsgi-plugin-python%{python3_other_version_nodots}-gevent +This package contains the Python %{python3_other_version} gevent plugin for uWSGI %endif %if %{with glusterfs} @@ -994,41 +897,21 @@ Provides: uwsgi-plugin-python3 = %{version}-%{release} This package contains the Python %{python3_version} plugin for uWSGI %endif -%if %{with python3_alternate1} -%package -n uwsgi-plugin-python%{python3_alternate1_version_nodots} -Summary: uWSGI - Plugin for Python %{python3_alternate1_version} support -Requires: %{python3_alternate1_pkgname}, uwsgi-plugin-common = %{version}-%{release} +%if %{with python3_other} +%package -n uwsgi-plugin-python%{python3_other_version_nodots} +Summary: uWSGI - Plugin for Python %{python3_other_version} support +Requires: python%{python3_other_pkgversion}, uwsgi-plugin-common = %{version}-%{release} -%description -n uwsgi-plugin-python%{python3_alternate1_version_nodots} -This package contains the Python %{python3_alternate1_version} plugin for uWSGI +%description -n uwsgi-plugin-python%{python3_other_version_nodots} +This package contains the Python %{python3_other_version} plugin for uWSGI %endif -%if %{with python3_alternate2} -%package -n uwsgi-plugin-python%{python3_alternate2_version_nodots} -Summary: uWSGI - Plugin for Python %{python3_alternate2_version} support -Requires: %{python3_alternate2_pkgname}, uwsgi-plugin-common = %{version}-%{release} - -%description -n uwsgi-plugin-python%{python3_alternate2_version_nodots} -This package contains the Python %{python3_alternate2_version} plugin for uWSGI -%endif - -%if %{with python3_alternate3} -%package -n uwsgi-plugin-python%{python3_alternate3_version_nodots} -Summary: uWSGI - Plugin for Python %{python3_alternate3_version} support -Requires: %{python3_alternate3_pkgname}, uwsgi-plugin-common = %{version}-%{release} - -%description -n uwsgi-plugin-python%{python3_alternate3_version_nodots} -This package contains the Python %{python3_alternate3_version} plugin for uWSGI -%endif - -%if %{with ruby_rack} %package -n uwsgi-plugin-rack Summary: uWSGI - Ruby rack plugin Requires: rubygem-rack, uwsgi-plugin-common = %{version}-%{release} %description -n uwsgi-plugin-rack This package contains the rack plugin for uWSGI -%endif %package -n uwsgi-plugin-rbthreads Summary: uWSGI - Ruby native threads support plugin @@ -1397,17 +1280,9 @@ CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python3} uwsgiconfig.py -- CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python3} uwsgiconfig.py --verbose --plugin plugins/gevent fedora python%{python3_pkgversion}_gevent CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python3} uwsgiconfig.py --verbose --plugin plugins/tornado fedora python%{python3_pkgversion}_tornado %endif -%if %{with python3_alternate1} -CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python3_alternate1} uwsgiconfig.py --verbose --plugin plugins/python fedora python%{python3_alternate1_version_nodots} -CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python3_alternate1} uwsgiconfig.py --verbose --plugin plugins/gevent fedora python%{python3_alternate1_version_nodots}_gevent -%endif -%if %{with python3_alternate2} -CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python3_alternate2} uwsgiconfig.py --verbose --plugin plugins/python fedora python%{python3_alternate2_version_nodots} -CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python3_alternate2} uwsgiconfig.py --verbose --plugin plugins/gevent fedora python%{python3_alternate2_version_nodots}_gevent -%endif -%if %{with python3_alternate3} -CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python3_alternate3} uwsgiconfig.py --verbose --plugin plugins/python fedora python%{python3_alternate3_version_nodots} -CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python3_alternate3} uwsgiconfig.py --verbose --plugin plugins/gevent fedora python%{python3_alternate3_version_nodots}_gevent +%if %{with python3_other} +CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python3_other} uwsgiconfig.py --verbose --plugin plugins/python fedora python%{python3_other_version_nodots} +CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python3_other} uwsgiconfig.py --verbose --plugin plugins/gevent fedora python%{python3_other_version_nodots}_gevent %endif %if %{with mongodblibs} CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python} uwsgiconfig.py --verbose --plugin plugins/mongodblog fedora @@ -1433,9 +1308,7 @@ CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python} uwsgiconfig.py --v %endif %endif %if %{with ruby19} -%if %{with ruby_rack} CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python} uwsgiconfig.py --verbose --plugin plugins/fiber fedora -%endif CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python} uwsgiconfig.py --verbose --plugin plugins/rbthreads fedora %endif %if %{with tuntap} @@ -1475,9 +1348,6 @@ CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python} uwsgiconfig.py --v %if %{with geoip} CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python} uwsgiconfig.py --verbose --plugin plugins/geoip fedora %endif -%if %{with ruby_rack} -CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python} uwsgiconfig.py --verbose --plugin plugins/rack fedora -%endif %if %{with tcp_wrappers} CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python} uwsgiconfig.py --verbose --plugin plugins/router_access fedora %endif @@ -1521,22 +1391,10 @@ install -D -p -m 0644 uwsgidecorators.py %{buildroot}%{python3_sitelib}/uwsgidec %py_byte_compile %{__python3} %{buildroot}%{python3_sitelib}/uwsgidecorators.py %endif %endif -%if %{with python3_alternate1} -install -D -p -m 0644 uwsgidecorators.py %{buildroot}%{python3_alternate1_sitelib}/uwsgidecorators.py +%if %{with python3_other} +install -D -p -m 0644 uwsgidecorators.py %{buildroot}%{python3_other_sitelib}/uwsgidecorators.py %if %{manual_py_compile} == 1 -%py_byte_compile %{__python3_alternate1} %{buildroot}%{python3_alternate1_sitelib}/uwsgidecorators.py -%endif -%endif -%if %{with python3_alternate2} -install -D -p -m 0644 uwsgidecorators.py %{buildroot}%{python3_alternate2_sitelib}/uwsgidecorators.py -%if %{manual_py_compile} == 1 -%py_byte_compile %{__python3_alternate2} %{buildroot}%{python3_alternate2_sitelib}/uwsgidecorators.py -%endif -%endif -%if %{with python3_alternate3} -install -D -p -m 0644 uwsgidecorators.py %{buildroot}%{python3_alternate3_sitelib}/uwsgidecorators.py -%if %{manual_py_compile} == 1 -%py_byte_compile %{__python3_alternate3} %{buildroot}%{python3_alternate3_sitelib}/uwsgidecorators.py +%py_byte_compile %{__python3_other} %{buildroot}%{python3_other_sitelib}/uwsgidecorators.py %endif %endif %if %{with java} @@ -1552,7 +1410,13 @@ install -D -p -m 0644 %{SOURCE7} %{buildroot}%{_tmpfilesdir}/uwsgi.conf install -D -p -m 0755 apache2/.libs/mod_proxy_uwsgi.so %{buildroot}%{_httpd_moddir}/mod_proxy_uwsgi.so %endif -install -m0644 -D %{SOURCE8} %{buildroot}%{_sysusersdir}/uwsgi.conf + +%pre +getent group uwsgi >/dev/null || groupadd -r uwsgi +getent passwd uwsgi >/dev/null || \ + useradd -r -g uwsgi -d /run/uwsgi -s /sbin/nologin \ + -c "uWSGI daemon user" uwsgi +exit 0 %post %systemd_post uwsgi.service @@ -1572,7 +1436,6 @@ install -m0644 -D %{SOURCE8} %{buildroot}%{_sysusersdir}/uwsgi.conf %dir %{_sysconfdir}/uwsgi.d %doc README README.Fedora CHANGELOG %license LICENSE -%{_sysusersdir}/uwsgi.conf %files -n uwsgi-devel %{_includedir}/uwsgi @@ -1589,22 +1452,10 @@ install -m0644 -D %{SOURCE8} %{buildroot}%{_sysusersdir}/uwsgi.conf %{python3_sitelib}/__pycache__/uwsgidecorators.cpython-%{python3_version_nodots}*.py* %endif -%if %{with python3_alternate1} -%files -n %{python3_alternate1_pkgname}-uwsgidecorators -%{python3_alternate1_sitelib}/uwsgidecorators.py -%{python3_alternate1_sitelib}/__pycache__/uwsgidecorators.cpython-%{python3_alternate1_version_nodots}*.py* -%endif - -%if %{with python3_alternate2} -%files -n %{python3_alternate2_pkgname}-uwsgidecorators -%{python3_alternate2_sitelib}/uwsgidecorators.py -%{python3_alternate2_sitelib}/__pycache__/uwsgidecorators.cpython-%{python3_alternate2_version_nodots}*.py* -%endif - -%if %{with python3_alternate3} -%files -n %{python3_alternate3_pkgname}-uwsgidecorators -%{python3_alternate3_sitelib}/uwsgidecorators.py -%{python3_alternate3_sitelib}/__pycache__/uwsgidecorators.cpython-%{python3_alternate3_version_nodots}*.py* +%if %{with python3_other} +%files -n python%{python3_other_pkgversion}-uwsgidecorators +%{python3_other_sitelib}/uwsgidecorators.py +%{python3_other_sitelib}/__pycache__/uwsgidecorators.cpython-%{python3_other_version_nodots}*.py* %endif %files -n uwsgi-docs @@ -1743,11 +1594,9 @@ install -m0644 -D %{SOURCE8} %{buildroot}%{_sysusersdir}/uwsgi.conf %{_libdir}/uwsgi/dummy_plugin.so %if %{with ruby19} -%if %{with ruby_rack} %files -n uwsgi-plugin-fiber %{_libdir}/uwsgi/fiber_plugin.so %endif -%endif %if %{with go} %files -n uwsgi-plugin-gccgo @@ -1769,19 +1618,9 @@ install -m0644 -D %{SOURCE8} %{buildroot}%{_sysusersdir}/uwsgi.conf %{_libdir}/uwsgi/python%{python3_pkgversion}_gevent_plugin.so %endif -%if %{with python3_alternate1} -%files -n uwsgi-plugin-python%{python3_alternate1_version_nodots}-gevent -%{_libdir}/uwsgi/python%{python3_alternate1_version_nodots}_gevent_plugin.so -%endif - -%if %{with python3_alternate2} -%files -n uwsgi-plugin-python%{python3_alternate2_version_nodots}-gevent -%{_libdir}/uwsgi/python%{python3_alternate2_version_nodots}_gevent_plugin.so -%endif - -%if %{with python3_alternate3} -%files -n uwsgi-plugin-python%{python3_alternate3_version_nodots}-gevent -%{_libdir}/uwsgi/python%{python3_alternate3_version_nodots}_gevent_plugin.so +%if %{with python3_other} +%files -n uwsgi-plugin-python%{python3_other_version_nodots}-gevent +%{_libdir}/uwsgi/python%{python3_other_version_nodots}_gevent_plugin.so %endif %if %{with glusterfs} @@ -1858,25 +1697,13 @@ install -m0644 -D %{SOURCE8} %{buildroot}%{_sysusersdir}/uwsgi.conf %{_libdir}/uwsgi/python%{python3_pkgversion}_plugin.so %endif -%if %{with python3_alternate1} -%files -n uwsgi-plugin-python%{python3_alternate1_version_nodots} -%{_libdir}/uwsgi/python%{python3_alternate1_version_nodots}_plugin.so +%if %{with python3_other} +%files -n uwsgi-plugin-python%{python3_other_version_nodots} +%{_libdir}/uwsgi/python%{python3_other_version_nodots}_plugin.so %endif -%if %{with python3_alternate2} -%files -n uwsgi-plugin-python%{python3_alternate2_version_nodots} -%{_libdir}/uwsgi/python%{python3_alternate2_version_nodots}_plugin.so -%endif - -%if %{with python3_alternate3} -%files -n uwsgi-plugin-python%{python3_alternate3_version_nodots} -%{_libdir}/uwsgi/python%{python3_alternate3_version_nodots}_plugin.so -%endif - -%if %{with ruby_rack} %files -n uwsgi-plugin-rack %{_libdir}/uwsgi/rack_plugin.so -%endif %if %{with ruby19} %files -n uwsgi-plugin-rbthreads @@ -2030,116 +1857,6 @@ install -m0644 -D %{SOURCE8} %{buildroot}%{_sysusersdir}/uwsgi.conf %changelog -* Sun Jan 11 2026 Ralf Ertzinger - 2.0.31-5 -- Rebuild for new gccgo libraries - -* Thu Jan 08 2026 Mamoru TASAKA - 2.0.31-4 -- Rebuild for https://fedoraproject.org/wiki/Changes/Ruby_4.0 - -* Wed Nov 26 2025 Ralf Ertzinger - 2.0.31-3 -- Fix path errors for EPEL9 uwsgidecorator packages - -* Wed Oct 15 2025 Remi Collet - 2.0.31-2 -- rebuild for https://fedoraproject.org/wiki/Changes/php85 - -* Sun Oct 12 2025 Ralf Ertzinger - 2.0.31-1 -- Update to 2.0.31, drop merged patches - -* Fri Sep 19 2025 Python Maint - 2.0.30-7 -- Rebuilt for Python 3.14.0rc3 bytecode - -* Tue Aug 19 2025 Ralf Ertzinger - 2.0.30-6 -- Add python3.13 module for EL9 - -* Fri Aug 15 2025 Python Maint - 2.0.30-5 -- Rebuilt for Python 3.14.0rc2 bytecode - -* Thu Jul 24 2025 Ralf Ertzinger - 2.0.30-4 -- Disable perl-Coro for rawhide, as this blocks rebuilding - for perl 5.42 (see https://bugzilla.redhat.com/show_bug.cgi?id=2379448) - -* Tue Jul 08 2025 Jitka Plesnikova - 2.0.30-3 -- Perl 5.42 rebuild - -* Mon Jun 09 2025 Python Maint - 2.0.30-2 -- Rebuilt for Python 3.14 - -* Sun Jun 08 2025 Ralf Ertzinger - 2.0.30-1 -- Update to 2.0.30 - -* Tue Jun 03 2025 Python Maint - 2.0.29-2 -- Rebuilt for Python 3.14 - -* Sat Apr 12 2025 Ralf Ertzinger - 2.0.29-1 -- Update to 2.0.29 - -* Mon Mar 24 2025 Ralf Ertzinger - 2.0.28-7 -- Rebuild for new libgo - -* Tue Feb 11 2025 Zbigniew Jędrzejewski-Szmek - 2.0.28-6 -- Add sysusers.d config file to allow rpm to create users/groups automatically - -* Sat Feb 01 2025 Björn Esser - 2.0.28-5 -- Add explicit BR: libxcrypt-devel - -* Fri Jan 24 2025 Ralf Ertzinger - 2.0.28-4 -- Fix type errors flagged by GCC15 - -* Sun Jan 19 2025 Fedora Release Engineering - 2.0.28-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Wed Jan 08 2025 Mamoru TASAKA - 2.0.28-2 -- Rebuild for https://fedoraproject.org/wiki/Changes/Ruby_3.4 - -* Sun Oct 27 2024 Ralf Ertzinger - 2.0.28-1 -- Update to 2.0.28, drop merged patches - -* Tue Oct 22 2024 Richard W.M. Jones - 2.0.27-5 -- Rebuild for Jansson 2.14 - (https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/3PYINSQGKQ4BB25NQUI2A2UCGGLAG5ND/) - -* Mon Oct 14 2024 Ralf Ertzinger - 2.0.27-4 -- Fix uWSGI auto-reloading on config change - -* Mon Oct 14 2024 Remi Collet - 2.0.27-3 -- rebuild for https://fedoraproject.org/wiki/Changes/php84 - -* Fri Sep 27 2024 Ralf Ertzinger - 2.0.27-2 -- Only build fiber plugin when rack plugin is also built - -* Tue Sep 24 2024 Ralf Ertzinger - 2.0.27-1 -- Update to 2.0.27 -- Drop merged patches -- Re-enable rack plugin for EPEL10, dependencies now present - -* Sun Sep 22 2024 Ralf Ertzinger - 2.0.26-8 -- Disable building the Ruby rack plugin for EPEL10 - -* Wed Sep 04 2024 Miroslav Suchý - 2.0.26-7 -- convert license to SPDX - -* Wed Sep 04 2024 Ralf Ertzinger - 2.0.26-6 -- Drop support for EL7 -- Add support for EL10 -- Explicitly require pcre2 (all builds already pulled this - in anyway) - -* Tue Aug 13 2024 Ralf Ertzinger - 2.0.26-5 -- Add patch for python 3.13 - -* Sat Jul 20 2024 Fedora Release Engineering - 2.0.26-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Wed Jun 12 2024 Jitka Plesnikova - 2.0.26-3 -- Perl 5.40 rebuild - -* Sat Jun 08 2024 Python Maint - 2.0.26-2 -- Rebuilt for Python 3.13 - -* Sat Jun 01 2024 Ralf Ertzinger - 2.0.26-1 -- Update to 2.0.26 -- Rework support for multiple python versions - * Tue Apr 16 2024 Ralf Ertzinger - 2.0.25.1-1 - Update to 2.0.25.1, drop merged patches - Use github.com as source for the main tarball diff --git a/uwsgi.sysusers b/uwsgi.sysusers deleted file mode 100644 index 30b5692..0000000 --- a/uwsgi.sysusers +++ /dev/null @@ -1 +0,0 @@ -u uwsgi - 'uWSGI daemon user' /run/uwsgi - diff --git a/uwsgi_gcc15-signal-handler.patch b/uwsgi_gcc15-signal-handler.patch deleted file mode 100644 index a36dc99..0000000 --- a/uwsgi_gcc15-signal-handler.patch +++ /dev/null @@ -1,33 +0,0 @@ -diff -uNr a/plugins/pty/pty.c b/plugins/pty/pty.c ---- a/plugins/pty/pty.c 2024-10-26 11:59:26.000000000 +0200 -+++ b/plugins/pty/pty.c 2025-01-24 20:04:55.952597269 +0100 -@@ -259,7 +259,7 @@ - - } - --static void uwsgi_pty_winch() { -+static void uwsgi_pty_winch(int signum) { - // 2 uwsgi packets - char uwsgi_pkt[8]; - #ifdef TIOCGWINSZ -@@ -309,7 +309,7 @@ - if (upty.uremote) { - signal(SIGWINCH, uwsgi_pty_winch); - // send current terminal size -- uwsgi_pty_winch(); -+ uwsgi_pty_winch(0); - } - - upty.queue = event_queue_init(); -diff -uNr a/plugins/tuntap/tuntap.c b/plugins/tuntap/tuntap.c ---- a/plugins/tuntap/tuntap.c 2024-10-26 11:59:26.000000000 +0200 -+++ b/plugins/tuntap/tuntap.c 2025-01-24 20:33:49.513449322 +0100 -@@ -409,7 +409,7 @@ - } - } - --static void uwsgi_tuntap_router() { -+static void uwsgi_tuntap_router(int (*_)(void *), char ** __) { - - if (!utt.routers) return; - diff --git a/uwsgi_python313.patch b/uwsgi_python313.patch deleted file mode 100644 index 6031408..0000000 --- a/uwsgi_python313.patch +++ /dev/null @@ -1,193 +0,0 @@ -diff -uNr a/core/init.c b/core/init.c ---- a/core/init.c 2024-06-01 20:40:38.000000000 +0200 -+++ b/core/init.c 2024-08-13 09:56:13.152870522 +0200 -@@ -432,8 +432,8 @@ - uwsgi.cores = uwsgi.async; - } - -+ uwsgi.has_threads = 1; - if (uwsgi.threads > 1) { -- uwsgi.has_threads = 1; - uwsgi.cores = uwsgi.threads; - } - -diff -uNr a/core/uwsgi.c b/core/uwsgi.c ---- a/core/uwsgi.c 2024-06-01 20:40:38.000000000 +0200 -+++ b/core/uwsgi.c 2024-08-13 09:56:13.156870522 +0200 -@@ -197,7 +197,7 @@ - {"freebind", no_argument, 0, "put socket in freebind mode", uwsgi_opt_true, &uwsgi.freebind, 0}, - #endif - {"map-socket", required_argument, 0, "map sockets to specific workers", uwsgi_opt_add_string_list, &uwsgi.map_socket, 0}, -- {"enable-threads", no_argument, 'T', "enable threads", uwsgi_opt_true, &uwsgi.has_threads, 0}, -+ {"enable-threads", no_argument, 'T', "enable threads (stub option this is true by default)", uwsgi_opt_true, &uwsgi.has_threads, 0}, - {"no-threads-wait", no_argument, 0, "do not wait for threads cancellation on quit/reload", uwsgi_opt_true, &uwsgi.no_threads_wait, 0}, - - {"auto-procname", no_argument, 0, "automatically set processes name to something meaningful", uwsgi_opt_true, &uwsgi.auto_procname, 0}, -diff -uNr a/.github/workflows/test.yml b/.github/workflows/test.yml ---- a/.github/workflows/test.yml 2024-06-01 20:40:38.000000000 +0200 -+++ b/.github/workflows/test.yml 2024-08-13 09:56:13.152870522 +0200 -@@ -37,7 +37,7 @@ - runs-on: ubuntu-20.04 - strategy: - matrix: -- python-version: ["2.7", "3.6", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12"] -+ python-version: ["2.7", "3.6", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] - test-suite: [python, deadlocks] - steps: - - name: Add deadnakes ppa -diff -uNr a/plugins/python/python_plugin.c b/plugins/python/python_plugin.c ---- a/plugins/python/python_plugin.c 2024-08-13 09:55:30.374870522 +0200 -+++ b/plugins/python/python_plugin.c 2024-08-13 10:00:36.315870522 +0200 -@@ -406,7 +406,7 @@ - // reset python signal flags so child processes can trap signals - // Necessary if uwsgi fork hooks not called to update interpreter state - if (!up.call_uwsgi_fork_hooks && up.call_osafterfork) { --#ifdef HAS_NOT_PyOS_AfterFork_Child -+#ifdef HAS_NOT_PYOS_FORK_STABLE_API - PyOS_AfterFork(); - #else - PyOS_AfterFork_Child(); -@@ -1340,11 +1340,10 @@ - // Acquire the gil and import lock before forking in order to avoid - // deadlocks in workers - UWSGI_GET_GIL --#if defined UWSGI_PY312 -- PyInterpreterState *interp = PyInterpreterState_Get(); -- _PyImport_AcquireLock(interp); --#else -+#ifdef HAS_NOT_PYOS_FORK_STABLE_API - _PyImport_AcquireLock(); -+#else -+ PyOS_BeforeFork(); - #endif - } - } -@@ -1357,17 +1356,16 @@ - if (uwsgi.has_threads) { - if (step == 0) { - // Release locks within master process --#if defined UWSGI_PY312 -- PyInterpreterState *interp = PyInterpreterState_Get(); -- _PyImport_ReleaseLock(interp); --#else -+#ifdef HAS_NOT_PYOS_FORK_STABLE_API - _PyImport_ReleaseLock(); -+#else -+ PyOS_AfterFork_Parent(); - #endif - UWSGI_RELEASE_GIL - } - else { - // Ensure thread state and locks are cleaned up in child process --#ifdef HAS_NOT_PyOS_AfterFork_Child -+#ifdef HAS_NOT_PYOS_FORK_STABLE_API - PyOS_AfterFork(); - #else - PyOS_AfterFork_Child(); -@@ -1618,7 +1616,11 @@ - PyGILState_Release(pgst); - - if (wsgi_req) { --#ifdef UWSGI_PY312 -+#ifdef UWSGI_PY313 -+ up.current_c_recursion_remaining[wsgi_req->async_id] = tstate->c_recursion_remaining; -+ up.current_py_recursion_remaining[wsgi_req->async_id] = tstate->py_recursion_remaining; -+ up.current_frame[wsgi_req->async_id] = tstate->current_frame; -+#elif defined UWSGI_PY312 - up.current_c_recursion_remaining[wsgi_req->async_id] = tstate->c_recursion_remaining; - up.current_py_recursion_remaining[wsgi_req->async_id] = tstate->py_recursion_remaining; - up.current_frame[wsgi_req->async_id] = tstate->cframe; -@@ -1631,7 +1633,11 @@ - #endif - } - else { --#ifdef UWSGI_PY312 -+#ifdef UWSGI_PY313 -+ up.current_main_c_recursion_remaining = tstate->c_recursion_remaining; -+ up.current_main_py_recursion_remaining = tstate->py_recursion_remaining; -+ up.current_main_frame = tstate->current_frame; -+#elif defined UWSGI_PY312 - up.current_main_c_recursion_remaining = tstate->c_recursion_remaining; - up.current_main_py_recursion_remaining = tstate->py_recursion_remaining; - up.current_main_frame = tstate->cframe; -@@ -1871,7 +1877,11 @@ - PyGILState_Release(pgst); - - if (wsgi_req) { --#ifdef UWSGI_PY312 -+#ifdef UWSGI_PY313 -+ tstate->c_recursion_remaining = up.current_c_recursion_remaining[wsgi_req->async_id]; -+ tstate->py_recursion_remaining = up.current_py_recursion_remaining[wsgi_req->async_id]; -+ tstate->current_frame = up.current_frame[wsgi_req->async_id]; -+#elif defined UWSGI_PY312 - tstate->c_recursion_remaining = up.current_c_recursion_remaining[wsgi_req->async_id]; - tstate->py_recursion_remaining = up.current_py_recursion_remaining[wsgi_req->async_id]; - tstate->cframe = up.current_frame[wsgi_req->async_id]; -@@ -1884,7 +1894,11 @@ - #endif - } - else { --#ifdef UWSGI_PY312 -+#ifdef UWSGI_PY313 -+ tstate->c_recursion_remaining = up.current_main_c_recursion_remaining; -+ tstate->py_recursion_remaining = up.current_main_py_recursion_remaining; -+ tstate->current_frame = up.current_main_frame; -+#elif defined UWSGI_PY312 - tstate->c_recursion_remaining = up.current_main_c_recursion_remaining; - tstate->py_recursion_remaining = up.current_main_py_recursion_remaining; - tstate->cframe = up.current_main_frame; -@@ -2098,7 +2112,7 @@ - // ensure signals can be used again from python - // Necessary if fork hooks have been not used to update interpreter state - if (!up.call_osafterfork && !up.call_uwsgi_fork_hooks) --#ifdef HAS_NOT_PyOS_AfterFork_Child -+#ifdef HAS_NOT_PYOS_FORK_STABLE_API - PyOS_AfterFork(); - #else - PyOS_AfterFork_Child(); -diff -uNr a/plugins/python/uwsgi_python.h b/plugins/python/uwsgi_python.h ---- a/plugins/python/uwsgi_python.h 2024-06-01 20:40:38.000000000 +0200 -+++ b/plugins/python/uwsgi_python.h 2024-08-13 10:04:58.492870522 +0200 -@@ -25,6 +25,10 @@ - # define UWSGI_PY312 - #endif - -+#if (PY_VERSION_HEX >= 0x030d0000) -+# define UWSGI_PY313 -+#endif -+ - #if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION < 7 - #define HAS_NOT_PyMemoryView_FromBuffer - #endif -@@ -41,12 +45,8 @@ - #define HAS_NO_ERRORS_IN_PyFile_FromFd - #endif - --#if PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION < 7 --#define HAS_NOT_PyOS_AfterFork_Child --#endif -- --#if PY_MAJOR_VERSION < 3 --#define HAS_NOT_PyOS_AfterFork_Child -+#if (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION < 7) || PY_MAJOR_VERSION < 3 -+#define HAS_NOT_PYOS_FORK_STABLE_API - #endif - - #if PY_MAJOR_VERSION > 2 -@@ -172,7 +172,15 @@ - - char *callable; - --#ifdef UWSGI_PY312 -+#ifdef UWSGI_PY313 -+ int *current_c_recursion_remaining; -+ int *current_py_recursion_remaining; -+ struct _PyInterpreterFrame **current_frame; -+ -+ int current_main_c_recursion_remaining; -+ int current_main_py_recursion_remaining; -+ struct _PyInterpreterFrame *current_main_frame; -+#elif defined UWSGI_PY312 - int *current_c_recursion_remaining; - int *current_py_recursion_remaining; - _PyCFrame **current_frame;