Source: python-greenlet Version: 3.1.0-1 Severity: normal Tags: ftbfs upstream patch Forwarded: https://github.com/python-greenlet/greenlet/pull/445 User: [email protected] Usertags: python3.14
Python 3.14 is upon us, and we would like to enable it as a supported version in Debian. This package fails to build with Python 3.14 as an available version. Graham Inggs did a test rebuild in Ubuntu and found this build failure. These can be reproduced in Debian by installing python3-all from experimental (but you may need to rebuild some dependencies by hand, first). I think it has been fixed in a new upstream version, but that needs to be checked. Upstream claims that 3.2.2 supports Python 3.14 beta 1. And this MR looks like the relevant change: https://github.com/python-greenlet/greenlet/pull/445 Build log: https://launchpadlibrarian.net/823265632/buildlog_ubuntu-questing-amd64.python-greenlet_3.1.0-1build2_BUILDING.txt.gz Error: building 'greenlet._greenlet' extension creating build/temp.linux-x86_64-cpython-314/<<PKGBUILDDIR>>/src/greenlet x86_64-linux-gnu-g++ -g -O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -ffile-prefix-map=/<<PKGBUILDDIR>>=. -flto=auto -ffat-lto-objects -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -fdebug-prefix-map=/<<PKGBUILDDIR>>=/usr/src/python-greenlet-3.1.0-1build2 -Wdate-time -D_FORTIFY_SOURCE=3 -fPIC -I/usr/include/python3.14 -c /<<PKGBUILDDIR>>/src/greenlet/greenlet.cpp -o build/temp.linux-x86_64-cpython-314/<<PKGBUILDDIR>>/src/greenlet/greenlet.o In file included from /<<PKGBUILDDIR>>/src/greenlet/greenlet.cpp:31: /<<PKGBUILDDIR>>/src/greenlet/TGreenlet.cpp: In member function ‘void greenlet::Greenlet::expose_frames()’: /<<PKGBUILDDIR>>/src/greenlet/TGreenlet.cpp:623:29: error: aggregate ‘_PyInterpreterFrame iframe_copy’ has incomplete type and cannot be defined 623 | _PyInterpreterFrame iframe_copy; | ^~~~~~~~~~~ /<<PKGBUILDDIR>>/src/greenlet/TGreenlet.cpp:624:65: error: invalid application of ‘sizeof’ to incomplete type ‘_PyInterpreterFrame’ 624 | this->stack_state.copy_from_stack(&iframe_copy, iframe, sizeof(*iframe)); | ^~~~~~~~~~~~~~~ /<<PKGBUILDDIR>>/src/greenlet/TGreenlet.cpp:625:14: error: ‘_PyFrame_IsIncomplete’ was not declared in this scope 625 | if (!_PyFrame_IsIncomplete(&iframe_copy)) { | ^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/python3.14/Python.h:19, from /<<PKGBUILDDIR>>/src/greenlet/greenlet.cpp:16: /<<PKGBUILDDIR>>/src/greenlet/TGreenlet.cpp:632:41: error: ‘FRAME_OWNED_BY_CSTACK’ was not declared in this scope 632 | assert(iframe_copy.owner != FRAME_OWNED_BY_CSTACK); | ^~~~~~~~~~~~~~~~~~~~~ /<<PKGBUILDDIR>>/src/greenlet/TGreenlet.cpp:651:24: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 651 | if (!iframe->frame_obj) { | ^~ In file included from /usr/include/python3.14/pyframe.h:19, from /usr/include/python3.14/Python.h:104: /usr/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 25 | struct _PyInterpreterFrame; | ^~~~~~~~~~~~~~~~~~~ /<<PKGBUILDDIR>>/src/greenlet/TGreenlet.cpp:653:37: error: aggregate ‘_PyInterpreterFrame dummy_iframe’ has incomplete type and cannot be defined 653 | _PyInterpreterFrame dummy_iframe; | ^~~~~~~~~~~~ /<<PKGBUILDDIR>>/src/greenlet/TGreenlet.cpp:658:38: error: ‘FRAME_OWNED_BY_GENERATOR’ was not declared in this scope 658 | dummy_iframe.owner = FRAME_OWNED_BY_GENERATOR; | ^~~~~~~~~~~~~~~~~~~~~~~~ /<<PKGBUILDDIR>>/src/greenlet/TGreenlet.cpp:664:30: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 664 | assert(iframe->frame_obj); | ^~ /usr/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 25 | struct _PyInterpreterFrame; | ^~~~~~~~~~~~~~~~~~~ /<<PKGBUILDDIR>>/src/greenlet/TGreenlet.cpp:679:26: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 679 | assert(iframe->owner == FRAME_OWNED_BY_THREAD | ^~ /usr/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 25 | struct _PyInterpreterFrame; | ^~~~~~~~~~~~~~~~~~~ /<<PKGBUILDDIR>>/src/greenlet/TGreenlet.cpp:679:37: error: ‘FRAME_OWNED_BY_THREAD’ was not declared in this scope 679 | assert(iframe->owner == FRAME_OWNED_BY_THREAD | ^~~~~~~~~~~~~~~~~~~~~ /<<PKGBUILDDIR>>/src/greenlet/TGreenlet.cpp:680:29: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 680 | || iframe->owner == FRAME_OWNED_BY_GENERATOR); | ^~ /usr/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 25 | struct _PyInterpreterFrame; | ^~~~~~~~~~~~~~~~~~~ /<<PKGBUILDDIR>>/src/greenlet/TGreenlet.cpp:680:40: error: ‘FRAME_OWNED_BY_GENERATOR’ was not declared in this scope 680 | || iframe->owner == FRAME_OWNED_BY_GENERATOR); | ^~~~~~~~~~~~~~~~~~~~~~~~ /<<PKGBUILDDIR>>/src/greenlet/TGreenlet.cpp:682:44: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 682 | assert(last_complete_iframe->frame_obj); | ^~ /usr/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 25 | struct _PyInterpreterFrame; | ^~~~~~~~~~~~~~~~~~~ /<<PKGBUILDDIR>>/src/greenlet/TGreenlet.cpp:683:45: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 683 | memcpy(&last_complete_iframe->frame_obj->_f_frame_data[0], | ^~ /usr/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 25 | struct _PyInterpreterFrame; | ^~~~~~~~~~~~~~~~~~~ /<<PKGBUILDDIR>>/src/greenlet/TGreenlet.cpp:684:45: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 684 | &last_complete_iframe->previous, sizeof(void *)); | ^~ /usr/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 25 | struct _PyInterpreterFrame; | ^~~~~~~~~~~~~~~~~~~ /<<PKGBUILDDIR>>/src/greenlet/TGreenlet.cpp:685:37: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 685 | last_complete_iframe->previous = iframe; | ^~ /usr/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 25 | struct _PyInterpreterFrame; | ^~~~~~~~~~~~~~~~~~~ /<<PKGBUILDDIR>>/src/greenlet/TGreenlet.cpp:701:36: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 701 | assert(last_complete_iframe->frame_obj); | ^~ /usr/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 25 | struct _PyInterpreterFrame; | ^~~~~~~~~~~~~~~~~~~ /<<PKGBUILDDIR>>/src/greenlet/TGreenlet.cpp:702:37: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 702 | memcpy(&last_complete_iframe->frame_obj->_f_frame_data[0], | ^~ /usr/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 25 | struct _PyInterpreterFrame; | ^~~~~~~~~~~~~~~~~~~ /<<PKGBUILDDIR>>/src/greenlet/TGreenlet.cpp:703:37: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 703 | &last_complete_iframe->previous, sizeof(void *)); | ^~ /usr/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 25 | struct _PyInterpreterFrame; | ^~~~~~~~~~~~~~~~~~~ /<<PKGBUILDDIR>>/src/greenlet/TGreenlet.cpp:704:29: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 704 | last_complete_iframe->previous = nullptr; | ^~ /usr/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 25 | struct _PyInterpreterFrame; | ^~~~~~~~~~~~~~~~~~~ In file included from /<<PKGBUILDDIR>>/src/greenlet/greenlet.cpp:36: /<<PKGBUILDDIR>>/src/greenlet/TPythonState.cpp: In member function ‘void greenlet::PythonState::operator<<(const PyThreadState*)’: /<<PKGBUILDDIR>>/src/greenlet/TPythonState.cpp:137:31: error: ‘Py_C_RECURSION_LIMIT’ was not declared in this scope 137 | this->c_recursion_depth = Py_C_RECURSION_LIMIT - tstate->c_recursion_remaining; | ^~~~~~~~~~~~~~~~~~~~ /<<PKGBUILDDIR>>/src/greenlet/TPythonState.cpp:137:62: error: ‘const PyThreadState’ {aka ‘const struct _ts’} has no member named ‘c_recursion_remaining’; did you mean ‘py_recursion_remaining’? 137 | this->c_recursion_depth = Py_C_RECURSION_LIMIT - tstate->c_recursion_remaining; | ^~~~~~~~~~~~~~~~~~~~~ | py_recursion_remaining /<<PKGBUILDDIR>>/src/greenlet/TPythonState.cpp: In member function ‘void greenlet::PythonState::unexpose_frames()’: /<<PKGBUILDDIR>>/src/greenlet/TPythonState.cpp:179:51: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 179 | _PyInterpreterFrame *prev_exposed = iframe->previous; | ^~ /usr/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 25 | struct _PyInterpreterFrame; | ^~~~~~~~~~~~~~~~~~~ /<<PKGBUILDDIR>>/src/greenlet/TPythonState.cpp:180:22: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 180 | assert(iframe->frame_obj); | ^~ /usr/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 25 | struct _PyInterpreterFrame; | ^~~~~~~~~~~~~~~~~~~ /<<PKGBUILDDIR>>/src/greenlet/TPythonState.cpp:181:23: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 181 | memcpy(&iframe->previous, &iframe->frame_obj->_f_frame_data[0], | ^~ /usr/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 25 | struct _PyInterpreterFrame; | ^~~~~~~~~~~~~~~~~~~ /<<PKGBUILDDIR>>/src/greenlet/TPythonState.cpp:181:42: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 181 | memcpy(&iframe->previous, &iframe->frame_obj->_f_frame_data[0], | ^~ /usr/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’} 25 | struct _PyInterpreterFrame; | ^~~~~~~~~~~~~~~~~~~ /<<PKGBUILDDIR>>/src/greenlet/TPythonState.cpp: In member function ‘void greenlet::PythonState::operator>>(PyThreadState*)’: /<<PKGBUILDDIR>>/src/greenlet/TPythonState.cpp:212:13: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘c_recursion_remaining’; did you mean ‘py_recursion_remaining’? 212 | tstate->c_recursion_remaining = Py_C_RECURSION_LIMIT - this->c_recursion_depth; | ^~~~~~~~~~~~~~~~~~~~~ | py_recursion_remaining /<<PKGBUILDDIR>>/src/greenlet/TPythonState.cpp:212:37: error: ‘Py_C_RECURSION_LIMIT’ was not declared in this scope 212 | tstate->c_recursion_remaining = Py_C_RECURSION_LIMIT - this->c_recursion_depth; | ^~~~~~~~~~~~~~~~~~~~ error: command '/usr/bin/x86_64-linux-gnu-g++' failed with exit code 1

