[Haskell] cabal and ghcconfigure.h

Robert Dockins robdockins at fastmail.fm
Tue Dec 6 09:38:51 EST 2005

On Dec 5, 2005, at 10:31 PM, Isaac Jones wrote:

> "Robert" <robdockins at fastmail.fm> writes:
>> On Dec 1, 2005, at 10:18 AM, Duncan Coutts wrote:
>>> On Wed, 2005-11-30 at 22:48 -0500, Robert Dockins wrote:
>>>> I've just run across a problem with my cabal build system -- I'm  
>>>> not yet sure
>>>> if this is a cabal problem or a system configuration problem.
> Is this a public darcs repository so I can try this out on my own?

I'ts semi-public.  Its avaliable, but I don't consider it ready for  
alpha release so its not been announced.  You can find it at

So I guess its announced now :)

> (snip)
>> $ runhaskell Setup.hs build -v
>> Preprocessing library Cmm-0.1...
>> /usr/bin/alex -g -o src/Language/Cmm/Parser/CmmLex.hs
>> src/Language/Cmm/Parser/CmmLex.x
>> /usr/bin/happy -agc -o src/Language/Cmm/Parser/CmmParser.hs
>> src/Language/Cmm/Parser/CmmParser.y
>> Preprocessing executables for Cmm-0.1...
>> Building Cmm-0.1...
>> /usr/bin/ghc -package-name Cmm -odir dist/build -hidir dist/build
>> -hide-all-packages --make -i -isrc Language.Cmm.Frontend
> It looks like you're not listing CPP as an extension, and therefore
> Cabal is not doing anything whatsoever wrt cpp.  It's not adding the
> -cpp argument to ghc, and it's not preprocessing the sources
> beforehand...

OK.  The only files that request CPP are the Alex and Happy files, so  
I didn't think to add it.  However, it seems to be doing the  
preprocessing, otherwise I'm not sure how it would generate an error  
telling me it can't find a header file.  I'll try that as a first  
step and see what happens.

> (snip)
>> Chasing modules from:
>> Language.Cmm.Frontend,Language.Cmm.Datatypes,Language.Cmm.Parser,Lang 
>> uage.Cmm.Lint,Language.Cmm.Messages,Language.Cmm.Messages.EN,Language 
>> .Cmm.Parser.CmmLex,Language.Cmm.Parser.CmmParser,Language.Cmm.Parser. 
>> PPrSyntax,Language.Cmm.Parser.Syntax,Language.Cmm.Parser.Tokens,Langu 
>> age.Cmm.Parser.ParseMonad,Language.Cmm.Parser.ParserUtils,Language.Cm 
>> m.Parser.LexUtils,Language.Cmm.Lint.SymbolTable,Language.Cmm.Lint.Bui 
>> ldTables,Language.Cmm.Lint.LintMonad,Language.Cmm.Lint.Typecheck,Lang 
>> uage.Cmm.Lint.LintProc,Language.Cmm.Lint.LintConstants,Language.Cmm.L 
>> int.LintTop
>> src/Language/Cmm/Parser/CmmLex.hs:19: ghcconfig.h: No such file or
>> directory
> There's the error...
>> The offending file has the same opening, which looks like:
>> --------------------------------------------------------------------- 
>> ----------------
>> {-# OPTIONS -fglasgow-exts -cpp #-}
> So you are listing extensions in the source files rather than the
> .cabal file, which should be OK (except that it's non-portable, of
> course).

Actually, alex is adding that.  Cabal adds the -g option to the Alex  
call, so Alex emits GHC specific constructs.

> So cabal really shouldn't have anything to do with it.  So
> it _should_ be all about how cabal is calling GHC... The question is,
> if the cpp flag is getting to ghc, why isn't ghc itself looking for
> the ghcconfig.h file?

Right; this is what doesn't make sense to me.  I'd expect GHC to know  
where to find its own supporting files.

>   Looks like the difference is here:
>>  /opt/local/bin/ghc -package-name Cmm -odir dist/build/src -hidir
>> dist/build/src --make -isrc Language.Cmm.Frontend  
>> Language.Cmm.Datatypes
>  (...)
>>  /usr/bin/ghc -package-name Cmm -odir dist/build -hidir dist/build
>> -hide-all-packages --make -i -isrc Language.Cmm.Frontend
>  (...)
> But either way, it seems to work for me on my simple test cases, so I
> can't reproduce it with cabal-head (1.1.4) or 1.1.3.  Can you either
> let me see your code or create a small test case that fails?
> Another option is to try to construct a ghc command line which will
> work on both machines.  If you paste the working version onto the
> command line on the broken machine, does it still not work?

If you can't reproduce from the repository I'll try to trim down a  
test case.

> Same versions of alex?

I believe so, but I'll check when I get home.  A visual inspection  
showed at least the beginning of the output files to be identical.

> BTW, does cpphs do anything with ghcconfig.h?  Should cabal be adding
> that include path somewhere in the cases where it uses cpphs?
> peace,
>   isaac

More information about the Haskell mailing list