The c2hsc package

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

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


[Skip to Readme]

Properties

Versions 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.*), c2hsc, cmdargs (>=0.9), containers (>=0.4), data-default (>=0.5.3), directory (>=1.1), filepath (>=1.3), HStringTemplate (>=0.7.1), language-c (>=0.4), logging (>=1.3.0), mtl (>=2.0), pretty (>=1.1), split (>=0.2), temporary (>=1.1.2.5), text (>=0.11.3.1), transformers (>=0.2) [details]
License BSD3
Author John Wiegley
Maintainer John Wiegley <johnw@newartisans.com>
Category Development
Home page https://github.com/jwiegley/c2hsc
Source repository head: git clone https://github.com/jwiegley/c2hsc
Uploaded Sat Dec 9 22:41:18 UTC 2017 by JohnWiegley
Distributions NixOS:0.7.1
Executables c2hsc
Downloads 3873 total (444 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2017-12-09 [all 1 reports]
Hackage Matrix CI

Modules

[Index]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees


Readme for c2hsc-0.7.1

[back to package description]

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

Usage: c2hsc --prefix=<Lib Prefix> <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 --prefix=Bindings.Libgit2 --cppopts=-U__BLOCKS__ \
    libgit2/include/git2/tree.h

Known issues:

  • Need to output vararg functions with a comment mentioning they are not translatable to the Haskell FFI

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.