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
File details
Details for the file c_api_extract-0.4.0.tar.gz
.
File metadata
- Download URL: c_api_extract-0.4.0.tar.gz
- Upload date:
- Size: 4.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.8.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6ef30d23a8012ab630e8d1ff26d512418affb8f7db93af5c7989130a876ce5be |
|
MD5 | 513f1d684678a6587f895c1901e22251 |
|
BLAKE2b-256 | f2af9b385b550f795abeea500b6e98142c44f8d605711f83c294b82c2abde1b2 |
File details
Details for the file c_api_extract-0.4.0-py3-none-any.whl
.
File metadata
- Download URL: c_api_extract-0.4.0-py3-none-any.whl
- Upload date:
- Size: 4.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.8.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 54d43550e95e0429a7e0bbbe19079b64ac6f35abe7bbc0247a64b5ba26c02468 |
|
MD5 | 1b2434f7284403f2d454ddfb976b286a |
|
BLAKE2b-256 | ab39522a7e68a283e4a20eef72c406444e372bb94b6952309c59c6130912ae61 |