diff --git a/cabal-install/src/Distribution/Client/CmdHaddock.hs b/cabal-install/src/Distribution/Client/CmdHaddock.hs index 2a982bf4aef..97342bcd5f6 100644 --- a/cabal-install/src/Distribution/Client/CmdHaddock.hs +++ b/cabal-install/src/Distribution/Client/CmdHaddock.hs @@ -24,7 +24,7 @@ import Distribution.Client.TargetProblem import Distribution.Client.NixStyleOptions ( NixStyleFlags (..), nixStyleOptions, defaultNixStyleFlags ) import Distribution.Client.Setup - ( GlobalFlags, ConfigFlags(..) ) + ( GlobalFlags, ConfigFlags(..), InstallFlags (..)) import Distribution.Simple.Setup ( HaddockFlags(..), fromFlagOrDefault, trueArg ) import Distribution.Simple.Command @@ -141,7 +141,8 @@ haddockAction flags@NixStyleFlags {..} targetStrings globalFlags = do runProjectPostBuildPhase verbosity baseCtx buildCtx' buildOutcomes where verbosity = fromFlagOrDefault normal (configVerbosity configFlags) - cliConfig = commandLineFlagsToProjectConfig globalFlags flags mempty -- ClientInstallFlags, not needed here + flags' = flags { installFlags = installFlags { installDocumentation = Flag True } } + cliConfig = commandLineFlagsToProjectConfig globalFlags flags' mempty -- ClientInstallFlags, not needed here -- | This defines what a 'TargetSelector' means for the @haddock@ command. -- It selects the 'AvailableTarget's that the 'TargetSelector' refers to, diff --git a/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/B/B.cabal b/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/B/B.cabal new file mode 100644 index 00000000000..b24368c41cd --- /dev/null +++ b/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/B/B.cabal @@ -0,0 +1,12 @@ +cabal-version: 2.4 +name: B +version: 0.1.0.0 +author: Artem Pelenitsyn +maintainer: a.pelenitsyn@gmail.com + +library + exposed-modules: B + build-depends: base + , A + hs-source-dirs: . + default-language: Haskell2010 diff --git a/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/B/B.hs b/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/B/B.hs new file mode 100644 index 00000000000..09b2bc9bae8 --- /dev/null +++ b/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/B/B.hs @@ -0,0 +1,8 @@ +-- | Module using external dependency and mentioning it in haddocks +module B (b) where + +import A + +-- | Use 'a' +b :: Int +b = a diff --git a/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/cabal.out b/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/cabal.out new file mode 100644 index 00000000000..42d235c367e --- /dev/null +++ b/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/cabal.out @@ -0,0 +1,19 @@ +# cabal v2-update +Downloading the latest package list from test-local-repo +# cabal haddock +Resolving dependencies... +Build profile: -w ghc- -O1 +In order, the following will be built: + - A-0.1.0.0 (lib) (requires build) + - B-0.1.0.0 (lib) (first run) +Configuring library for A-0.1.0.0.. +Preprocessing library for A-0.1.0.0.. +Building library for A-0.1.0.0.. +Preprocessing library for A-0.1.0.0.. +Running Haddock on library for A-0.1.0.0.. +Documentation created: dist/doc/html/A/index.html +Installing library in +Configuring library for B-0.1.0.0.. +Preprocessing library for B-0.1.0.0.. +Running Haddock on library for B-0.1.0.0.. +Documentation created: /cabal.dist/work/dist/build//ghc-/B-0.1.0.0/doc/html/B/index.html diff --git a/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/cabal.project b/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/cabal.project new file mode 100644 index 00000000000..b44e895f5ff --- /dev/null +++ b/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/cabal.project @@ -0,0 +1 @@ +packages: B diff --git a/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/cabal.test.hs b/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/cabal.test.hs new file mode 100644 index 00000000000..39ea4c51cbb --- /dev/null +++ b/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/cabal.test.hs @@ -0,0 +1,6 @@ +import Test.Cabal.Prelude +-- Test that `cabal haddock` doesn't require explicit +-- `--enable-dependencies` to happily process links to external packages. +-- In this example package B depends on an external package A. +main = cabalTest . withRepo "repo" $ + cabal "haddock" ["B"] diff --git a/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/repo/A-0.1.0.0/A.cabal b/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/repo/A-0.1.0.0/A.cabal new file mode 100644 index 00000000000..98dae175ec5 --- /dev/null +++ b/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/repo/A-0.1.0.0/A.cabal @@ -0,0 +1,11 @@ +cabal-version: 2.4 +name: A +version: 0.1.0.0 +author: Artem Pelenitsyn +maintainer: a.pelenitsyn@gmail.com + +library + exposed-modules: A + build-depends: base + hs-source-dirs: . + default-language: Haskell2010 diff --git a/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/repo/A-0.1.0.0/A.hs b/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/repo/A-0.1.0.0/A.hs new file mode 100644 index 00000000000..3a21f41365a --- /dev/null +++ b/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/repo/A-0.1.0.0/A.hs @@ -0,0 +1,4 @@ +module A (a) where + +a :: Int +a = 42 diff --git a/changelog.d/issue-7462 b/changelog.d/issue-7462 new file mode 100644 index 00000000000..fa6b06c1c66 --- /dev/null +++ b/changelog.d/issue-7462 @@ -0,0 +1,4 @@ +synopsis: Fix haddock command via Setup.hs for internal libraries +packages: Cabal +issues: #1919 +prs: #7827 diff --git a/doc/cabal-project.rst b/doc/cabal-project.rst index ef5b2deb7c4..7bb3d2d60f1 100644 --- a/doc/cabal-project.rst +++ b/doc/cabal-project.rst @@ -1324,11 +1324,12 @@ Haddock options :default: False Enables building of Haddock documentation. + Implied when calling ``cabal haddock``. The command line variant of this flag is ``--enable-documentation`` and ``--disable-documentation``. - `documentation: true` does not imply + ``documentation: true`` does not imply :cfg-field:`haddock-all`, :cfg-field:`haddock-benchmarks`, :cfg-field:`haddock-executables`,