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

Reply via email to