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 [--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


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 details)

Uploaded Source

Built Distribution

c_api_extract-0.1-py3-none-any.whl (3.8 kB view details)

Uploaded Python 3

File details

Details for the file c_api_extract-0.1.tar.gz.

File metadata

  • Download URL: c_api_extract-0.1.tar.gz
  • Upload date:
  • Size: 3.8 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.1.tar.gz
Algorithm Hash digest
SHA256 e6d4e64f98aeb612747ef37408530060094f32ab9bc913990bba3a87be41bcde
MD5 23b40e040c60daf8eb12b1b5f0ebcee3
BLAKE2b-256 8b3fe44a18bcb5096ec0a038809a2adc6d5b653c30f9d60163b1b5cc2f566703

See more details on using hashes here.

File details

Details for the file c_api_extract-0.1-py3-none-any.whl.

File metadata

  • Download URL: c_api_extract-0.1-py3-none-any.whl
  • Upload date:
  • Size: 3.8 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 71be09eb049f204d1d907ca7275501883fcd8dd18627e484e86e12449fa20d00
MD5 62bb19259f7613bdab1be0f1f35db17a
BLAKE2b-256 b5a1945861198846c8ce4c494565a6d426203aed87ef4617fb765f54bad0537e

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