Hi all,
I want to build a CPython extension module for the libuwsgi.so shared
library included in uWSGI. My objective is to allow unconditional access
to this shared library using the standard Python interpreter, for
introspection purpose and extending uWSGI.
I have investigated several ways to do this:
1. ctypes
Probably the most straightforward to load the shared library
>>> from ctypes import CDLL
>>> lib = CDLL('./libuwsgi.so')
However, this method does not properly reflect C functions and variables
to their respective Python attributes...
2. CFFI/pycparser
Next I tried to parse the uwsgi.h file with CFFI and pycparser:
>>> from cffi import FFI
>>> ffi = FFI()
>>> lib = ffi.cdef(open('./uwsgi.h').read())
However, since directives are not supported in CFFI, it's not possible
to parse the header file.
3. CFFI/clang
For this experiment, I wanted to parse the C header file to generate a
Abstract Syntax Tree (AST) using clang:
>>> from pycparser import parse_file
>>> ast = parse_file('./uwsgi.h', use_cpp=True, cpp_path='clang')
>>> ast.show()
FileAST: (at None)
Ideally, it would be really cool if CFFI could parse a C header and
generate a AST with libclang. Another possibility I haven't explored yet
is to use cppyy.
So, could you please advise on the most robust approach to reflect a
shared library into a Python extension module?
Regards,
Etienne
--
Etienne Robillard
tkad...@yandex.com
https://www.isotopesoftware.ca/
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor