[Haskell-cafe] getting haddock to cooperate with cpp

Roman Cheplyaka roma at ro-che.info
Sat Jul 13 12:22:08 CEST 2013


This is not true either. Cabal preprocesses files that explicitly
indicate (via an extension) that they need to be preprocessed.

For example, a .cpphs file will be preprocessed to yield an .hs file.

.hs files are never preprocessed by Cabal, as far as I can tell.

If you have an .hs file with {-# LANGUAGE CPP #-}, it is a compiler's
job to detect it and run the preprocessor.

But haddock uses the GHC API (which knows how to do the above), so there
shouldn't be issues with that.

Roman

* Felipe Almeida Lessa <felipe.lessa at gmail.com> [2013-07-12 18:34:32-0300]
> I guess that cabal preprocesses the files before calling Haddock then.
>  Perhaps that's why it asks me to `cabal configure` before `cabal
> haddock`ing =).  If you're able to switch over to cabal, that may be
> the easiest solution.
> 
> Cheers,
> 
> On Fri, Jul 12, 2013 at 6:31 PM, Evan Laforge <qdunkan at gmail.com> wrote:
> > I'm calling haddock myself. Cabal might have some special magic for CPP,
> > when I searched for "haddock CPP" I got some old bugs about adding cabal
> > support. So presumably it's possible.
> >
> > On Jul 12, 2013 1:15 PM, "Felipe Almeida Lessa" <felipe.lessa at gmail.com>
> > wrote:
> >>
> >> Are you using `cabal haddock` or calling haddock manually?
> >>
> >> Cheers,
> >>
> >> On Fri, Jul 12, 2013 at 3:25 PM, Evan Laforge <qdunkan at gmail.com> wrote:
> >> > So haddock ignores {-# LANGUAGE CPP #-}, which makes it crash on any
> >> > file that uses it.  But if you pass --optghc=-cpp, it runs CPP on
> >> > everything, which makes it crash on any file that uses string gaps, or
> >> > happens to contain a /*.  /* is rare and easily fixed, but not string
> >> > gaps.
> >> >
> >> > It looks like a workaround would be to manually inspect the files for
> >> > LANGUAGE CPP and run two haddock passes, but then I would have to get
> >> > the two passes to cooperate creating a single TOC and index.
> >> >
> >> > Isn't there some way to run haddock on files that use CPP?
> >> >
> >> > In the broader scheme, it seems perverse to be using CPP in the first
> >> > place.  I use it to configure imports and exports, e.g. to swap out a
> >> > driver backend on different OSes, and to export more symbols when
> >> > testing.  Would it make sense to have a haskell version of CPP that
> >> > provides only these features (e.g. just #ifdef, #else, #endif, and
> >> > #define) and leaves out the problematic C comments and backslash
> >> > expectations?
> >> >
> >> > _______________________________________________
> >> > Haskell-Cafe mailing list
> >> > Haskell-Cafe at haskell.org
> >> > http://www.haskell.org/mailman/listinfo/haskell-cafe
> >>
> >>
> >>
> >> --
> >> Felipe.
> 
> 
> 
> -- 
> Felipe.
> 
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe



More information about the Haskell-Cafe mailing list