[Haskell-cafe] build tools and Cabal

John Lato jwlato at gmail.com
Wed Nov 26 18:25:28 EST 2008

On Tue, Nov 25, 2008 at 8:18 PM, Duncan Coutts
<duncan.coutts at worc.ox.ac.uk> wrote:
> On Tue, 2008-11-25 at 01:30 +0000, John Lato wrote:
>> Hello,
>> Cabal allows specifying arguments for tools it recognizes on the
>> command line, e.g.
>> runhaskell Setup.hs configure --c2hs-option=some_option
>> Unfortunately, I can't find a way to make this work with .cabal (or
>> .buildinfo) files, except for the specific cases of ghc, hugs, and
>> nhc98 options.  Am I missing something?
> No.
>> If not, could this be added easily?
> Yes, but it's not clear that we should.
>> It would be very helpful as I'm trying to work around the broken cpp
>> Apple provides.
> Perhaps we should do the workaround once rather than adding the
> workaround to every package.
> What is the problem exactly?

This is with c2hs on a Mac.  Using

$ cpp --version
i686-apple-darwin8-gcc-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc. build 5367)
Copyright (C) 2005 Free Software Foundation, Inc.

$ c2hs -d trace
Attempting to read file `Interface.chs'...
...parsing `Interface'...
...successfully loaded `Interface'.
Invoking cpp as `cpp  -x=c
-I/Library/Frameworks/CsoundLib.framework/Headers Interface.chs.h
Attempting to read file `Interface.i'...
...parsing `Interface.i'...
c2hs: Error in C header file.

/usr/include/sys/resource.h:167: (column 1) [FATAL]
  >>> Syntax error!
  The symbol `/' does not fit here.

This error appears in other files too, at least
/usr/include/sys/signal.h.  There are also some errors caused by the
csound.h file, but I can probably get the csound maintainers to change

The problem with csound.h is that it has a few #defines preceded by
whitespace, which Apple's cpp chooses to leave in the output rather
than process.

The problem with signal.h and resource.h is that they have //comments,
which cpp again chooses to retain, causing the error when Interface.i
is being parsed.

Oddly, cpp leaves the //comments in place even when called with -x=c++.

My workaround is to configure with --c2hs-option=--cpp=gcc
--c2hs-option=--cppopt=-E --c2hs-option=--cppopt=-xc.  This has the
desired behavior, but it's a lot for a user to type in.  I could make
a script to call configure with the correct options, but that sort of
system-dependent configuration seems like exactly the sort of thing
that cabal and configure are supposed to be able to work out.

So that's the problem.  I don't know if this should be addressed as a
cabal issue or a c2hs issue.  I would say that it's Apple's problem,
but that won't help moving to a solution.  I'm not even sure that
Apple's software is doing anything technical incorrect.


More information about the Haskell-Cafe mailing list