From e35c0dccaf0bb36a980809a0c4e1bc45119b413e Mon Sep 17 00:00:00 2001 From: sheaf <sam.derbyshire@gmail.com> Date: Fri, 26 Apr 2024 15:00:17 +0200 Subject: [PATCH] Haddock: use buildSettingKeepTempFiles This commit initialises the Haddock flag haddockKeepTempFiles with the value of buildSettingKeepTempFiles. This addresses an 8 year old TODO in the code, from Duncan Coutts. --- .../Client/ProjectBuilding/UnpackedPackage.hs | 3 +- .../Distribution/Client/ProjectPlanning.hs | 71 ++++++++++--------- .../PackageTests/HaddockKeepsTmps/Simple.hs | 4 ++ .../HaddockKeepsTmps/cabal.project | 3 + .../HaddockKeepsTmps/cabal.test.hs | 20 ++++++ .../PackageTests/HaddockKeepsTmps/my.cabal | 13 ++++ 6 files changed, 80 insertions(+), 34 deletions(-) create mode 100644 cabal-testsuite/PackageTests/HaddockKeepsTmps/Simple.hs create mode 100644 cabal-testsuite/PackageTests/HaddockKeepsTmps/cabal.project create mode 100644 cabal-testsuite/PackageTests/HaddockKeepsTmps/cabal.test.hs create mode 100644 cabal-testsuite/PackageTests/HaddockKeepsTmps/my.cabal diff --git a/cabal-install/src/Distribution/Client/ProjectBuilding/UnpackedPackage.hs b/cabal-install/src/Distribution/Client/ProjectBuilding/UnpackedPackage.hs index 065334d5c6..7d9f34a8e8 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 f86e1e7bc0..ea4fae8ab8 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 0000000000..df38c448c5 --- /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 0000000000..f45d5a19d3 --- /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 0000000000..9a3dfe1777 --- /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 0000000000..73cc27d665 --- /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 -- GitLab