Skip to content

Commit

Permalink
Haddock errors are no longer fatal, but prevent common ones anyway
Browse files Browse the repository at this point in the history
Haddock errors aren't fatal any more, but Cabal now knows not to invoke Haddock when there is no input for it to process.
  • Loading branch information
typedrat committed Jul 27, 2018
1 parent df0ce41 commit 6e407de
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 6 deletions.
4 changes: 4 additions & 0 deletions Cabal/ChangeLog.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
# 2.4.0.0 (current development version)
* `Distribution.Simple.Haddock` now checks to ensure that it
does not erroneously call Haddock with no target modules.
([#5232](https://github.com/haskell/cabal/issues/5232),
[#5459](https://github.com/haskell/cabal/issues/5459)).
* Add more Lens combinators (`to`, `traversed`, `filtered`,
`non`) and an optic to access the modules in a component
of a `PackageDescription` by the `ComponentName`.
Expand Down
7 changes: 7 additions & 0 deletions Cabal/Distribution/Simple/Haddock.hs
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,13 @@ haddock pkg_descr _ _ haddockFlags
++ "a library. Perhaps you want to use the --executables, --tests,"
++ " --benchmarks or --foreign-libraries flags."

haddock _ _ _ haddockFlags
| null (argTargets haddockFlags) = warn verbosity $
"Haddocks are being requested, but there aren't any modules given "
++ "to create documentation for."
where
verbosity = fromFlag $ haddockVerbosity haddockFlags

haddock pkg_descr lbi suffixes flags' = do
let verbosity = flag haddockVerbosity
comp = compiler lbi
Expand Down
22 changes: 18 additions & 4 deletions cabal-install/Distribution/Client/ProjectBuilding.hs
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,15 @@ import Distribution.Client.SourceFiles
import Distribution.Client.SrcDist (allPackageSourceFiles)
import Distribution.Client.Utils (removeExistingFile)

import Distribution.Compat.Lens
import Distribution.Package hiding (InstalledPackageId, installedPackageId)
import qualified Distribution.PackageDescription as PD
import Distribution.InstalledPackageInfo (InstalledPackageInfo)
import qualified Distribution.InstalledPackageInfo as Installed
import Distribution.Simple.BuildPaths (haddockDirName)
import qualified Distribution.Simple.InstallDirs as InstallDirs
import Distribution.Types.BuildType
import Distribution.Types.PackageDescription.Lens (componentModules)
import Distribution.Simple.Program
import qualified Distribution.Simple.Setup as Cabal
import Distribution.Simple.Command (CommandUI)
Expand Down Expand Up @@ -1049,8 +1051,8 @@ buildAndInstallUnpackedPackage verbosity
isParallelBuild = buildSettingNumJobs >= 2

whenHaddock action
| elabBuildHaddocks pkg = action
| otherwise = return ()
| hasValidHaddockTargets = action
| otherwise = return ()

configureCommand = Cabal.configureCommand defaultProgramDb
configureFlags v = flip filterConfigureFlags v $
Expand Down Expand Up @@ -1115,6 +1117,18 @@ buildAndInstallUnpackedPackage verbosity
Just logFile -> withFile logFile AppendMode (action . Just)


hasValidHaddockTargets :: ElaboratedConfiguredPackage -> Bool
hasValidHaddockTargets pkg
| not (elabBuildHaddocks pkg) = False
| otherwise = any componentHasHaddocks components
where
components = elabHaddockTargets pkg
pd = elabPkgDescription pkg

componentHasHaddocks (ComponentTarget name _) =
not (null (pd ^. componentModules name))


buildInplaceUnpackedPackage :: Verbosity
-> DistDirLayout
-> BuildTimeSettings -> Lock -> Lock
Expand Down Expand Up @@ -1285,8 +1299,8 @@ buildInplaceUnpackedPackage verbosity
| otherwise = action

whenHaddock action
| elabBuildHaddocks pkg = action
| otherwise = return ()
| hasValidHaddockTargets = action
| otherwise = return ()

whenReRegister action
= case buildStatus of
Expand Down
11 changes: 10 additions & 1 deletion cabal-install/Distribution/Client/ProjectOrchestration.hs
Original file line number Diff line number Diff line change
Expand Up @@ -940,7 +940,7 @@ dieOnBuildFailures verbosity plan buildOutcomes

-- For all failures, print either a short summary (if we showed the
-- build log) or all details
die' verbosity $ unlines
fail' verbosity $ unlines
[ case failureClassification of
ShowBuildSummaryAndLog reason _
| verbosity > normal
Expand Down Expand Up @@ -969,6 +969,15 @@ dieOnBuildFailures verbosity plan buildOutcomes
maybeToList (InstallPlan.lookup plan pkgid)
]

fail'
| all isHaddockFailure failuresClassification = warn
| otherwise = die'
where
isHaddockFailure (_, ShowBuildSummaryOnly (HaddocksFailed _) ) = True
isHaddockFailure (_, ShowBuildSummaryAndLog (HaddocksFailed _) _) = True
isHaddockFailure _ = False


classifyBuildFailure :: BuildFailure -> BuildFailurePresentation
classifyBuildFailure BuildFailure {
buildFailureReason = reason,
Expand Down
5 changes: 4 additions & 1 deletion cabal-install/changelog
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
-*-change-log-*-

2.4.0.0 (current development version)
* 'new-install' now supports installing libraries and local
* 'new-build' now treats Haddock errors non-fatally. In addition,
it attempts to avoid trying to generate Haddocks when there is
nothing to generate them from. (#5232, #5459)
* 'new-install' now supports installing libraries and local
components. (#5399)
* Drop support for GHC 7.4, since it is out of our support window
(and has been for over a year!).
Expand Down

0 comments on commit 6e407de

Please sign in to comment.