From 033b0435993d9c6409fb5f6c49020a04925590bf Mon Sep 17 00:00:00 2001
From: Artem Pelenitsyn <a.pelenitsyn@gmail.com>
Date: Thu, 28 Jul 2022 20:47:56 -0400
Subject: [PATCH] unbreak cabal haddock --disable-documentation

---
 .../src/Distribution/Client/CmdHaddock.hs        |  3 ++-
 .../PackageTests/NewHaddock/DisableDoc/B/B.cabal | 12 ++++++++++++
 .../PackageTests/NewHaddock/DisableDoc/B/B.hs    |  8 ++++++++
 .../PackageTests/NewHaddock/DisableDoc/cabal.out | 16 ++++++++++++++++
 .../NewHaddock/DisableDoc/cabal.project          |  1 +
 .../NewHaddock/DisableDoc/cabal.test.hs          |  6 ++++++
 .../NewHaddock/DisableDoc/repo/A-0.1.0.0/A.cabal | 11 +++++++++++
 .../NewHaddock/DisableDoc/repo/A-0.1.0.0/A.hs    |  4 ++++
 8 files changed, 60 insertions(+), 1 deletion(-)
 create mode 100644 cabal-testsuite/PackageTests/NewHaddock/DisableDoc/B/B.cabal
 create mode 100644 cabal-testsuite/PackageTests/NewHaddock/DisableDoc/B/B.hs
 create mode 100644 cabal-testsuite/PackageTests/NewHaddock/DisableDoc/cabal.out
 create mode 100644 cabal-testsuite/PackageTests/NewHaddock/DisableDoc/cabal.project
 create mode 100644 cabal-testsuite/PackageTests/NewHaddock/DisableDoc/cabal.test.hs
 create mode 100644 cabal-testsuite/PackageTests/NewHaddock/DisableDoc/repo/A-0.1.0.0/A.cabal
 create mode 100644 cabal-testsuite/PackageTests/NewHaddock/DisableDoc/repo/A-0.1.0.0/A.hs

diff --git a/cabal-install/src/Distribution/Client/CmdHaddock.hs b/cabal-install/src/Distribution/Client/CmdHaddock.hs
index c5bdc03f36..bfd2e8baf2 100644
--- a/cabal-install/src/Distribution/Client/CmdHaddock.hs
+++ b/cabal-install/src/Distribution/Client/CmdHaddock.hs
@@ -143,7 +143,8 @@ haddockAction flags@NixStyleFlags {..} targetStrings globalFlags = do
     runProjectPostBuildPhase verbosity baseCtx buildCtx' buildOutcomes
   where
     verbosity = fromFlagOrDefault normal (configVerbosity configFlags)
-    flags' = flags { installFlags = installFlags { installDocumentation = Flag True } }
+    installDoc = fromFlagOrDefault True (installDocumentation installFlags)
+    flags' = flags { installFlags = installFlags { installDocumentation = Flag installDoc } }
     cliConfig = commandLineFlagsToProjectConfig globalFlags flags' mempty -- ClientInstallFlags, not needed here
 
 -- | This defines what a 'TargetSelector' means for the @haddock@ command.
diff --git a/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/B/B.cabal b/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/B/B.cabal
new file mode 100644
index 0000000000..b24368c41c
--- /dev/null
+++ b/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/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/DisableDoc/B/B.hs b/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/B/B.hs
new file mode 100644
index 0000000000..09b2bc9bae
--- /dev/null
+++ b/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/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/DisableDoc/cabal.out b/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/cabal.out
new file mode 100644
index 0000000000..8966072f81
--- /dev/null
+++ b/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/cabal.out
@@ -0,0 +1,16 @@
+# cabal v2-update
+Downloading the latest package list from test-local-repo
+# cabal haddock
+Resolving dependencies...
+Build profile: -w ghc-<GHCVER> -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..
+Installing library in <PATH>
+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: <ROOT>/cabal.dist/work/dist/build/<ARCH>/ghc-<GHCVER>/B-0.1.0.0/doc/html/B/index.html
diff --git a/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/cabal.project b/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/cabal.project
new file mode 100644
index 0000000000..b44e895f5f
--- /dev/null
+++ b/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/cabal.project
@@ -0,0 +1 @@
+packages: B
diff --git a/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/cabal.test.hs b/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/cabal.test.hs
new file mode 100644
index 0000000000..d7d58cdb3f
--- /dev/null
+++ b/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/cabal.test.hs
@@ -0,0 +1,6 @@
+import Test.Cabal.Prelude
+-- Test that `cabal haddock --disable-documention` works as expected and leads
+-- to a warning if a local package makes an outer reference.
+main = cabalTest . withRepo "repo" $ do
+    r <- cabal' "haddock" ["--disable-documentation", "B"]
+    assertOutputContains "Warning: B: could not find link destinations for" r
diff --git a/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/repo/A-0.1.0.0/A.cabal b/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/repo/A-0.1.0.0/A.cabal
new file mode 100644
index 0000000000..98dae175ec
--- /dev/null
+++ b/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/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/DisableDoc/repo/A-0.1.0.0/A.hs b/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/repo/A-0.1.0.0/A.hs
new file mode 100644
index 0000000000..3a21f41365
--- /dev/null
+++ b/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/repo/A-0.1.0.0/A.hs
@@ -0,0 +1,4 @@
+module A (a) where
+
+a :: Int
+a = 42
-- 
GitLab