diff options
-rw-r--r-- | compiler/ghc.mk | 2 | ||||
-rw-r--r-- | ghc.mk | 7 | ||||
-rw-r--r-- | rules/haddock.mk | 29 | ||||
-rw-r--r-- | utils/ghc-cabal/ghc-cabal.hs | 38 |
4 files changed, 34 insertions, 42 deletions
diff --git a/compiler/ghc.mk b/compiler/ghc.mk index 901b069599..b33117a61b 100644 --- a/compiler/ghc.mk +++ b/compiler/ghc.mk @@ -395,7 +395,7 @@ compiler_stage3_CONFIGURE_OPTS := $(compiler_stage2_CONFIGURE_OPTS) compiler_stage1_CONFIGURE_OPTS += --ghc-option=-DSTAGE=1 compiler_stage2_CONFIGURE_OPTS += --ghc-option=-DSTAGE=2 compiler_stage3_CONFIGURE_OPTS += --ghc-option=-DSTAGE=3 -compiler_stage2_HADDOCK_OPTS += --haddock-option=--optghc=-DSTAGE=2 +compiler_stage2_HADDOCK_OPTS += --optghc=-DSTAGE=2 compiler_stage1_CONFIGURE_OPTS += --ghc-options='$(GhcStage1HcOpts)' compiler_stage2_CONFIGURE_OPTS += --ghc-options='$(GhcStage2HcOpts)' @@ -442,9 +442,8 @@ PRIMOPS_TXT = $(GHC_COMPILER_DIR)/prelude/primops.txt libraries/ghc-prim/dist-install/build/GHC/PrimopWrappers.hs : $(GENPRIMOP_INPLACE) $(PRIMOPS_TXT) | $$(dir $$@)/. "$(GENPRIMOP_INPLACE)" --make-haskell-wrappers <$(PRIMOPS_TXT) >$@ -libraries/ghc-prim/GHC/Prim.hs : $(GENPRIMOP_INPLACE) $(PRIMOPS_TXT) - "$(GENPRIMOP_INPLACE)" --make-haskell-source <$(PRIMOPS_TXT) >$@ - +# Required so that Haddock documents the primops. +libraries/ghc-prim_dist-install_EXTRA_HADDOCK_SRCS = libraries/ghc-prim/dist-install/build/autogen/GHC/Prim.hs # ----------------------------------------------------------------------------- # Include build instructions from all subdirs @@ -729,7 +728,7 @@ install_perl : $(INPLACE_PERL) endif # Windows ifneq "$(BINDIST)" "YES" -$(ghc-prim_HADDOCK_FILE): \ +$(ghc-prim-$(libraries/ghc-prim_dist-install_VERSION)_HADDOCK_FILE): \ libraries/ghc-prim/dist-install/build/autogen/GHC/Prim.hs \ libraries/ghc-prim/dist-install/build/autogen/GHC/PrimopWrappers.hs endif # BINDIST diff --git a/rules/haddock.mk b/rules/haddock.mk index 98838c969b..f0d0aff7aa 100644 --- a/rules/haddock.mk +++ b/rules/haddock.mk @@ -15,31 +15,42 @@ define haddock # args: $1 = dir, $2 = distdir ifneq "$$($1_$2_DO_HADDOCK)" "NO" -ifeq "$$($$($1_PACKAGE)_HADDOCK_FILE)" "" -$$($1_PACKAGE)_HADDOCK_FILE = $1/$2/doc/html/$$($1_PACKAGE)/$$($1_PACKAGE).haddock -ALL_HADDOCK_FILES += $$($$($1_PACKAGE)_HADDOCK_FILE) +ifeq "$$($$($1_PACKAGE)-$$($1_$2_VERSION)_HADDOCK_FILE)" "" +$$($1_PACKAGE)-$$($1_$2_VERSION)_HADDOCK_FILE = $1/$2/doc/html/$$($1_PACKAGE)/$$($1_PACKAGE).haddock +ALL_HADDOCK_FILES += $$($$($1_PACKAGE)-$$($1_$2_VERSION)_HADDOCK_FILE) else $$(error Already got a haddock file for $$($1_PACKAGE)) endif -haddock: $$($$($1_PACKAGE)_HADDOCK_FILE) +haddock: $$($$($1_PACKAGE)-$$($1_$2_VERSION)_HADDOCK_FILE) ifeq "$$(HADDOCK_DOCS)" "YES" $(call all-target,$1_$2_haddock,html_$1) endif .PHONY: html_$1 -html_$1 : $$($$($1_PACKAGE)_HADDOCK_FILE) +html_$1 : $$($$($1_PACKAGE)-$$($1_$2_VERSION)_HADDOCK_FILE) -$$($1_PACKAGE)_HADDOCK_DEPS = $$(foreach n,$$($1_$2_DEP_NAMES),$$($$n_HADDOCK_FILE)) +$$($1_PACKAGE)-$$($1_$2_VERSION)_HADDOCK_DEPS = $$(foreach n,$$($1_$2_DEPS),$$($$n_HADDOCK_FILE)) ifeq "$$(HSCOLOUR_SRCS)" "YES" -$1_$2_HADDOCK_FLAGS += --hyperlink-source +$1_$2_HADDOCK_FLAGS += --source-module=src/%{MODULE/./-}.html --source-entity=src/%{MODULE/./-}.html#%{NAME} endif ifneq "$$(BINDIST)" "YES" -$$($$($1_PACKAGE)_HADDOCK_FILE) : $$(INPLACE_BIN)/haddock$$(exeext) $$(GHC_CABAL_INPLACE) $$($1_$2_HS_SRCS) $$($$($1_PACKAGE)_HADDOCK_DEPS) | $$$$(dir $$$$@)/. - "$$(GHC_CABAL_INPLACE)" haddock $2 $1 --with-haddock=$$(TOP)/$$(INPLACE_BIN)/haddock --with-ghc=$$(TOP)/$$(INPLACE_BIN)/ghc-stage2 $$($1_$2_HADDOCK_FLAGS) $$($1_$2_HADDOCK_OPTS) +$$($$($1_PACKAGE)-$$($1_$2_VERSION)_HADDOCK_FILE) : $$(INPLACE_BIN)/haddock$$(exeext) $$(GHC_CABAL_INPLACE) $$($1_$2_HS_SRCS) $$($$($1_PACKAGE)-$$($1_$2_VERSION)_HADDOCK_DEPS) | $$$$(dir $$$$@)/. + "$$(GHC_CABAL_INPLACE)" hscolour $2 $1 + "$$(TOP)/$$(INPLACE_BIN)/haddock" \ + --odir="$1/$2/doc/html/$$($1_PACKAGE)" \ + --dump-interface=$$($$($1_PACKAGE)-$$($1_$2_VERSION)_HADDOCK_FILE) \ + --html \ + --title="$$($1_PACKAGE)-$$($1_$2_VERSION)$$(if $$(strip $$($1_$2_SYNOPSIS)),: $$(strip $$($1_$2_SYNOPSIS)),)" \ + --prologue="$1/$2/haddock-prologue.txt" \ + $$(foreach pkg,$$($1_$2_DEPS),$$(if $$($$(pkg)_HADDOCK_FILE),--read-interface=../$$(pkg)$$(comma)$$($$(pkg)_HADDOCK_FILE))) \ + $$(foreach opt,$$($1_$2_v_ALL_HC_OPTS),--optghc=$$(opt)) \ + $$($1_$2_HADDOCK_FLAGS) $$($1_$2_HADDOCK_OPTS) \ + $$($1_$2_HS_SRCS) \ + $$($1_$2_EXTRA_HADDOCK_SRCS) # Make the haddocking depend on the library .a file, to ensure # that we wait until the library is fully build before we haddock it diff --git a/utils/ghc-cabal/ghc-cabal.hs b/utils/ghc-cabal/ghc-cabal.hs index c3a4789089..2e967e935b 100644 --- a/utils/ghc-cabal/ghc-cabal.hs +++ b/utils/ghc-cabal/ghc-cabal.hs @@ -30,8 +30,8 @@ import System.FilePath main :: IO () main = do args <- getArgs case args of - "haddock" : distDir : dir : args' -> - runHaddock distDir dir args' + "hscolour" : distDir : dir : args' -> + runHsColour distDir dir args' "check" : dir : [] -> doCheck dir "install" : ghc : ghcpkg : strip : topdir : directory : distDir @@ -52,7 +52,7 @@ syntax_error :: [String] syntax_error = ["syntax: ghc-cabal configure <configure-args> -- <distdir> <directory>...", " ghc-cabal install <ghc-pkg> <directory> <distdir> <destdir> <prefix> <args>...", - " ghc-cabal haddock <distdir> <directory> <args>..."] + " ghc-cabal hscolour <distdir> <directory> <args>..."] die :: [String] -> IO a die errs = do mapM_ (hPutStrLn stderr) errs @@ -111,32 +111,10 @@ doCheck directory where isFailure (PackageDistSuspicious {}) = False isFailure _ = True -runHaddock :: FilePath -> FilePath -> [String] -> IO () -runHaddock distdir directory args +runHsColour :: FilePath -> FilePath -> [String] -> IO () +runHsColour distdir directory args = withCurrentDirectory directory - $ defaultMainWithHooksArgs hooks ("haddock" : "--builddir" : distdir : args) - where - hooks = userHooks { - haddockHook = modHook (haddockHook userHooks) - } - modHook f pd lbi us flags - | packageName pd == PackageName "ghc-prim" - = let pd' = case library pd of - Just lib -> - let ghcPrim = fromJust (simpleParse "GHC.Prim") - ems = filter (ghcPrim /=) - (exposedModules lib) - lib' = lib { exposedModules = ems } - in pd { library = Just lib' } - Nothing -> - error "Expected a library, but none found" - pc = withPrograms lbi - pc' = userSpecifyArgs "haddock" - ["dist-install/build/autogen/GHC/Prim.hs"] pc - lbi' = lbi { withPrograms = pc' } - in f pd' lbi' us flags - | otherwise - = f pd lbi us flags + $ defaultMainArgs ("hscolour" : "--builddir" : distdir : args) doInstall :: FilePath -> FilePath -> FilePath -> FilePath -> FilePath -> FilePath -> FilePath -> FilePath -> FilePath -> FilePath @@ -358,6 +336,7 @@ generate config_args distdir directory let variablePrefix = directory ++ '_':distdir let xs = [variablePrefix ++ "_VERSION = " ++ display (pkgVersion (package pd)), variablePrefix ++ "_MODULES = " ++ unwords (map display modules), + variablePrefix ++ "_SYNOPSIS =" ++ synopsis pd, variablePrefix ++ "_HS_SRC_DIRS = " ++ unwords (hsSourceDirs bi), variablePrefix ++ "_DEPS = " ++ unwords (map display dep_ids), variablePrefix ++ "_DEP_NAMES = " ++ unwords (map (display . packageName) dep_ids), @@ -384,6 +363,9 @@ generate config_args distdir directory variablePrefix ++ "_DEP_EXTRA_LIBS = " ++ unwords (forDeps Installed.extraLibraries), variablePrefix ++ "_DEP_LD_OPTS = " ++ unwords (forDeps Installed.ldOptions)] writeFile (distdir ++ "/package-data.mk") $ unlines xs + writeFile (distdir ++ "/haddock-prologue.txt") $ + if null (description pd) then synopsis pd + else description pd where escape = foldr (\c xs -> if c == '#' then '\\':'#':xs else c:xs) [] wrap = map (\s -> "\'" ++ s ++ "\'") |