content: -----------------------------------------------------------------------------
  -- |
  -- 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 = InfoMode | HtmlMode | LatexMode | ManMode 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 "-n" -- nit-picky mode to ensure missing references are caught
              , arg "-w", arg $ outPath -/- ".log" -- dump warnings to log file
              , arg =<< getInput
              , arg outPath ]
    where
      modeString = case mode of
          InfoMode  -> "texinfo"
          HtmlMode  -> "html"
          LatexMode -> "latex"
          ManMode   -> "man"
  