diff --git a/Distribution/Make.hs b/Distribution/Make.hs index 214f9d31801a0e1852a7230033e3365b625dc64d..a50313564bfb6b4ae27e2674d210000a057889be 100644 --- a/Distribution/Make.hs +++ b/Distribution/Make.hs @@ -145,7 +145,7 @@ defaultMainNoRead pkg_descr exitWith retVal HaddockCmd -> do - (_, _, args) <- parseHaddockArgs args [] + (_, _, args) <- parseHaddockArgs emptyHaddockFlags args [] no_extra_flags args retVal <- exec "make docs" case retVal of diff --git a/Distribution/Setup.hs b/Distribution/Setup.hs index 1ea64d8ab9817d2685f543ace826b001c07b8587..135cb1efa706b072b7f40fa9545244a997e68b4a 100644 --- a/Distribution/Setup.hs +++ b/Distribution/Setup.hs @@ -46,7 +46,8 @@ module Distribution.Setup (--parseArgs, ConfigFlags(..), emptyConfigFlags, configureArgs, CopyFlags(..), CopyDest(..), InstallFlags(..), emptyInstallFlags, - BuildFlags(..), CleanFlags(..), HaddockFlags(..), PFEFlags(..), + HaddockFlags(..), emptyHaddockFlags, + BuildFlags(..), CleanFlags(..), PFEFlags(..), RegisterFlags(..), emptyRegisterFlags, SDistFlags(..), MaybeUserFlag(..), userOverride, @@ -217,11 +218,16 @@ emptyRegisterFlags = RegisterFlags { regUser=MaybeUserNone, regWithHcPkg=Nothing, regVerbose=0 } +data HaddockFlags = HaddockFlags {haddockHoogle :: Bool + ,haddockVerbose :: Int} + +emptyHaddockFlags :: HaddockFlags +emptyHaddockFlags = HaddockFlags {haddockHoogle = False, haddockVerbose = 0} + -- Following only have verbose flags, but for consistency and -- extensibility we make them into a type. data BuildFlags = BuildFlags {buildVerbose :: Int} data CleanFlags = CleanFlags {cleanVerbose :: Int} -data HaddockFlags = HaddockFlags {haddockVerbose :: Int} data PFEFlags = PFEFlags {pfeVerbose :: Int} -- |Most of these flags are for Configure, but InstPrefix is for Copy. @@ -257,6 +263,8 @@ data Flag a = GhcFlag | NhcFlag | HugsFlag | JhcFlag | DestDir FilePath -- For sdist: | Snapshot + -- For haddock: + | HaddockHoogle -- For everyone: | HelpFlag | Verbose Int @@ -546,10 +554,18 @@ haddockCmd = Cmd { cmdName = "haddock", cmdHelp = "Generate Haddock HTML code from Exposed-Modules.", cmdDescription = "Requires cpphs and haddock.", - cmdOptions = [cmd_help, cmd_verbose], + cmdOptions = [cmd_help, cmd_verbose, + Option "" ["hoogle"] (NoArg HaddockHoogle) "Generate a hoogle database"], cmdAction = HaddockCmd } +parseHaddockArgs :: HaddockFlags -> [String] -> [OptDescr a] -> IO (HaddockFlags, [a], [String]) +parseHaddockArgs = parseArgs haddockCmd updateCfg + where updateCfg (HaddockFlags hoogle verbose) fl = case fl of + HaddockHoogle -> HaddockFlags True verbose + Verbose n -> HaddockFlags hoogle n + _ -> error "Unexpected flag!" + programaticaCmd :: Cmd a programaticaCmd = Cmd { cmdName = "pfe", @@ -562,9 +578,6 @@ programaticaCmd = Cmd { parseProgramaticaArgs :: [String] -> [OptDescr a] -> IO (PFEFlags, [a], [String]) parseProgramaticaArgs = parseNoArgs programaticaCmd PFEFlags -parseHaddockArgs :: [String] -> [OptDescr a] -> IO (HaddockFlags, [a], [String]) -parseHaddockArgs = parseNoArgs haddockCmd HaddockFlags - cleanCmd :: Cmd a cleanCmd = Cmd { cmdName = "clean", diff --git a/Distribution/Simple.hs b/Distribution/Simple.hs index 52aaf56847c9d41d806aa4dbb257eef1cf8e5f9b..4eea113d6a1a21dba7ea7cff10aa721c209ed1ca 100644 --- a/Distribution/Simple.hs +++ b/Distribution/Simple.hs @@ -295,7 +295,7 @@ defaultMainWorker pkg_descr_in action args hooks postHook postBuild args flags pkg_descr localbuildinfo HaddockCmd -> do - (verbose, _, args) <- parseHaddockArgs args [] + (verbose, _, args) <- parseHaddockArgs emptyHaddockFlags args [] pkg_descr <- hookOrInArgs preHaddock args verbose localbuildinfo <- getPersistBuildConfig @@ -397,7 +397,7 @@ getModulePaths bi = mapM (flip (moduleToFilePath (hsSourceDirs bi)) ["hs", "lhs"]) haddock :: PackageDescription -> LocalBuildInfo -> Maybe UserHooks -> HaddockFlags -> IO () -haddock pkg_descr lbi hooks (HaddockFlags verbose) = do +haddock pkg_descr lbi hooks (HaddockFlags hoogle verbose) = do let pps = allSuffixHandlers hooks confHaddock <- do let programConf = withPrograms lbi let haddockName = programName haddockProgram @@ -415,6 +415,7 @@ haddock pkg_descr lbi hooks (HaddockFlags verbose) = do let mockAll bi = mapM_ (mockPP ["-D__HADDOCK__"] pkg_descr bi lbi tmpDir verbose) let showPkg = showPackageId (package pkg_descr) let showDepPkgs = map showPackageId (packageDeps lbi) + let outputFlag = if hoogle then "--hoogle" else "--html" withLib pkg_descr () $ \lib -> do let bi = libBuildInfo lib @@ -426,7 +427,7 @@ haddock pkg_descr lbi hooks (HaddockFlags verbose) = do let haddockFile = joinFileName haddockPref (haddockName pkg_descr) -- FIX: replace w/ rawSystemProgramConf? rawSystemProgram verbose confHaddock - (["--html", + ([outputFlag, "--odir=" ++ haddockPref, "--title=" ++ showPkg ++ ": " ++ synopsis pkg_descr, "--package=" ++ showPkg, @@ -449,7 +450,7 @@ haddock pkg_descr lbi hooks (HaddockFlags verbose) = do mockAll bi inFiles let outFiles = replaceLitExts inFiles rawSystemProgram verbose confHaddock - (["--html", + ([outputFlag, "--odir=" ++ exeTargetDir, "--title=" ++ exeName exe] ++ map ("--use-package=" ++) (showPkg:showDepPkgs)