summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/ghc.mk2
-rw-r--r--ghc.mk7
-rw-r--r--rules/haddock.mk29
-rw-r--r--utils/ghc-cabal/ghc-cabal.hs38
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)'
diff --git a/ghc.mk b/ghc.mk
index 9eaa7cd3e2..2c189b916e 100644
--- a/ghc.mk
+++ b/ghc.mk
@@ -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 ++ "\'")