Skip to content

Commit 0fbf3a7

Browse files
committed
'cabal haddock': warn instead of dying when 'hscolour' isn't installed.
This means that if 'hyperlink-source' is set to True, but the 'HsColour' executable is not present, documentation will be still generated. Note that 'cabal hscolour' will still exit with error in this case.
1 parent af349b5 commit 0fbf3a7

File tree

1 file changed

+38
-33
lines changed

1 file changed

+38
-33
lines changed

Cabal/Distribution/Simple/Haddock.hs

Lines changed: 38 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import Distribution.Simple.GHC ( componentGhcOptions, ghcLibDir )
3737
import Distribution.Simple.Program.GHC
3838
( GhcOptions(..), GhcDynLinkMode(..), renderGhcOptions )
3939
import Distribution.Simple.Program
40-
( ConfiguredProgram(..), requireProgramVersion
40+
( ConfiguredProgram(..), lookupProgramVersion, requireProgramVersion
4141
, rawSystemProgram, rawSystemProgramStdout
4242
, hscolourProgram, haddockProgram )
4343
import Distribution.Simple.PreProcess
@@ -79,6 +79,7 @@ import Language.Haskell.Extension
7979

8080
import Control.Monad ( when, forM_ )
8181
import Data.Either ( rights )
82+
import Data.Functor ( (<$>) )
8283
import Data.Monoid
8384
import Data.Maybe ( fromMaybe, listToMaybe )
8485

@@ -184,8 +185,9 @@ haddock pkg_descr lbi suffixes flags = do
184185

185186
initialBuildSteps (flag haddockDistPref) pkg_descr lbi verbosity
186187

187-
when (flag haddockHscolour) $ hscolour' pkg_descr lbi suffixes $
188-
defaultHscolourFlags `mappend` haddockToHscolour flags
188+
when (flag haddockHscolour) $
189+
hscolour' (warn verbosity) pkg_descr lbi suffixes
190+
(defaultHscolourFlags `mappend` haddockToHscolour flags)
189191

190192
libdirArgs <- getGhcLibDir verbosity lbi
191193
let commonArgs = mconcat
@@ -599,49 +601,52 @@ hscolour pkg_descr lbi suffixes flags = do
599601
-- we preprocess even if hscolour won't be found on the machine
600602
-- will this upset someone?
601603
initialBuildSteps distPref pkg_descr lbi verbosity
602-
hscolour' pkg_descr lbi suffixes flags
604+
hscolour' die pkg_descr lbi suffixes flags
603605
where
604606
verbosity = fromFlag (hscolourVerbosity flags)
605607
distPref = fromFlag $ hscolourDistPref flags
606608

607609
hscolour' :: PackageDescription
610+
-> (String -> IO ()) -- ^ Called when the 'hscolour' exe is not found.
608611
-> LocalBuildInfo
609612
-> [PPSuffixHandler]
610613
-> HscolourFlags
611614
-> IO ()
612-
hscolour' pkg_descr lbi suffixes flags = do
613-
let distPref = fromFlag $ hscolourDistPref flags
614-
(hscolourProg, _, _) <-
615-
requireProgramVersion
616-
verbosity hscolourProgram
617-
(orLaterVersion (Version [1,8] [])) (withPrograms lbi)
618-
619-
setupMessage verbosity "Running hscolour for" (packageId pkg_descr)
620-
createDirectoryIfMissingVerbose verbosity True $ hscolourPref distPref pkg_descr
621-
622-
let pre c = preprocessComponent pkg_descr c lbi False verbosity suffixes
623-
withAllComponentsInBuildOrder pkg_descr lbi $ \comp _ -> do
624-
pre comp
625-
let
626-
doExe com = case (compToExe com) of
627-
Just exe -> do
628-
let outputDir = hscolourPref distPref pkg_descr </> exeName exe </> "src"
629-
runHsColour hscolourProg outputDir =<< getExeSourceFiles lbi exe
630-
Nothing -> do
631-
warn (fromFlag $ hscolourVerbosity flags)
632-
"Unsupported component, skipping..."
633-
return ()
634-
case comp of
635-
CLib lib -> do
636-
let outputDir = hscolourPref distPref pkg_descr </> "src"
637-
runHsColour hscolourProg outputDir =<< getLibSourceFiles lbi lib
638-
CExe _ -> when (fromFlag (hscolourExecutables flags)) $ doExe comp
639-
CTest _ -> when (fromFlag (hscolourTestSuites flags)) $ doExe comp
640-
CBench _ -> when (fromFlag (hscolourBenchmarks flags)) $ doExe comp
615+
hscolour' onNoHsColour pkg_descr lbi suffixes flags = do
616+
either onNoHsColour (\(hscolourProg, _, _) -> go hscolourProg) <$>
617+
lookupProgramVersion verbosity hscolourProgram
618+
(orLaterVersion (Version [1,8] [])) (withPrograms lbi)
641619
where
620+
go hscolourProg = do
621+
setupMessage verbosity "Running hscolour for" (packageId pkg_descr)
622+
createDirectoryIfMissingVerbose verbosity True $
623+
hscolourPref distPref pkg_descr
624+
625+
let pre c = preprocessComponent pkg_descr c lbi False verbosity suffixes
626+
withAllComponentsInBuildOrder pkg_descr lbi $ \comp _ -> do
627+
pre comp
628+
let
629+
doExe com = case (compToExe com) of
630+
Just exe -> do
631+
let outputDir = hscolourPref distPref pkg_descr
632+
</> exeName exe </> "src"
633+
runHsColour hscolourProg outputDir =<< getExeSourceFiles lbi exe
634+
Nothing -> do
635+
warn (fromFlag $ hscolourVerbosity flags)
636+
"Unsupported component, skipping..."
637+
return ()
638+
case comp of
639+
CLib lib -> do
640+
let outputDir = hscolourPref distPref pkg_descr </> "src"
641+
runHsColour hscolourProg outputDir =<< getLibSourceFiles lbi lib
642+
CExe _ -> when (fromFlag (hscolourExecutables flags)) $ doExe comp
643+
CTest _ -> when (fromFlag (hscolourTestSuites flags)) $ doExe comp
644+
CBench _ -> when (fromFlag (hscolourBenchmarks flags)) $ doExe comp
645+
642646
stylesheet = flagToMaybe (hscolourCSS flags)
643647

644648
verbosity = fromFlag (hscolourVerbosity flags)
649+
distPref = fromFlag (hscolourDistPref flags)
645650

646651
runHsColour prog outputDir moduleFiles = do
647652
createDirectoryIfMissingVerbose verbosity True outputDir

0 commit comments

Comments
 (0)