Skip to main content

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


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.4.0.tar.gz (4.6 kB view details)

Uploaded Source

Built Distribution

c_api_extract-0.4.0-py3-none-any.whl (4.6 kB view details)

Uploaded Python 3

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

Hashes for c_api_extract-0.4.0.tar.gz
Algorithm Hash digest
SHA256 6ef30d23a8012ab630e8d1ff26d512418affb8f7db93af5c7989130a876ce5be
MD5 513f1d684678a6587f895c1901e22251
BLAKE2b-256 f2af9b385b550f795abeea500b6e98142c44f8d605711f83c294b82c2abde1b2

See more details on using hashes here.

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

Hashes for c_api_extract-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 54d43550e95e0429a7e0bbbe19079b64ac6f35abe7bbc0247a64b5ba26c02468
MD5 1b2434f7284403f2d454ddfb976b286a
BLAKE2b-256 ab39522a7e68a283e4a20eef72c406444e372bb94b6952309c59c6130912ae61

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page