C2HS(1)

πŸ‘‘ C2HS(1) β€” the C->Haskell Interface Generator bestie edition

okay so. welcome to c2hs, aka the C->Haskell Interface Generator, and yes she's in manual section 1 πŸ’– this is the short-and-sweet manual page version β€” for the whole lore you gotta go read the main documentation, which comes in a bunch of other formats including SGML and HTML (see the SEE ALSO bit below, iykyk) πŸ¦‹


✨ SYNOPSIS ✨

c2hs [OPTIONS]...  header-file binding-file

🌸 DESCRIPTION 🌸

This manual page briefly describes the c2hs command, fr fr. 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. no thoughts, just vibes 🫢

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. like. one per flag. do not get cute about it bestie 😭

πŸ‘€ SEE ALSO πŸ‘€


πŸ› 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 πŸ’Œ


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).


and that's the whole page, bestie!! this one's Version 0.15.1, dated November 2007, and it lives in manual section C2HS(1) πŸŽ€ go forth and marshal some C, you absolute icon πŸ‘‘πŸ’–βœ¨

πŸ“¦ where this page comes from