
Nick Coghlan wrote:
Regarding the warnings for this one - is there a way for the checker to warn if data structures are exposed directly, rather than as opaque types? It's fine if there isn't, it would just be cool if there was - one of the premises of the stable ABI is that it *doesn't* expose the type definitions directly to consuming code, just the pointers to them (hence allowing the struct size to change without actually breaking compatibility with the defined ABI).
The ABI of the library can be dumped by the abi-compliance-checker basic tool to a text file in the human readable format, so anyone can analyse it in order to find problems of any kind.
Homepage of the tool: https://github.com/lvc/abi-compliance-checker
To dump the libpython ABI type:
$> abi-compliance-checker -l libpython -dump descriptor.xml
The descriptor.xml input file ({RELPATH} - path to the python install tree, i.e. installation "prefix"):
<version> 3.4.0 </version>
<headers> {RELPATH}/include </headers>
<libs> {RELPATH}/lib/libpython3.4m.so.1.0 </libs>
<skip_including> ast.h Python-ast.h asdl.h pyexpat.h pymactoolbox.h </skip_including>
<gcc_options> -DPy_LIMITED_API=0x03020000 </gcc_options>
I've already created the sample dump of the libpython-3.4.0 stable ABI here: http://upstream-tracker.org/downloads/libpython_3.4.0.abi.tar.gz
In order to analyse data types in the ABI please read 'TypeInfo' section of the dump.
I see several structures with exposed definition in the stable ABI v3.4.0:
struct PyStructSequence_Desc struct grammar struct PyStructSequence_Field struct _node struct cchar_t struct PyType_Spec struct PyType_Slot struct dfa struct labellist struct PyMethodDef struct _Py_Identifier struct state struct PyVarObject struct arc struct label struct PyModuleDef struct PyModuleDef_Base struct PyMemberDef struct PyGetSetDef struct _object struct PyCursesWindowObject
Thanks.