I am trying to split off reportlab C extensions to simplify installations and 
make use of more advanced packages.

A simple extension is easily converted to being an abi3 module. However, another has a custom type which uses the old style mechanisms here

  https://docs.python.org/3.7/extending/newtypes_tutorial.html#the-basics

I made a simple setup based on this abi3 example modified to allow switching 
between abi3 and normal build

  https://github.com/joerick/python-abi3-package-sample

I made a tiny change to the code example in the newtypes tutorial page the code 
is here

https://github.com/MrBitBucket/custom-type

In a python 3.7 - 3.12a3 environment I find I can build the wheel OK with

  ABI3_WHEEL=0 pip wheel -w dist .


but I get lots of compile errors if I switch to an abi3 build with

  ABI3_WHEEL=1 pip wheel -w dist .

looking at the errors

     src/_custom.c:10:1: error: variable ‘CustomType’ has initializer but 
incomplete type
         10 | static PyTypeObject CustomType = {
            | ^~~~~~
      In file included from 
/home/robin/LOCAL/3.7.16/include/python3.7m/Python.h:90,
                       from src/_custom.c:2:
      /home/robin/LOCAL/3.7.16/include/python3.7m/object.h:90:5: error: extra 
brace group at end of initializer
         90 |     { PyObject_HEAD_INIT(type) size },
            |     ^
      src/_custom.c:11:9: note: in expansion of macro ‘PyVarObject_HEAD_INIT’
         11 |         PyVarObject_HEAD_INIT(NULL, 0)

it looks like I have to use a different mechanism to setup custom types in the 
abi3 world.

I looked in Modules/xxlimited_35.c, but that seems much more complex and 
provides for a type which supports GC.

Are there any ABI3 examples using the old style strategy?
--
Robin Becker
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to