diff --git a/cabal-install/src/Distribution/Client/ProjectBuilding/UnpackedPackage.hs b/cabal-install/src/Distribution/Client/ProjectBuilding/UnpackedPackage.hs index 065334d5c6e632f4d3222e4753b38178f539c71c..7d9f34a8e8b35a41f05ef75e4c21d1812f2b7683 100644 --- a/cabal-install/src/Distribution/Client/ProjectBuilding/UnpackedPackage.hs +++ b/cabal-install/src/Distribution/Client/ProjectBuilding/UnpackedPackage.hs @@ -168,7 +168,7 @@ buildAndRegisterUnpackedPackage verbosity distDirLayout@DistDirLayout{distTempDirectory} maybe_semaphore - BuildTimeSettings{buildSettingNumJobs} + buildTimeSettings@BuildTimeSettings{buildSettingNumJobs} registerLock cacheLock pkgshared@ElaboratedSharedConfig @@ -329,6 +329,7 @@ buildAndRegisterUnpackedPackage setupHsHaddockFlags pkg pkgshared + buildTimeSettings (commonFlags v) haddockArgs v = flip filterHaddockArgs v $ diff --git a/cabal-install/src/Distribution/Client/ProjectPlanning.hs b/cabal-install/src/Distribution/Client/ProjectPlanning.hs index f86e1e7bc04acee6c7541479f29fab11e6386d21..ea4fae8ab8caf599420edaa1ed41fa1485a0dc95 100644 --- a/cabal-install/src/Distribution/Client/ProjectPlanning.hs +++ b/cabal-install/src/Distribution/Client/ProjectPlanning.hs @@ -4101,41 +4101,46 @@ setupHsRegisterFlags setupHsHaddockFlags :: ElaboratedConfiguredPackage -> ElaboratedSharedConfig + -> BuildTimeSettings -> Cabal.CommonSetupFlags -> Cabal.HaddockFlags -setupHsHaddockFlags (ElaboratedConfiguredPackage{..}) (ElaboratedSharedConfig{..}) common = - Cabal.HaddockFlags - { haddockCommonFlags = common - , haddockProgramPaths = - case lookupProgram haddockProgram pkgConfigCompilerProgs of - Nothing -> mempty - Just prg -> - [ - ( programName haddockProgram - , locationPath (programLocation prg) - ) - ] - , haddockProgramArgs = mempty -- unused, set at configure time - , haddockHoogle = toFlag elabHaddockHoogle - , haddockHtml = toFlag elabHaddockHtml - , haddockHtmlLocation = maybe mempty toFlag elabHaddockHtmlLocation - , haddockForHackage = toFlag elabHaddockForHackage - , haddockForeignLibs = toFlag elabHaddockForeignLibs - , haddockExecutables = toFlag elabHaddockExecutables - , haddockTestSuites = toFlag elabHaddockTestSuites - , haddockBenchmarks = toFlag elabHaddockBenchmarks - , haddockInternal = toFlag elabHaddockInternal - , haddockCss = maybe mempty toFlag elabHaddockCss - , haddockLinkedSource = toFlag elabHaddockLinkedSource - , haddockQuickJump = toFlag elabHaddockQuickJump - , haddockHscolourCss = maybe mempty toFlag elabHaddockHscolourCss - , haddockContents = maybe mempty toFlag elabHaddockContents - , haddockKeepTempFiles = mempty -- TODO: from build settings - , haddockIndex = maybe mempty toFlag elabHaddockIndex - , haddockBaseUrl = maybe mempty toFlag elabHaddockBaseUrl - , haddockLib = maybe mempty toFlag elabHaddockLib - , haddockOutputDir = maybe mempty toFlag elabHaddockOutputDir - } +setupHsHaddockFlags + (ElaboratedConfiguredPackage{..}) + (ElaboratedSharedConfig{..}) + (BuildTimeSettings{buildSettingKeepTempFiles = keepTmpFiles}) + common = + Cabal.HaddockFlags + { haddockCommonFlags = common + , haddockProgramPaths = + case lookupProgram haddockProgram pkgConfigCompilerProgs of + Nothing -> mempty + Just prg -> + [ + ( programName haddockProgram + , locationPath (programLocation prg) + ) + ] + , haddockProgramArgs = mempty -- unused, set at configure time + , haddockHoogle = toFlag elabHaddockHoogle + , haddockHtml = toFlag elabHaddockHtml + , haddockHtmlLocation = maybe mempty toFlag elabHaddockHtmlLocation + , haddockForHackage = toFlag elabHaddockForHackage + , haddockForeignLibs = toFlag elabHaddockForeignLibs + , haddockExecutables = toFlag elabHaddockExecutables + , haddockTestSuites = toFlag elabHaddockTestSuites + , haddockBenchmarks = toFlag elabHaddockBenchmarks + , haddockInternal = toFlag elabHaddockInternal + , haddockCss = maybe mempty toFlag elabHaddockCss + , haddockLinkedSource = toFlag elabHaddockLinkedSource + , haddockQuickJump = toFlag elabHaddockQuickJump + , haddockHscolourCss = maybe mempty toFlag elabHaddockHscolourCss + , haddockContents = maybe mempty toFlag elabHaddockContents + , haddockKeepTempFiles = toFlag keepTmpFiles + , haddockIndex = maybe mempty toFlag elabHaddockIndex + , haddockBaseUrl = maybe mempty toFlag elabHaddockBaseUrl + , haddockLib = maybe mempty toFlag elabHaddockLib + , haddockOutputDir = maybe mempty toFlag elabHaddockOutputDir + } setupHsHaddockArgs :: ElaboratedConfiguredPackage -> [String] -- TODO: Does the issue #3335 affects test as well diff --git a/cabal-testsuite/PackageTests/HaddockKeepsTmps/Simple.hs b/cabal-testsuite/PackageTests/HaddockKeepsTmps/Simple.hs new file mode 100644 index 0000000000000000000000000000000000000000..df38c448c5ea2b6cacbdea57bf97dce784c24108 --- /dev/null +++ b/cabal-testsuite/PackageTests/HaddockKeepsTmps/Simple.hs @@ -0,0 +1,4 @@ +module Simple where + +-- | For hiding needles. +data Haystack = Haystack diff --git a/cabal-testsuite/PackageTests/HaddockKeepsTmps/cabal.project b/cabal-testsuite/PackageTests/HaddockKeepsTmps/cabal.project new file mode 100644 index 0000000000000000000000000000000000000000..f45d5a19d3c0e97fe10f600c0863ff768071d5eb --- /dev/null +++ b/cabal-testsuite/PackageTests/HaddockKeepsTmps/cabal.project @@ -0,0 +1,3 @@ +packages: . + +haddock-keep-temp-files: true diff --git a/cabal-testsuite/PackageTests/HaddockKeepsTmps/cabal.test.hs b/cabal-testsuite/PackageTests/HaddockKeepsTmps/cabal.test.hs new file mode 100644 index 0000000000000000000000000000000000000000..9a3dfe1777bdac3625fb0026687c5a6d233ab028 --- /dev/null +++ b/cabal-testsuite/PackageTests/HaddockKeepsTmps/cabal.test.hs @@ -0,0 +1,20 @@ +{-# LANGUAGE LambdaCase #-} +import Test.Cabal.Prelude +import Distribution.Verbosity +import Distribution.Simple.Glob +import Distribution.Simple.Glob.Internal + +-- Test that "cabal haddock" preserves temporary files +-- We use haddock-keep-temp-file: True in the cabal.project. +main = cabalTest $ recordMode DoNotRecord $ do + skipIfWindows + + cabal "haddock" [] + + cwd <- fmap testCurrentDir getTestEnv + + (globMatches <$> liftIO (runDirFileGlob silent Nothing cwd (GlobDirRecursive [WildCard, Literal "response", WildCard, Literal "txt"]))) >>= \case + [] -> error "Expecting a response file to exist" + (m:_) -> + -- Assert the matched response file is not empty. + assertFileDoesContain (cwd </> m) "Simple.hs" diff --git a/cabal-testsuite/PackageTests/HaddockKeepsTmps/my.cabal b/cabal-testsuite/PackageTests/HaddockKeepsTmps/my.cabal new file mode 100644 index 0000000000000000000000000000000000000000..73cc27d665b53786e92d987dbb89e4c4c01a024b --- /dev/null +++ b/cabal-testsuite/PackageTests/HaddockKeepsTmps/my.cabal @@ -0,0 +1,13 @@ +cabal-version: 3.0 +name: HaddockKeepsTmps +version: 0.1 +license: BSD-3-Clause +author: Rodrigo Mesquita +stability: stable +category: PackageTests +build-type: Simple + +library + default-language: Haskell2010 + exposed-modules: Simple + build-depends: base