c2hs1
C->haskell interface generator
Usage
c2hs [OPTIONS] ...
header-file
binding-file
Overview
This manual page briefly describes the c2hs command. For more details, refer to the main documentation, which is available in various other formats, including SGML and HTML; see below.
Options
The programs follow the usual GNU command line syntax, with long options starting with two dashes (`-'). A summary of options are included below. For a complete description, see the other documentation.
c2hs accepts the following options:
-
-h, -?, --help -
brief help
-
-v, --version -
show version information
-
--numeric-version -
show version number
-cCPP, --cpp=CPP-
use executable CPP to invoke C preprocessor
-
-C CPPOPTS, --cppopts=CPPOPTS -
pass CPPOPTS to the C preprocessor
|
output result to FILE (should end in .hs) |
|---|---|
|
place generated files in PATH |
-
-p PLATFORM, --platform=PLATFORM -
platform to use for cross compilation
-
-k, --keep -
keep pre-processed C header
-
-l, --copy-library -
copy `C2HS' library module to the current directory
-
-d TYPE, --dump=TYPE -
dump internal information (for debugging), where TYPE is one of:
- •
trace -
trace compiler phases
- •
genbind -
trace binding generation
- •
ctrav -
trace C declaration traversal
- •
chs -
dump the binding file (adds .dump to the name)
- •
header-file is the header file belonging to the marshalled library. It must end with suffix .h.
binding-file is the corresponding Haskell binding file, which must end with suffix .chs.
PLATFORM The platform name can be one of: x86_64-linux. i686-linux. m68k-palmos. This allows for cross-compilation, assuming the rest of your toolchain supports that. The default is the current host platform.
The most useful of these options is probably --cppopts (or -C). If the C header file needs any special options (like -D or -I) to go through the C pre-processor, here is the place to pass them.
Examples
The easiest way to use the C->Haskell Interface Generator is via Cabal. Cabal knows about .chs files and will run c2hs automatically, passing the appropriate flags.
When used directly, c2hs is usually called as:
c2hs lib.h Lib.chs
where lib.h is the header file and Lib.chs the Haskell binding module, which define the C- and Haskell-side interface, respectively. If no errors occur, the result is a pure Haskell module Lib.hs, which implements the Haskell API of the library.
A more advanced call may look like this:
c2hs --cppopts=-I/some/obscure/dir --cppopts=-DEXTRA lib.h Lib.chs
Often, lib.h will not be in the current directory, but in one of the header file directories. Apart from the current directory, C->Haskell looks in two places for the header: first, in the standard include directory of the used system, this is usually /usr/include and /usr/local/include; and second, it will look in every directory that is mentioned in a -IDIR option passed to the pre-processor via --cppopts.
Caveats
If you have more than one option that you want to give to the pre-processor, use multiple --cppopts= flags.
Releases
12 releases since Debian 3.0 (Woody); the text changed 3 times.
--copy-library since Debian 4.0 (Etch);
--numeric-version since Debian 5.0 (Lenny);
--platform since Debian 4.0 (Etch);
-l since Debian 4.0 (Etch);
-p since Debian 4.0 (Etch).
--cpp until Debian 4.0 (Etch);
--data until Debian 4.0 (Etch);
--include until Debian 4.0 (Etch);
--output until Debian 4.0 (Etch);
--output-dir until Debian 4.0 (Etch);
-c until Debian 4.0 (Etch);
-i until Debian 4.0 (Etch);
-o until Debian 4.0 (Etch);
-t until Debian 4.0 (Etch).