Hello, Please note that this comment was generated automatically. If you feel that this output has mistakes, please contact me via email (mhroncok). Your package (uwsgi) Fails To Install in Fedora 37: can't install python3-uwsgidecorators: - nothing provides python(abi) = 3.10 needed by python3-uwsgidecorators-2.0.20-5.fc37.x86_64 If you know about this problem and are planning on fixing it, please acknowledge so by setting the bug status to ASSIGNED. If you don't have time to maintain this package, consider orphaning it, so maintainers of dependent packages realize the problem. If you don't react accordingly to the policy for FTBFS/FTI bugs (https://docs.fedoraproject.org/en-US/fesco/Fails_to_build_from_source_Fails_to_install/), your package may be orphaned in 8+ weeks. P.S. The data was generated solely from koji buildroot, so it might be newer than the latest compose or the content on mirrors. To reproduce, use the koji/local repo only, e.g. in mock: $ mock -r fedora-37-x86_64 --disablerepo='*' --enablerepo=local install python3-uwsgidecorators P.P.S. If this bug has been reported in the middle of upgrading multiple dependent packages, please consider using side tags: https://docs.fedoraproject.org/en-US/fesco/Updates_Policy/#updating-inter-dependent-packages Thanks!
This bugzilla is likely a fallout from the Python 3.11 rebuild. If your package (or some of the dependencies it has) failed to rebuild during the Python 3.11 rebuild, they now fail to install. To fix this, packages need to be rebuilt in Rawhide. We will slowly triage the bugzillas, but we'd appreciate your help. If you know this is blocked by an existing reported build failure or another package not yet rebuilt with Python 3.11, please mark it as such by using the "Depends On"/"Blocks" bugzilla fields. That will help us determine what failures to prioritize. If this is not Python 3.11 related, please remove the PYTHON3.11 blocking tracker. Thank you and sorry for the inconvenience. Let me know if you need any help.
+ CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=zEC12 -mtune=z13 -fasynchronous-unwind-tables -fstack-clash-protection -Wno-unused-but-set-variable' + /usr/bin/python3 uwsgiconfig.py --verbose --plugin plugins/python fedora python3 plugins/python/python_plugin.c: In function ‘uwsgi_python_init’: plugins/python/python_plugin.c:238:17: warning: ‘Py_SetPythonHome’ is deprecated [-Wdeprecated-declarations] 238 | Py_SetPythonHome(wpyhome); | ^~~~~~~~~~~~~~~~ In file included from /usr/include/python3.11/Python.h:94, from plugins/python/uwsgi_python.h:6, from plugins/python/python_plugin.c:1: /usr/include/python3.11/pylifecycle.h:40:38: note: declared here 40 | Py_DEPRECATED(3.11) PyAPI_FUNC(void) Py_SetPythonHome(const wchar_t *); | ^~~~~~~~~~~~~~~~ plugins/python/python_plugin.c:262:9: warning: ‘Py_SetProgramName’ is deprecated [-Wdeprecated-declarations] 262 | Py_SetProgramName(pname); | ^~~~~~~~~~~~~~~~~ /usr/include/python3.11/pylifecycle.h:37:38: note: declared here 37 | Py_DEPRECATED(3.11) PyAPI_FUNC(void) Py_SetProgramName(const wchar_t *); | ^~~~~~~~~~~~~~~~~ plugins/python/python_plugin.c: In function ‘uwsgi_python_init_apps’: plugins/python/python_plugin.c:1142:56: error: invalid application of ‘sizeof’ to incomplete type ‘struct _frame’ 1142 | up.current_frame = uwsgi_malloc(sizeof(struct _frame)*uwsgi.async); | ^~~~~~ plugins/python/python_plugin.c: In function ‘uwsgi_python_suspend’: plugins/python/python_plugin.c:1533:74: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘recursion_depth’; did you mean ‘recursion_limit’? 1533 | up.current_recursion_depth[wsgi_req->async_id] = tstate->recursion_depth; | ^~~~~~~~~~~~~~~ | recursion_limit plugins/python/python_plugin.c:1534:64: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘frame’; did you mean ‘cframe’? 1534 | up.current_frame[wsgi_req->async_id] = tstate->frame; | ^~~~~ | cframe plugins/python/python_plugin.c:1537:59: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘recursion_depth’; did you mean ‘recursion_limit’? 1537 | up.current_main_recursion_depth = tstate->recursion_depth; | ^~~~~~~~~~~~~~~ | recursion_limit plugins/python/python_plugin.c:1538:49: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘frame’; did you mean ‘cframe’? 1538 | up.current_main_frame = tstate->frame; | ^~~~~ | cframe plugins/python/python_plugin.c: In function ‘uwsgi_python_resume’: plugins/python/python_plugin.c:1766:25: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘recursion_depth’; did you mean ‘recursion_limit’? 1766 | tstate->recursion_depth = up.current_recursion_depth[wsgi_req->async_id]; | ^~~~~~~~~~~~~~~ | recursion_limit plugins/python/python_plugin.c:1767:25: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘frame’; did you mean ‘cframe’? 1767 | tstate->frame = up.current_frame[wsgi_req->async_id]; | ^~~~~ | cframe plugins/python/python_plugin.c:1770:25: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘recursion_depth’; did you mean ‘recursion_limit’? 1770 | tstate->recursion_depth = up.current_main_recursion_depth; | ^~~~~~~~~~~~~~~ | recursion_limit plugins/python/python_plugin.c:1771:25: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘frame’; did you mean ‘cframe’? 1771 | tstate->frame = up.current_main_frame; | ^~~~~ | cframe plugins/python/pyutils.c: In function ‘init_pyargv’: plugins/python/pyutils.c:391:9: warning: ‘PySys_SetArgv’ is deprecated [-Wdeprecated-declarations] 391 | PySys_SetArgv(up.argc, up.py_argv); | ^~~~~~~~~~~~~ In file included from /usr/include/python3.11/Python.h:96, from plugins/python/uwsgi_python.h:6, from plugins/python/pyutils.c:1: /usr/include/python3.11/sysmodule.h:13:38: note: declared here 13 | Py_DEPRECATED(3.11) PyAPI_FUNC(void) PySys_SetArgv(int, wchar_t **); | ^~~~~~~~~~~~~ plugins/python/profiler.c: In function ‘uwsgi_python_profiler_call’: plugins/python/profiler.c:38:56: error: invalid use of incomplete typedef ‘PyFrameObject’ {aka ‘struct _frame’} 38 | PyString_AsString(frame->f_code->co_filename), | ^~ plugins/python/profiler.c:40:56: error: invalid use of incomplete typedef ‘PyFrameObject’ {aka ‘struct _frame’} 40 | PyString_AsString(frame->f_code->co_name), frame->f_code->co_argcount, frame->f_code->co_stacksize); | ^~ plugins/python/profiler.c:40:81: error: invalid use of incomplete typedef ‘PyFrameObject’ {aka ‘struct _frame’} 40 | PyString_AsString(frame->f_code->co_name), frame->f_code->co_argcount, frame->f_code->co_stacksize); | ^~ plugins/python/profiler.c:40:109: error: invalid use of incomplete typedef ‘PyFrameObject’ {aka ‘struct _frame’} 40 | PyString_AsString(frame->f_code->co_name), frame->f_code->co_argcount, frame->f_code->co_stacksize); | ^~ plugins/python/profiler.c:48:56: error: invalid use of incomplete typedef ‘PyFrameObject’ {aka ‘struct _frame’} 48 | PyString_AsString(frame->f_code->co_filename), | ^~ plugins/python/profiler.c:50:63: error: invalid use of incomplete typedef ‘PyFrameObject’ {aka ‘struct _frame’} 50 | PyEval_GetFuncName(arg), frame->f_code->co_argcount, frame->f_code->co_stacksize); | ^~ plugins/python/profiler.c:50:91: error: invalid use of incomplete typedef ‘PyFrameObject’ {aka ‘struct _frame’} 50 | PyEval_GetFuncName(arg), frame->f_code->co_argcount, frame->f_code->co_stacksize); | ^~ plugins/python/profiler.c: In function ‘uwsgi_python_tracer’: plugins/python/profiler.c:71:140: error: invalid use of incomplete typedef ‘PyFrameObject’ {aka ‘struct _frame’} 71 | uwsgi_log("[uWSGI Python profiler %llu] file %s line %d: %s argc:%d\n", (unsigned long long)delta, PyString_AsString(frame->f_code->co_filename), PyFrame_GetLineNumber(frame), PyString_AsString(frame->f_code->co_name), frame->f_code->co_argcount); | ^~ plugins/python/profiler.c:71:217: error: invalid use of incomplete typedef ‘PyFrameObject’ {aka ‘struct _frame’} 71 | uwsgi_log("[uWSGI Python profiler %llu] file %s line %d: %s argc:%d\n", (unsigned long long)delta, PyString_AsString(frame->f_code->co_filename), PyFrame_GetLineNumber(frame), PyString_AsString(frame->f_code->co_name), frame->f_code->co_argcount); | ^~ plugins/python/profiler.c:71:242: error: invalid use of incomplete typedef ‘PyFrameObject’ {aka ‘struct _frame’} 71 | uwsgi_log("[uWSGI Python profiler %llu] file %s line %d: %s argc:%d\n", (unsigned long long)delta, PyString_AsString(frame->f_code->co_filename), PyFrame_GetLineNumber(frame), PyString_AsString(frame->f_code->co_name), frame->f_code->co_argcount); | ^~ See https://docs.python.org/3.11/whatsnew/3.11.html and search for PyThreadState: Changes of the PyThreadState structure members: frame: removed, use PyThreadState_GetFrame() (function added to Python 3.9 by bpo-40429). Warning: the function returns a strong reference, need to call Py_XDECREF(). tracing: changed, use PyThreadState_EnterTracing() and PyThreadState_LeaveTracing() (functions added to Python 3.11 by bpo-43760). recursion_depth: removed, use (tstate->recursion_limit - tstate->recursion_remaining) instead. stackcheck_counter: removed. Code defining PyThreadState_GetFrame() on Python 3.8 and older: #if PY_VERSION_HEX < 0x030900B1 static inline PyFrameObject* PyThreadState_GetFrame(PyThreadState *tstate) { Py_XINCREF(tstate->frame); return tstate->frame; } #endif Code defining PyThreadState_EnterTracing() and PyThreadState_LeaveTracing() on Python 3.10 and older: #if PY_VERSION_HEX < 0x030B00A2 static inline void PyThreadState_EnterTracing(PyThreadState *tstate) { tstate->tracing++; #if PY_VERSION_HEX >= 0x030A00A1 tstate->cframe->use_tracing = 0; #else tstate->use_tracing = 0; #endif } static inline void PyThreadState_LeaveTracing(PyThreadState *tstate) { int use_tracing = (tstate->c_tracefunc != NULL || tstate->c_profilefunc != NULL); tstate->tracing--; #if PY_VERSION_HEX >= 0x030A00A1 tstate->cframe->use_tracing = use_tracing; #else tstate->use_tracing = use_tracing; #endif } #endif Or use the pythoncapi_compat project to get these functions on old Python functions.
I have to admit I'm a bit at a loss on how to deal with this, due to a lack of knowledge of python and uwsgi internals. uwsgi, to support a high level async mode (https://uwsgi-docs.readthedocs.io/en/latest/Async.html) messes with the PyThreadState struct by not just reading the now deprecated frame pointer, but also writing it. The code for this is here https://github.com/unbit/uwsgi/blob/master/plugins/python/python_plugin.c#L1643 and here https://github.com/unbit/uwsgi/blob/master/plugins/python/python_plugin.c#L1876 Ideas on how to do this "properly" would be much appreciated. In the worst case I guess I could just patch out async mode completely, but that is really not what I'd like to do.
Victor, could you please provide some pointers?
I proposed a change upstream: https://github.com/unbit/uwsgi/pull/2453
I proposed a Fedora change in Rawhide: https://src.fedoraproject.org/rpms/uwsgi/pull-request/11
FEDORA-2022-a6aa1a6286 has been submitted as an update to Fedora 37. https://bodhi.fedoraproject.org/updates/FEDORA-2022-a6aa1a6286
FEDORA-2022-a6aa1a6286 has been pushed to the Fedora 37 stable repository. If problem still persists, please make note of it in this bug report.