NAME¶
c2hs - C->Haskell Interface Generator
SYNOPSIS¶
c2hs [
OPTIONS]...
header-file binding-file
DESCRIPTION¶
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
- -c CPP, --cpp=CPP
- use executable CPP to invoke C preprocessor
- -C CPPOPTS, --cppopts=CPPOPTS
- pass CPPOPTS to the C preprocessor
- -o FILE, --output=FILE
- output result to FILE (should end in .hs)
- -t PATH, --output-dir=PATH
- 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 -I
DIR 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.
SEE ALSO¶
User guide
/usr/share/doc/c2hs-0.15.1/html/c2hs.html
Home page
http://www.cse.unsw.edu.au/~chak/haskell/c2hs/
BUGS¶
Please report bugs and feature requests in the c2hs trac
http://hackage.haskell.org/trac/c2hs/
or to the C->Haskell mailing list
c2hs@haskell.org
COPYRIGHT¶
C->Haskell Version 0.15.1 Copyright (c) [1999..2007] Manuel M. T. Chakravarty
<chak@cse.unsw.edu.au>
AUTHOR¶
This manual page was mainly assembled from the original documentation.
It was written by Michael Weber <michael.weber@post.rwth-aachen.de> for
the Debian GNU/Linux system (but may be used by others).