diff --git a/hadrian.cabal b/hadrian.cabal index 568b297e65c0750d3f7153bbf8a3ae5757b1183a..7bb249efc13d8a7e9ecaa91bbd9c2545e49b234a 100644 --- a/hadrian.cabal +++ b/hadrian.cabal @@ -28,6 +28,7 @@ executable hadrian , GHC , Hadrian.Builder , Hadrian.Builder.Ar + , Hadrian.Builder.Sphinx , Hadrian.Builder.Tar , Hadrian.Expression , Hadrian.Haskell.Cabal @@ -77,7 +78,6 @@ executable hadrian , Settings.Builders.HsCpp , Settings.Builders.Ld , Settings.Builders.Make - , Settings.Builders.Sphinx , Settings.Builders.Xelatex , Settings.Default , Settings.Flavours.Development diff --git a/src/Builder.hs b/src/Builder.hs index 5545d064069ea1d6358bb09c184c54a55cfe9b20..2b99c039926e3480920b7bcd7fd76541e0f67bd7 100644 --- a/src/Builder.hs +++ b/src/Builder.hs @@ -19,6 +19,7 @@ import GHC.Generics import qualified Hadrian.Builder as H import Hadrian.Builder hiding (Builder) import Hadrian.Builder.Ar +import Hadrian.Builder.Sphinx import Hadrian.Builder.Tar import Hadrian.Oracles.Path import Hadrian.Oracles.TextFile @@ -68,16 +69,6 @@ instance Binary HaddockMode instance Hashable HaddockMode instance NFData HaddockMode --- | Sphinx can be used in three different modes: --- * Convert RST to HTML --- * Convert RST to LaTeX --- * Convert RST to Man pages -data SphinxMode = Html | Latex | Man deriving (Eq, Generic, Show) - -instance Binary SphinxMode -instance Hashable SphinxMode -instance NFData SphinxMode - -- | A 'Builder' is an external command invoked in a separate process via 'cmd'. -- @Ghc Stage0@ is the bootstrapping compiler. -- @Ghc StageN@, N > 0, is the one built in stage (N - 1). diff --git a/src/Hadrian/Builder/Sphinx.hs b/src/Hadrian/Builder/Sphinx.hs new file mode 100644 index 0000000000000000000000000000000000000000..44b522c4d3b83cdc88f3348fbfe0351fbdb49408 --- /dev/null +++ b/src/Hadrian/Builder/Sphinx.hs @@ -0,0 +1,39 @@ +----------------------------------------------------------------------------- +-- | +-- Module : Hadrian.Builder.Sphinx +-- Copyright : (c) Andrey Mokhov 2014-2017 +-- License : MIT (see the file LICENSE) +-- Maintainer : andrey.mokhov@gmail.com +-- Stability : experimental +-- +-- Support for invoking the documentation utility Sphinx. +----------------------------------------------------------------------------- +module Hadrian.Builder.Sphinx (SphinxMode (..), args) where + +import Development.Shake +import Development.Shake.Classes +import GHC.Generics +import Hadrian.Expression +import Hadrian.Utilities + +-- | Sphinx can be used in three different modes to convert reStructuredText +-- documents into HTML, LaTeX or Man pages. +data SphinxMode = Html | Latex | Man deriving (Eq, Generic, Show) + +instance Binary SphinxMode +instance Hashable SphinxMode +instance NFData SphinxMode + +-- | Default command line arguments for invoking the archiving utility @tar@. +args :: (ShakeValue c, ShakeValue b) => SphinxMode -> Args c b +args mode = do + outPath <- getOutput + mconcat [ arg "-b", arg modeString + , arg "-d", arg $ outPath -/- (".doctrees-" ++ modeString) + , arg =<< getInput + , arg outPath ] + where + modeString = case mode of + Html -> "html" + Latex -> "latex" + Man -> "man" diff --git a/src/Settings/Builders/Sphinx.hs b/src/Settings/Builders/Sphinx.hs deleted file mode 100644 index 2338cfcdc6b1934715d1a788cab335dd9607108c..0000000000000000000000000000000000000000 --- a/src/Settings/Builders/Sphinx.hs +++ /dev/null @@ -1,22 +0,0 @@ -module Settings.Builders.Sphinx (sphinxBuilderArgs) where - -import Settings.Builders.Common - -sphinxBuilderArgs :: Args -sphinxBuilderArgs = do - outPath <- getOutput - mconcat [ builder (Sphinx Html) ? mconcat - [ arg "-b", arg "html" - , arg "-d", arg $ outPath -/- ".doctrees-html" - , arg =<< getInput - , arg outPath ] - , builder (Sphinx Latex) ? mconcat - [ arg "-b", arg "latex" - , arg "-d", arg $ outPath -/- ".doctrees-latex" - , arg =<< getInput - , arg outPath ] - , builder (Sphinx Man) ? mconcat - [ arg "-b", arg "man" - , arg "-d", arg $ outPath -/- ".doctrees-man" - , arg =<< getInput - , arg outPath ] ] diff --git a/src/Settings/Default.hs b/src/Settings/Default.hs index 18e0d43d6d735462bfc52a1ab8db197c0759a023..cb42d66f669d297cca7f683dca4af1151484aeaa 100644 --- a/src/Settings/Default.hs +++ b/src/Settings/Default.hs @@ -6,6 +6,7 @@ module Settings.Default ( import qualified Hadrian.Builder.Ar import qualified Hadrian.Builder.Tar +import qualified Hadrian.Builder.Sphinx import CommandLine import Expression @@ -28,7 +29,6 @@ import Settings.Builders.Hsc2Hs import Settings.Builders.HsCpp import Settings.Builders.Ld import Settings.Builders.Make -import Settings.Builders.Sphinx import Settings.Builders.Xelatex import Settings.Packages.Base import Settings.Packages.Cabal @@ -39,7 +39,7 @@ import Settings.Packages.Ghci import Settings.Packages.GhcPkg import Settings.Packages.GhcPrim import Settings.Packages.Haddock -import Settings.Packages.Haskeline (haskelinePackageArgs) +import Settings.Packages.Haskeline import Settings.Packages.IntegerGmp import Settings.Packages.Rts import Settings.Packages.RunGhc @@ -140,9 +140,8 @@ defaultSplitObjects = do -- | All 'Builder'-dependent command line arguments. defaultBuilderArgs :: Args defaultBuilderArgs = mconcat + -- GHC-specific builders: [ alexBuilderArgs - , builder (Ar Pack ) ? Hadrian.Builder.Ar.args Pack - , builder (Ar Unpack) ? Hadrian.Builder.Ar.args Unpack , ccBuilderArgs , configureBuilderArgs , deriveConstantsBuilderArgs @@ -158,10 +157,15 @@ defaultBuilderArgs = mconcat , hsCppBuilderArgs , ldBuilderArgs , makeBuilderArgs - , sphinxBuilderArgs - , builder (Tar Create ) ? Hadrian.Builder.Tar.args Create - , builder (Tar Extract) ? Hadrian.Builder.Tar.args Extract - , xelatexBuilderArgs ] + , xelatexBuilderArgs + -- Generic builders from the Hadrian library: + , builder (Ar Pack ) ? Hadrian.Builder.Ar.args Pack + , builder (Ar Unpack ) ? Hadrian.Builder.Ar.args Unpack + , builder (Sphinx Html ) ? Hadrian.Builder.Sphinx.args Html + , builder (Sphinx Latex) ? Hadrian.Builder.Sphinx.args Latex + , builder (Sphinx Man ) ? Hadrian.Builder.Sphinx.args Man + , builder (Tar Create ) ? Hadrian.Builder.Tar.args Create + , builder (Tar Extract ) ? Hadrian.Builder.Tar.args Extract ] -- TODO: Disable warnings for Windows specifics. -- TODO: Move this elsewhere?