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 [--compact] <input> [-- <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', ['-Dlist_of_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.
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
Add support for filtering which headers are processed
Add support for constants defined using #define
Add support for nested anonymous struct|unions
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
c_api_extract-0.1.tar.gz
(3.8 kB
view hashes)
Built Distribution
Close
Hashes for c_api_extract-0.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 71be09eb049f204d1d907ca7275501883fcd8dd18627e484e86e12449fa20d00 |
|
MD5 | 62bb19259f7613bdab1be0f1f35db17a |
|
BLAKE2b-256 | b5a1945861198846c8ce4c494565a6d426203aed87ef4617fb765f54bad0537e |