
I would be happy to work around it if I could, but I can't. As far as I can tell, I can't pass any flags to Haddock via the Cabal file. I would love to tell Hackage to run Haddock like so, "cabal haddock --haddock-option=--optghc=-D__HADDOCK__", but I don't know how.
Let's suppose that I do actually want to define __HADDOCK__ for my library. Can I do this with a user-defined hook using the Cabal library? main :: IO () main = defaultMainWithHooks hooks where hooks = simpleUserHooks { haddockHook = haddockHook' } -- Define CPP __HADDOCK__ macro when running haddock. haddockHook' p l h f = do putStrLn ("f=\"" ++ show f ++ "\"") putStrLn ("f'=\"" ++ show f' ++ "\"") haddock p l (hookedPreProcessors h) f' where -- The Haddock flag to pass a flag to GHC to define the macro. *define__HADDOCK__ = ("haddock",["--optghc=-D__HADDOCK__"])* -- Add the flag to the the other flags. f' = f `mappend` emptyHaddockFlags { haddockProgramArgs = [define__HADDOCK__] } I got the value for define__HADDOCK__ from passing the "--haddock-option=--optghc=-D__HADDOCK__" flag at the command line. If I run "cabal haddock --verbose=3", I get: f="HaddockFlags {haddockProgramPaths = [], haddockProgramArgs = [], haddockHoogle = Flag False, haddockHtmlLocation = NoFlag, haddockExecutables = Flag False, haddockInternal = Flag False, haddockCss = NoFlag, haddockHscolour = Flag False, haddockHscolourCss = NoFlag, haddockDistPref = Flag "dist", haddockVerbosity = Flag Deafening}" f'="HaddockFlags {haddockProgramPaths = [], haddockProgramArgs = * [("haddock",["--optghc=-D__HADDOCK__"])]*, haddockHoogle = Flag False, haddockHtmlLocation = NoFlag, haddockExecutables = Flag False, haddockInternal = Flag False, haddockCss = NoFlag, haddockHscolour = Flag False, haddockHscolourCss = NoFlag, haddockDistPref = Flag "dist", haddockVerbosity = Flag Deafening}" [...] ("/.../haddock",["--html", ... My flag shows up in f' but not in the actual call to haddock. Thus, it doesn't work. With "cabal haddock --verbose=3 --haddock-option=--optghc=-D__HADDOCK__", I get: f="HaddockFlags {haddockProgramPaths = [], haddockProgramArgs = [* ("haddock",["--optghc=-D__HADDOCK__"])]*, haddockHoogle = Flag False, haddockHtmlLocation = NoFlag, haddockExecutables = Flag False, haddockInternal = Flag False, haddockCss = NoFlag, haddockHscolour = Flag False, haddockHscolourCss = NoFlag, haddockDistPref = Flag "dist", haddockVerbosity = Flag Deafening}" f'="HaddockFlags {haddockProgramPaths = [], haddockProgramArgs = * [("haddock",["--optghc=-D__HADDOCK__"]),("haddock",["--optghc=-D__HADDOCK__"])] *, haddockHoogle = Flag False, haddockHtmlLocation = NoFlag, haddockExecutables = Flag False, haddockInternal = Flag False, haddockCss = NoFlag, haddockHscolour = Flag False, haddockHscolourCss = NoFlag, haddockDistPref = Flag "dist", haddockVerbosity = Flag Deafening}" [...] ("/.../haddock",[*"--optghc=-D__HADDOCK__"*,"--html", ... Now, the command-line flag shows up in all 3. And, of course, it works. Is there something wrong with my hook code? Regards, Sean