Automatic extraction of C APIs from header files using libclang
Project description
Automatic extraction of C APIs from header files using Python and clang. Exports struct, union, enum, typedefs, static variables and function definitions to a JSON file content.
Usage
Calling from console:
$ c_api_extract.py <input> [-p <pattern>...] [-c] [-- <clang_args>...]
Or using Python:
import c_api_extract
# `definitions` follow the same format as output JSON
definitions = c_api_extract.definitions_from_header('header_name.h', ['-I/usr/lib/clang/<version>/include', '-Dother_clang_args', ...])
c_api_extract.py works on a single header file for simplicity. If you need more than one header processed, create a new one and #include them.
It is recommended to pass -I<path to clang headers> to clang to correctly include some standard headers like stddef.h and stdbool.h.
Output format
Output is a list of definitions, each kind with it’s format:
# variable definitions
{
'kind': 'var',
'name': '<name>', # variable name
'type': '<type>' # type name as written in source code
'source': '<code>' # source C code from read header file
}
# enum definitions
{
'kind': 'enum',
'name': '<name>', # enum name, empty for anonymous enums
'typedef': '<typedef>', # typedef name, may be empty
'type': '<C type>', # enum underlying C type name
'values': [ # list of declared names and values
['<name>', <integer value>]
# ...
],
'source': '<code>' # source C code from read header file
}
# struct|union definitions
{
'kind': 'struct' | 'union',
'name': '<name>', # struct|union name, empty for anonymous struct|unions
'typedef': '<typedef>', # typedef name, may be empty
'fields': [ # list of declared fields, empty for opaque struct|unions
['<type>', '<name>']
# ...
],
'source': '<code>' # source C code from read header file
}
# typedef definitions
{
'kind': 'typedef',
'name': '<name>', # name of the typedef
'type': '<type>', # name of the underlying type
'source': '<code>' # source C code from read header file
}
# function definitions
{
'kind': 'function',
'name': '<name>', # name of the function
'return_type': '<type>', # return type name
'arguments': [ # list of arguments
['<type>', '<name>']
# ...
],
'variadic': true | false, # true if function is variadic
'source': '<code>' # source C code from read header file
}
TODO
Include clang standard headers by default based on host operating system
Add support for constants defined using #define
Add support for nested anonymous struct|unions
Add docstrings
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for c_api_extract-0.4.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 54d43550e95e0429a7e0bbbe19079b64ac6f35abe7bbc0247a64b5ba26c02468 |
|
MD5 | 1b2434f7284403f2d454ddfb976b286a |
|
BLAKE2b-256 | ab39522a7e68a283e4a20eef72c406444e372bb94b6952309c59c6130912ae61 |