[Haskell-cafe] Cabal files on Windows

John Lato jwlato at gmail.com
Fri Aug 1 18:59:31 EDT 2008

On Fri, Aug 1, 2008 at 8:39 AM, Duncan Coutts
<duncan.coutts at worc.ox.ac.uk> wrote:
> On Sun, 2008-07-27 at 21:01 -0500, John Lato wrote:
>> > Use Haskell String syntax for paths that contain spaces:
>> >
>> > include-dirs:  "C:\\Program Files\\program\\include"
>> Hi Duncan,
>> Thanks, this worked (mostly).  Although I had to change the line to
>> include-dirs: "\"C:\\Program Files\\program\\include\""
>> so that the path would be passed properly to cpp through c2hs.
> Thanks for for filing the ticket John.
> http://hackage.haskell.org/trac/hackage/ticket/316#comment:1
> Turns out Cabal is doing it right and it's c2hs that we need to fix.
> Shouldn't be too hard. Just need to change the way c2hs invokes cpp in
> Main.hs:
>    let cmd  = unwords [cpp, cppOpts, newHeaderFile, ">" ++ preprocFile]
>    tracePreproc cmd
>    exitCode <- liftIO $ system cmd
> to something like:
>    let args = cppOpts ++ [newHeaderFile]
>    tracePreproc (unwords (cmd : args))
>    exitCode <- liftIO $ do
>      preprocHnd <- openFile WriteMode preprocFile
>      process <- runProcess cpp args
>                   Nothing Nothing
>                   Nothing (Just preprocHnd) Nothing
>      waitForProcess process
> Try that, tell me if it works and we can add the patch to the c2hs repo.

I got some compilation errors with this patch.  After I changed the
top two lines as follows:

    let args = [cppOpts, newHeaderFile] --cppOpts :: String, not [String]
    tracePreproc (unwords (cpp:args))    --I think you meant cpp
instead of cmd here

c2hs builds, but I think you can see the problem already.  cppOpts
needs to be a list of arguments, rather than one string, to use it
with runProcess.  Now running c2hs yields a cpp error about an invalid
argument, specifically "-x c -IC:\\Program Files\include".

I've added a ticket to trac (#11) for this, and included a patch to
fix the problem.

More information about the Haskell-Cafe mailing list