Fix documentation rules (#324)
authorZhen Zhang <izgzhen@gmail.com>
Sun, 9 Jul 2017 10:21:31 +0000 (18:21 +0800)
committerAndrey Mokhov <andrey.mokhov@gmail.com>
Sun, 9 Jul 2017 10:21:31 +0000 (11:21 +0100)
src/Rules/Documentation.hs
src/Rules/Install.hs
src/Rules/Wrappers.hs

index cf54e0a..5ee6818 100644 (file)
@@ -7,11 +7,14 @@ import Flavour
 import GHC
 import Oracles.ModuleFiles
 import Oracles.PackageData
+import Oracles.Path (getTopDirectory)
 import Settings
 import Settings.Path
 import Target
 import Util
 
+import qualified System.Directory as IO
+
 haddockHtmlLib :: FilePath
 haddockHtmlLib = "inplace/lib/html/haddock-util.js"
 
@@ -31,13 +34,6 @@ buildPackageDocumentation context@Context {..} =
                            , depPkg /= rts ]
             need $ srcs ++ haddocks ++ [haddockHtmlLib]
 
-            -- HsColour sources
-            -- TODO: what is the output of GhcCabalHsColour?
-            whenM (isSpecified HsColour) $ do
-                pkgConf <- pkgConfFile context
-                need [ cabalFile, pkgConf ] -- TODO: check if need pkgConf
-                build $ Target context GhcCabalHsColour [cabalFile] []
-
             -- Build Haddock documentation
             -- TODO: pass the correct way from Rules via Context
             let haddockWay = if dynamicGhcPrograms flavour then dynamic else vanilla
@@ -47,6 +43,13 @@ buildPackageDocumentation context@Context {..} =
             let dir = takeDirectory haddockHtmlLib
             liftIO $ removeFiles dir ["//*"]
             copyDirectory "utils/haddock/haddock-api/resources/html" dir
+  where
+    excluded = Or
+        [ Test "//haddock-prologue.txt"
+        , Test "//package-data.mk"
+        , Test "//setup-config"
+        , Test "//inplace-pkg-config"
+        , Test "//build" ]
 
 -- # Make the haddocking depend on the library .a file, to ensure
 -- # that we wait until the library is fully built before we haddock it
index 4c91316..553f8d1 100644 (file)
@@ -193,6 +193,20 @@ installPackages = do
                 let ghcCabalInplace = inplaceBinPath -/- "ghc-cabal" -- HACK?
                 need [ ghcCabalInplace ]
 
+                let cabalFile = pkgCabalFile pkg
+                -- HsColour sources
+                -- QUESTION: what is the output of GhcCabalHsColour?
+                whenM (isSpecified HsColour) $ do
+                    top <- interpretInContext context getTopDirectory
+                    let installDistDir = top -/- buildPath context
+                    -- HACK: copy stuff back to the place favored by ghc-cabal
+                    quietly $ copyDirectoryContents (Not excluded)
+                                  installDistDir (installDistDir -/- "build")
+
+                pkgConf <- pkgConfFile context
+                need [ cabalFile, pkgConf ] -- TODO: check if need pkgConf
+                build $ Target context GhcCabalHsColour [cabalFile] []
+
                 -- HACK (#318): copy stuff back to the place favored by ghc-cabal
                 quietly $ copyDirectoryContents (Not excluded)
                             installDistDir (installDistDir -/- "build")
index b6f1266..6adf3f7 100644 (file)
@@ -109,12 +109,21 @@ hsc2hsWrapper WrappedBinary{..} = do
         , "HSC2HS_EXTRA=\"" ++ hsc2hsExtra ++ "\""
         , contents ]
 
+haddockWrapper :: WrappedBinary -> Expr String
+haddockWrapper WrappedBinary{..} = do
+  lift $ need [sourcePath -/- "Rules/Wrappers.hs"]
+  return $ unlines
+    [ "#!/bin/bash"
+    , "exec " ++ (binaryLibPath -/- "bin" -/- binaryName)
+      ++ " -B" ++ binaryLibPath ++ " -l" ++ binaryLibPath ++ " ${1+\"$@\"}" ]
+
 wrappersCommon :: [(Context, Wrapper)]
 wrappersCommon = [ (vanillaContext Stage0 ghc   , ghcWrapper)
                  , (vanillaContext Stage1 ghc   , ghcWrapper)
                  , (vanillaContext Stage1 hp2ps , hp2psWrapper)
                  , (vanillaContext Stage1 hpc   , hpcWrapper)
-                 , (vanillaContext Stage1 hsc2hs, hsc2hsWrapper) ]
+                 , (vanillaContext Stage1 hsc2hs, hsc2hsWrapper)
+                 , (vanillaContext Stage2 haddock, haddockWrapper)]
 
 -- | List of wrappers for inplace artefacts
 inplaceWrappers :: [(Context, Wrapper)]
@@ -127,4 +136,3 @@ installWrappers :: [(Context, Wrapper)]
 installWrappers = wrappersCommon ++
                   [ (vanillaContext Stage0 ghcPkg, installGhcPkgWrapper)
                   , (vanillaContext Stage1 runGhc, installRunGhcWrapper) ]
-