c2hsc: Convert C API header files to .hsc and .hsc.helper.c files

[ bsd3, development, library, program ] [ Propose Tags ]

Convert C API header files to .hsc and .hsc.helper.c files


[Skip to Readme]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1.0, 0.2.0, 0.3.0, 0.3.1, 0.3.2, 0.3.3, 0.4.0, 0.5.0, 0.5.1, 0.6.2, 0.6.3, 0.6.4, 0.6.5, 0.7.1
Dependencies base (>=4 && <5), cmdargs, containers, directory, filepath, HStringTemplate, language-c, mtl, pretty, transformers [details]
License BSD-3-Clause
Author John Wiegley
Maintainer John Wiegley <johnw@newartisans.com>
Category Utilities
Home page https://github.com/jwiegley/c2hsc
Source repo head: git clone https://github.com/jwiegley/c2hsc
Uploaded by JohnWiegley at 2012-09-05T08:53:16Z
Distributions NixOS:0.7.1
Reverse Dependencies 1 direct, 0 indirect [details]
Executables c2hsc
Downloads 12559 total (38 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
Last success reported on 2016-12-24 [all 8 reports]

Readme for c2hsc-0.3.1

[back to package description]

Converts C API header files to .hsc and .hsc.helper.c files

Usage: c2hsc <Lib Prefix> [cpp options...] <FILE>.h

This will create <FILE>.hsc, and <FILE>.hsc.helper.c if the header file contains inline functions.

For example, in hlibgit2 on the Mac I'm using:

c2hsc Bindings.Libgit2 -U__BLOCKS__ libgit2/include/git2/tree.h

Known issues:

  • Pointers to "struct foo" are being rendered as Ptr () [void *]
  • Function pointers of void return type are rendered incorrectlyb
  • const is being dropped from BC_INLINE macros
  • Handle type synonyms (output them as type a = b)
  • Global variables are not being emitted
  • Varargs functions do not translate
  • Inline helper generator outputs the wrong headers

Also, please note that this tool will never be 100% accurate. It cannot translate macros, or anything related to the preprocessor, for example. It often misses necessary #include files, and will get them wrong in any case if preprocessor conditionals are involved.

The goal of c2hsc is to solve the hardest 80% of the problem of creating an FFI library. The remaining 20%, plus validation of the results, is an exercise necessarily left to the user.