Fix Haddock (#496)
authorAndrey Mokhov <andrey.mokhov@gmail.com>
Sat, 3 Feb 2018 01:56:47 +0000 (01:56 +0000)
committerGitHub <noreply@github.com>
Sat, 3 Feb 2018 01:56:47 +0000 (01:56 +0000)
See #492.

src/Rules/Documentation.hs
src/Rules/Generate.hs

index 5a5698c..3043f8b 100644 (file)
@@ -117,8 +117,11 @@ allHaddocks = do
     sequence [ pkgHaddockFile $ vanillaContext Stage1 pkg
              | pkg <- pkgs, isLibrary pkg, isHsPackage pkg ]
 
-haddockHtmlLib :: FilePath
-haddockHtmlLib = "inplace/lib/html/haddock-util.js"
+-- TODO: This is fragile and will break if @README.md@ is removed. We need to
+-- improve the story of program runtime dependencies on directories.
+-- See: https://github.com/snowleopard/hadrian/issues/492.
+haddockHtmlResourcesStamp :: FilePath
+haddockHtmlResourcesStamp = "inplace/lib/html/README.md"
 
 -- | Find the haddock files for the dependencies of the current library
 haddockDependencies :: Context -> Action [FilePath]
@@ -135,8 +138,8 @@ buildPackageDocumentation :: Context -> Rules ()
 buildPackageDocumentation context@Context {..} = when (stage == Stage1) $ do
 
     -- Js and Css files for haddock output
-    when (package == haddock) $ haddockHtmlLib %> \_ -> do
-        let dir = takeDirectory haddockHtmlLib
+    when (package == haddock) $ haddockHtmlResourcesStamp %> \_ -> do
+        let dir = takeDirectory haddockHtmlResourcesStamp
         liftIO $ removeFiles dir ["//*"]
         copyDirectory "utils/haddock/haddock-api/resources/html" dir
 
@@ -144,7 +147,7 @@ buildPackageDocumentation context@Context {..} = when (stage == Stage1) $ do
     "//" ++ pkgName package <.> "haddock" %> \file -> do
         haddocks <- haddockDependencies context
         srcs <- hsSources context
-        need $ srcs ++ haddocks ++ [haddockHtmlLib]
+        need $ srcs ++ haddocks ++ [haddockHtmlResourcesStamp]
 
         -- Build Haddock documentation
         -- TODO: pass the correct way from Rules via Context
index 8e2b65d..8616da0 100644 (file)
@@ -141,6 +141,12 @@ generatePackageCode context@(Context stage pkg _) =
         when (pkg == rts) $ "//" ++ dir -/- "cmm/AutoApply.cmm" %> \file ->
             build $ target context GenApply [] [file]
 
+-- TODO: These rules copy runtime dependencies of some executables, such as GHC
+-- itself (file @ghc-usage.txt@) or Hsc2Hs (file @template-hsc.h@). Ideally,
+-- these rules should be moved to package-specific settings, so that they can be
+-- discovered more easily. We also need to add proper support for runtime
+-- dependencies on directories, which is the case for Haddock -- for the current
+-- workaround see "Rules.Documentation.haddockHtmlResourcesStamp".
 copyRules :: Rules ()
 copyRules = do
     (inplaceLibPath -/- "ghc-usage.txt")     <~ return "driver"