Release Notes

Important changes (especially those affecting the semantics of the tool) are documented in the following.

Version 0.15.1 "Rainy Days"

  • New C parser that can parse all of C99 and GNU C

  • Make c2hs integrate better with Cabal (1.2 and later)

  • Adapted to GHC 6.8.

  • Now requires Cabal 1.2.

  • Lots and lots of old code removal

  • Several bug fixes and improvements from Udo Stenzel:

    • allowing variadic functions in structures

    • allowing call and fun hooks for FunPtrs in C structs

    • embedded arrays size calculated correctly

Version 0.14.5 "Travelling Lightly"

  • Added nocode directive to pointer hooks

  • Can use structs properly in pointer hooks now (contributed by Jelmer Vernooij)

  • upcaseFirstLetter and downcaseFirstLetter

  • Cross-compiling with --platform flag

  • Gcc's asm construct is supported (contributed by Duncan Coutts)

  • Hierarchical modules syntax in import hooks supported

  • No separately installed marshaling library anymore; as a result binary C➔Haskell packages and installations are now independent of the targeted Haskell system

  • New lexer and parser generated with Alex and Happy (contributed by Duncan Coutts)

  • Cabal build system

Version 0.13.6 "Pressing Forward"

  • Works with GHC 6.4 and Cabal packages

  • Strings may contain 8-bit characters (e.g., umlauts).

  • Identifier may optionally be put in single quotes. (This is useful if they would otherwise collide with a C➔Haskell keyword.)

  • Some smaller bug fixes

  • C chars are treated as integral types for marshalling purposes.

  • If there is no explicit output file specified, the generated header file is put in the same directory as the binding file; otherwise, it goes in the directory where the output file is put. Moreover, the --output-dir option enables the specification of directory where all generated files are to be put.

  • Foreign import declarations include the name of the header file generated by C➔Haskell (ie, it needs neither be passed to the Haskell compiler at the command line nor in an OPTIONS pragma).

  • We allow structs and unions with no declarations.

  • Headers including function bodies are now parsed correctly.

  • Duncan Coutts identified a space leak in the parser whose removal improved performance significantly.

Version 0.12.1 "Springtime"

  • Removed support for deprecated C2HS interface and for old versions of the FFI libraries

  • Improved line pragma generation

  • Works with GHC 6.3

  • Builds on Mac OS X thanks to a patch by Sean Seefried

Version 0.11.5 "Powder Snow"

  • Bug fixes

  • Constant expression can now contain enumerators

  • header label removed from context hooks

  • Warning

    This version of c2hs may overwrite C header files in the current directory. More precisely, if a binding module with the name Foo.chs is processed, a header file with the name Foo.h is generated and will overwrite any file of the same name in the current directory or the directory specified via the -o option.

  • Added support for CPP directives, including special treatment of conditions, and for inline C code; specification of a header file as an argument to c2hs is now option.

  • GHC line pragmas are emitted into generated Haskell code

  • Swap the order of reading the binding module and the C header (i.e., we now read the binding module first)

Version 0.10.17 "Altocumulus Stratiformis Perlucidus Undulatus"

  • Worked around a bug in GHC 5.04.1

  • Solaris-related fix

  • Marshalling support for bit masks represented as enumeration types

  • Added fun hooks

  • as aliases can use ^ convert the orignal identifier with underscore2case

  • In call hooks, the attributes `fun' was replaced by `pure' (`fun' is will still be recognised for a while to ensure backwards compatibility, but it's use is deprecated)

  • GHC's package system is now supported

  • If two import hooks add a type mapping for a pointer hook with the same name, the textual later one dominates.

  • Bug fixes

  • Support for bitfields (they are correctly handled when computing struct offsets and they can be accessed using set and get hooks)

  • Some more support for GNU C extensions ("alignof" and better support "__attribute__")

  • Added class hooks

Version 0.9.9 "Blue Ginger"

  • Bug fixes

  • Library names in foreign imports have been removed until the convention of the new FFI is implemented (they are currently silently omitted)

  • Added sizeof hooks; sizeof of type names is now also supported in constant expressions

  • Local prefix for enum hooks; courtesy of Armin Sander

  • Added import hooks

  • The documentation includes a description of binding hooks

  • Added pointer hooks, which were derived from code for a similar feature by Axel Simon; this includes proper treatment of parametrised pointers

  • Integrated deriving option for enum hooks, which was contributed by Axel Simon

  • Adapted to GHC 5.0

Version 0.8.2 "Gentle Moon"

  • Adaptation layer for legacy StablePtr interface

  • Forgot to export FunPtr and associated functions from C2HS

  • Forgot to export some names in C2HSDeprecated

  • Added support for gcc's __builtin_va_list

Version 0.8.1 "Gentle Moon"

  • Library adapted to New FFI; the old interface can still be used by importing C2HSDeprecated

  • FFI Library specification added to the documentation

Version 0.7.10 "Afterthought"

  • CygWin support; based on suggestions by Anibal Maffioletti Rodrigues de DEUS

  • IntConv instances for Int8, Word8, and Char

Version 0.7.9 "Afterthought"

  • Debugged the stripping of prefixes from enumerators; prefixes are now generally stripped, independent of whether they can be stripped from all enumerators of a given enumeration type

  • Comma now correctly required after underscoreToCase.


    This breaks source compatibility with previous versions.

Version 0.7.8

  • Provisional support for GHC 4.08

  • Corrected constant folding

Version 0.7.7

Ignores any occurrence of #pragma.

Version 0.7.6

Bug fixes and support for long long.

Version 0.7.5

This is mainly a bug fix release. In particular, the space behaviour of C➔Haskell has been significantly improved.

IMPORTANT NOTE: From this release on, library names in lib tags in context hooks should not contain a suffix (i.e., omit .so etc).