Skip to content

Commit baf416f

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 baf416f

File tree

1 file changed

+39
-34
lines changed

1 file changed

+39
-34
lines changed

Cabal/Distribution/Simple/Haddock.hs

Lines changed: 39 additions & 34 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
@@ -184,8 +184,9 @@ haddock pkg_descr lbi suffixes flags = do
184184

185185
initialBuildSteps (flag haddockDistPref) pkg_descr lbi verbosity
186186

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

190191
libdirArgs <- getGhcLibDir verbosity lbi
191192
let commonArgs = mconcat
@@ -599,49 +600,53 @@ hscolour pkg_descr lbi suffixes flags = do
599600
-- we preprocess even if hscolour won't be found on the machine
600601
-- will this upset someone?
601602
initialBuildSteps distPref pkg_descr lbi verbosity
602-
hscolour' pkg_descr lbi suffixes flags
603+
hscolour' die pkg_descr lbi suffixes flags
603604
where
604605
verbosity = fromFlag (hscolourVerbosity flags)
605606
distPref = fromFlag $ hscolourDistPref flags
606607

607-
hscolour' :: PackageDescription
608+
hscolour' :: (String -> IO ()) -- ^ Called when the 'hscolour' exe is not found.
609+
-> PackageDescription
608610
-> LocalBuildInfo
609611
-> [PPSuffixHandler]
610612
-> HscolourFlags
611613
-> 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
614+
hscolour' onNoHsColour pkg_descr lbi suffixes flags =
615+
either onNoHsColour (\(hscolourProg, _, _) -> go hscolourProg) =<<
616+
lookupProgramVersion verbosity hscolourProgram
617+
(orLaterVersion (Version [1,8] [])) (withPrograms lbi)
641618
where
619+
go :: ConfiguredProgram -> IO ()
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)