Cabal 3.14.1.1 → 3.14.2.0
raw patch · 39 files changed
+225/−150 lines, 39 filesdep ~Cabal-syntaxPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: Cabal-syntax
API changes (from Hackage documentation)
+ Distribution.PackageDescription.Check: GTLowerBounds :: CEType -> [String] -> CheckExplanation
+ Distribution.PackageDescription.Check: LEUpperBounds :: CEType -> [String] -> CheckExplanation
+ Distribution.PackageDescription.Check: TrailingZeroUpperBounds :: CEType -> [String] -> CheckExplanation
+ Distribution.Simple.Build: addInternalBuildToolsFixed :: Maybe (AbsolutePath ('Dir Pkg)) -> PackageDescription -> LocalBuildInfo -> BuildInfo -> ProgramDb -> ProgramDb
+ Distribution.Simple.Program.Run: getFullEnvironment :: [(String, Maybe String)] -> IO [(String, String)]
Files
- Cabal.cabal +1/−1
- ChangeLog.md +3/−0
- src/Distribution/Backpack/Configure.hs +4/−2
- src/Distribution/Compat/Async.hs +0/−2
- src/Distribution/Compat/Internal/TempFile.hs +2/−2
- src/Distribution/Compat/ResponseFile.hs +0/−1
- src/Distribution/Compat/Stack.hs +0/−1
- src/Distribution/Compat/Time.hs +5/−4
- src/Distribution/PackageDescription/Check.hs +14/−2
- src/Distribution/PackageDescription/Check/Common.hs +11/−12
- src/Distribution/PackageDescription/Check/Target.hs +16/−3
- src/Distribution/PackageDescription/Check/Warning.hs +50/−13
- src/Distribution/Simple/Bench.hs +5/−7
- src/Distribution/Simple/Build.hs +49/−24
- src/Distribution/Simple/GHC.hs +14/−9
- src/Distribution/Simple/GHCJS.hs +0/−1
- src/Distribution/Simple/Haddock.hs +2/−1
- src/Distribution/Simple/Program/Run.hs +18/−0
- src/Distribution/Simple/Program/Strip.hs +4/−0
- src/Distribution/Simple/Register.hs +2/−2
- src/Distribution/Simple/Setup.hs +0/−3
- src/Distribution/Simple/Setup/Benchmark.hs +0/−3
- src/Distribution/Simple/Setup/Build.hs +0/−3
- src/Distribution/Simple/Setup/Clean.hs +0/−3
- src/Distribution/Simple/Setup/Common.hs +0/−3
- src/Distribution/Simple/Setup/Copy.hs +0/−3
- src/Distribution/Simple/Setup/Global.hs +0/−3
- src/Distribution/Simple/Setup/Haddock.hs +0/−3
- src/Distribution/Simple/Setup/Hscolour.hs +0/−3
- src/Distribution/Simple/Setup/Install.hs +0/−3
- src/Distribution/Simple/Setup/Register.hs +0/−3
- src/Distribution/Simple/Setup/Repl.hs +1/−5
- src/Distribution/Simple/Setup/SDist.hs +0/−3
- src/Distribution/Simple/Setup/Test.hs +0/−3
- src/Distribution/Simple/Test.hs +4/−2
- src/Distribution/Simple/Test/ExeV10.hs +13/−7
- src/Distribution/Simple/Test/LibV09.hs +7/−7
- src/Distribution/Utils/MapAccum.hs +0/−2
- src/Distribution/Utils/Progress.hs +0/−1
Cabal.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: Cabal-version: 3.14.1.1+version: 3.14.2.0 copyright: 2003-2024, Cabal Development Team (see AUTHORS file) license: BSD-3-Clause license-file: LICENSE
ChangeLog.md view
@@ -1,3 +1,6 @@+# 3.14.2.0 [Mikolaj Konarski](mailto:mikolaj@well-typed.com) April 2025+* See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.14.2.0.md+ # 3.14.1.0 [Hécate](mailto:hecate+github@glitchbra.in) November 2024 * See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.14.1.0.md
src/Distribution/Backpack/Configure.hs view
@@ -103,6 +103,8 @@ let conf_pkg_map = Map.fromListWith Map.union+ $+ -- Normal dependencies [ ( pc_pkgname pkg , Map.singleton (pc_compname pkg)@@ -115,8 +117,8 @@ ) | pkg <- prePkgDeps ]- `Map.union` Map.fromListWith- Map.union+ +++ -- Promised dependencies [ (pkg, Map.singleton (ann_cname aid) aid) | ConfiguredPromisedComponent pkg aid <- promisedPkgDeps ]
src/Distribution/Compat/Async.hs view
@@ -1,5 +1,3 @@-{-# LANGUAGE CPP #-}- -- | 'Async', yet using 'MVar's. -- -- Adopted from @async@ library
src/Distribution/Compat/Internal/TempFile.hs view
@@ -15,17 +15,17 @@ import System.IO (Handle, openBinaryTempFile, openTempFile) #if defined(__IO_MANAGER_WINIO__) import System.IO (openBinaryTempFileWithDefaultPermissions)+import System.Posix.Internals (c_getpid) #else import Control.Exception (onException) import Data.Bits ((.|.)) import Foreign.C (CInt, eEXIST, getErrno, errnoToIOError) import GHC.IO.Handle.FD (fdToHandle)-import System.Posix.Internals (c_open, c_close, o_EXCL, o_BINARY, withFilePath,+import System.Posix.Internals (c_getpid, c_open, c_close, o_EXCL, o_BINARY, withFilePath, o_CREAT, o_RDWR, o_NONBLOCK, o_NOCTTY) #endif import System.IO.Error (isAlreadyExistsError)-import System.Posix.Internals (c_getpid) #if defined(mingw32_HOST_OS) || defined(ghcjs_HOST_OS) import System.Directory ( createDirectory )
src/Distribution/Compat/ResponseFile.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE RankNTypes #-}
src/Distribution/Compat/Stack.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE ImplicitParams #-} {-# LANGUAGE RankNTypes #-}
src/Distribution/Compat/Time.hs view
@@ -41,13 +41,14 @@ #else -import System.Posix.Files ( FileStatus, getFileStatus )-+import System.Posix.Files+ ( FileStatus, getFileStatus #if MIN_VERSION_unix(2,6,0)-import System.Posix.Files ( modificationTimeHiRes )+ , modificationTimeHiRes #else-import System.Posix.Files ( modificationTime )+ , modificationTime #endif+ ) #endif
src/Distribution/PackageDescription/Check.hs view
@@ -568,8 +568,20 @@ rck = PackageDistSuspiciousWarn . MissingUpperBounds CETSetup- checkPVP ick is- checkPVPs rck rs+ leuck =+ PackageDistSuspiciousWarn+ . LEUpperBounds CETSetup+ tzuck =+ PackageDistSuspiciousWarn+ . TrailingZeroUpperBounds CETSetup+ gtlck =+ PackageDistSuspiciousWarn+ . GTLowerBounds CETSetup+ checkPVP (checkDependencyVersionRange $ not . hasUpperBound) ick is+ checkPVPs (checkDependencyVersionRange $ not . hasUpperBound) rck rs+ checkPVPs (checkDependencyVersionRange hasLEUpperBound) leuck ds+ checkPVPs (checkDependencyVersionRange hasTrailingZeroUpperBound) tzuck ds+ checkPVPs (checkDependencyVersionRange hasGTLowerBound) gtlck ds checkPackageId :: Monad m => PackageIdentifier -> CheckM m () checkPackageId (PackageIdentifier pkgName_ _pkgVersion_) = do
src/Distribution/PackageDescription/Check/Common.hs view
@@ -16,6 +16,7 @@ , partitionDeps , checkPVP , checkPVPs+ , checkDependencyVersionRange ) where import Distribution.Compat.Prelude@@ -116,34 +117,32 @@ -- for important dependencies like base). checkPVP :: Monad m- => (String -> PackageCheck) -- Warn message dependend on name+ => (Dependency -> Bool)+ -> (String -> PackageCheck) -- Warn message depends on name -- (e.g. "base", "Cabal"). -> [Dependency] -> CheckM m ()-checkPVP ckf ds = do- let ods = checkPVPPrim ds+checkPVP p ckf ds = do+ let ods = filter p ds mapM_ (tellP . ckf . unPackageName . depPkgName) ods -- PVP dependency check for a list of dependencies. Some code duplication -- is sadly needed to provide more ergonimic error messages. checkPVPs :: Monad m- => ( [String]+ => (Dependency -> Bool)+ -> ( [String] -> PackageCheck -- Grouped error message, depends on a -- set of names. ) -> [Dependency] -- Deps to analyse. -> CheckM m ()-checkPVPs cf ds+checkPVPs p cf ds | null ns = return () | otherwise = tellP (cf ns) where- ods = checkPVPPrim ds+ ods = filter p ds ns = map (unPackageName . depPkgName) ods --- Returns dependencies without upper bounds.-checkPVPPrim :: [Dependency] -> [Dependency]-checkPVPPrim ds = filter withoutUpper ds- where- withoutUpper :: Dependency -> Bool- withoutUpper (Dependency _ ver _) = not . hasUpperBound $ ver+checkDependencyVersionRange :: (VersionRange -> Bool) -> Dependency -> Bool+checkDependencyVersionRange p (Dependency _ ver _) = p ver
src/Distribution/PackageDescription/Check/Target.hs view
@@ -331,17 +331,30 @@ checkAutogenModules ams bi -- PVP: we check for base and all other deps.+ let ds = mergeDependencies $ targetBuildDepends bi (ids, rds) <- partitionDeps ads [mkUnqualComponentName "base"]- (mergeDependencies $ targetBuildDepends bi)+ ds let ick = const (PackageDistInexcusable BaseNoUpperBounds) rck = PackageDistSuspiciousWarn . MissingUpperBounds cet- checkPVP ick ids+ leuck = PackageDistSuspiciousWarn . LEUpperBounds cet+ tzuck = PackageDistSuspiciousWarn . TrailingZeroUpperBounds cet+ gtlck = PackageDistSuspiciousWarn . GTLowerBounds cet+ checkPVP (checkDependencyVersionRange $ not . hasUpperBound) ick ids unless (isInternalTarget cet)- (checkPVPs rck rds)+ (checkPVPs (checkDependencyVersionRange $ not . hasUpperBound) rck rds)+ unless+ (isInternalTarget cet)+ (checkPVPs (checkDependencyVersionRange hasLEUpperBound) leuck ds)+ unless+ (isInternalTarget cet)+ (checkPVPs (checkDependencyVersionRange hasTrailingZeroUpperBound) tzuck ds)+ unless+ (isInternalTarget cet)+ (checkPVPs (checkDependencyVersionRange hasGTLowerBound) gtlck ds) -- Custom fields well-formedness (ASCII). mapM_ checkCustomField (customFieldsBI bi)
src/Distribution/PackageDescription/Check/Warning.hs view
@@ -256,6 +256,9 @@ | UnknownCompiler [String] | BaseNoUpperBounds | MissingUpperBounds CEType [String]+ | LEUpperBounds CEType [String]+ | TrailingZeroUpperBounds CEType [String]+ | GTLowerBounds CEType [String] | SuspiciousFlagName [String] | DeclaredUsedFlags (Set.Set FlagName) (Set.Set FlagName) | NonASCIICustomField [String]@@ -419,6 +422,9 @@ | CIUnknownCompiler | CIBaseNoUpperBounds | CIMissingUpperBounds+ | CILEUpperBounds+ | CITrailingZeroUpperBounds+ | CIGTLowerBounds | CISuspiciousFlagName | CIDeclaredUsedFlags | CINonASCIICustomField@@ -561,6 +567,9 @@ checkExplanationId (UnknownCompiler{}) = CIUnknownCompiler checkExplanationId (BaseNoUpperBounds{}) = CIBaseNoUpperBounds checkExplanationId (MissingUpperBounds{}) = CIMissingUpperBounds+checkExplanationId (LEUpperBounds{}) = CILEUpperBounds+checkExplanationId (TrailingZeroUpperBounds{}) = CITrailingZeroUpperBounds+checkExplanationId (GTLowerBounds{}) = CIGTLowerBounds checkExplanationId (SuspiciousFlagName{}) = CISuspiciousFlagName checkExplanationId (DeclaredUsedFlags{}) = CIDeclaredUsedFlags checkExplanationId (NonASCIICustomField{}) = CINonASCIICustomField@@ -588,11 +597,13 @@ type CheckExplanationIDString = String --- A one-word identifier for each CheckExplanation------ ☞ N.B: if you modify anything here, remeber to change the documentation--- in @doc/cabal-commands.rst@!+-- | A one-word identifier for each @CheckExplanation@. ppCheckExplanationId :: CheckExplanationID -> CheckExplanationIDString+-- NOTE: If you modify anything here, remember to change the documentation+-- in @doc/cabal-commands.rst@!+-- NOTE: These strings will have to satisfy a test that these messages don't+-- have too many dashes:+-- $ cabal run Cabal-tests:unit-tests -- --pattern=Parsimonious ppCheckExplanationId CIParseWarning = "parser-warning" ppCheckExplanationId CINoNameField = "no-name-field" ppCheckExplanationId CINoVersionField = "no-version-field"@@ -708,6 +719,9 @@ ppCheckExplanationId CIUnknownCompiler = "unknown-compiler" ppCheckExplanationId CIBaseNoUpperBounds = "missing-bounds-important" ppCheckExplanationId CIMissingUpperBounds = "missing-upper-bounds"+ppCheckExplanationId CILEUpperBounds = "le-upper-bounds"+ppCheckExplanationId CITrailingZeroUpperBounds = "tz-upper-bounds"+ppCheckExplanationId CIGTLowerBounds = "gt-lower-bounds" ppCheckExplanationId CISuspiciousFlagName = "suspicious-flag" ppCheckExplanationId CIDeclaredUsedFlags = "unused-flag" ppCheckExplanationId CINonASCIICustomField = "non-ascii"@@ -1301,15 +1315,33 @@ ++ "version. For example if you have tested your package with 'base' " ++ "version 4.5 and 4.6 then use 'build-depends: base >= 4.5 && < 4.7'." ppExplanation (MissingUpperBounds ct names) =- let separator = "\n - "- in "On "- ++ ppCET ct- ++ ", "- ++ "these packages miss upper bounds:"- ++ separator- ++ List.intercalate separator names- ++ "\n"- ++ "Please add them. There is more information at https://pvp.haskell.org/"+ "On "+ ++ ppCET ct+ ++ ", "+ ++ "these packages miss upper bounds:"+ ++ listSep names+ ++ "Please add them. There is more information at https://pvp.haskell.org/"+ppExplanation (LEUpperBounds ct names) =+ "On "+ ++ ppCET ct+ ++ ", "+ ++ "these packages have less than or equals (<=) upper bounds:"+ ++ listSep names+ ++ "Please use less than (<) for upper bounds."+ppExplanation (TrailingZeroUpperBounds ct names) =+ "On "+ ++ ppCET ct+ ++ ", "+ ++ "these packages have upper bounds with trailing zeros:"+ ++ listSep names+ ++ "Please avoid trailing zeros for upper bounds."+ppExplanation (GTLowerBounds ct names) =+ "On "+ ++ ppCET ct+ ++ ", "+ ++ "these packages have greater than (>) lower bounds:"+ ++ listSep names+ ++ "Please use greater than or equals (>=) for lower bounds." ppExplanation (SuspiciousFlagName invalidFlagNames) = "Suspicious flag names: " ++ unwords invalidFlagNames@@ -1470,6 +1502,11 @@ else "extra-source-files" -- * Formatting utilities++listSep :: [String] -> String+listSep names =+ let separator = "\n - "+ in separator ++ List.intercalate separator names ++ "\n" commaSep :: [String] -> String commaSep = List.intercalate ", "
src/Distribution/Simple/Bench.hs view
@@ -23,10 +23,9 @@ import Distribution.Compat.Prelude import Prelude () -import Distribution.Compat.Environment import qualified Distribution.PackageDescription as PD import Distribution.Pretty-import Distribution.Simple.Build (addInternalBuildTools)+import Distribution.Simple.Build (addInternalBuildToolsFixed) import Distribution.Simple.BuildPaths import Distribution.Simple.Compiler import Distribution.Simple.Errors@@ -58,6 +57,7 @@ -- ^ flags sent to benchmark -> IO () bench args pkg_descr lbi flags = do+ curDir <- LBI.absoluteWorkingDirLBI lbi let verbosity = fromFlag $ benchmarkVerbosity flags benchmarkNames = args pkgBenchmarks = PD.benchmarks pkg_descr@@ -72,7 +72,8 @@ lbi { -- Include any build-tool-depends on build tools internal to the current package. LBI.withPrograms =- addInternalBuildTools+ addInternalBuildToolsFixed+ (Just curDir) pkg_descr lbi (benchmarkBuildInfo bm)@@ -90,15 +91,12 @@ dieWithException verbosity $ NoBenchMarkProgram cmd - existingEnv <- getEnvironment- -- Compute the appropriate environment for running the benchmark let progDb = LBI.withPrograms lbiForBench pathVar = progSearchPath progDb envOverrides = progOverrideEnv progDb newPath <- programSearchPathAsPATHVar pathVar- overrideEnv <- fromMaybe [] <$> getEffectiveEnvironment ([("PATH", Just newPath)] ++ envOverrides)- let shellEnv = overrideEnv ++ existingEnv+ shellEnv <- getFullEnvironment ([("PATH", Just newPath)] ++ envOverrides) -- Add (DY)LD_LIBRARY_PATH if needed shellEnv' <-
src/Distribution/Simple/Build.hs view
@@ -48,6 +48,7 @@ -- * Handling of internal build tools , addInternalBuildTools+ , addInternalBuildToolsFixed ) where import Distribution.Compat.Prelude@@ -188,13 +189,15 @@ -- dumped. dumpBuildInfo verbosity distPref (configDumpBuildInfo (configFlags lbi)) pkg_descr lbi flags + curDir <- absoluteWorkingDirLBI lbi+ -- Now do the actual building (\f -> foldM_ f (installedPkgs lbi) componentsToBuild) $ \index target -> do let comp = targetComponent target clbi = targetCLBI target bi = componentBuildInfo comp -- Include any build-tool-depends on build tools internal to the current package.- progs' = addInternalBuildTools pkg_descr lbi bi (withPrograms lbi)+ progs' = addInternalBuildToolsFixed (Just curDir) pkg_descr lbi bi (withPrograms lbi) lbi' = lbi { withPrograms = progs'@@ -376,17 +379,20 @@ internalPackageDB <- createInternalPackageDB verbosity lbi distPref - let lbiForComponent comp lbi' =- lbi'- { withPackageDB = withPackageDB lbi ++ [internalPackageDB]- , withPrograms =- -- Include any build-tool-depends on build tools internal to the current package.- addInternalBuildTools- pkg_descr- lbi'- (componentBuildInfo comp)- (withPrograms lbi')- }+ let lbiForComponent comp lbi' = do+ curDir <- absoluteWorkingDirLBI lbi'+ return $+ lbi'+ { withPackageDB = withPackageDB lbi' ++ [internalPackageDB]+ , withPrograms =+ -- Include any build-tool-depends on build tools internal to the current package.+ addInternalBuildToolsFixed+ (Just curDir)+ pkg_descr+ lbi'+ (componentBuildInfo comp)+ (withPrograms lbi')+ } runPreBuildHooks :: LocalBuildInfo -> TargetInfo -> IO () runPreBuildHooks lbi2 tgt = let inputs =@@ -404,7 +410,7 @@ [ do let clbi = targetCLBI subtarget comp = targetComponent subtarget- lbi' = lbiForComponent comp lbi+ lbi' <- lbiForComponent comp lbi preBuildComponent runPreBuildHooks verbosity lbi' subtarget buildComponent (mempty{buildCommonFlags = mempty{setupVerbosity = toFlag verbosity}})@@ -421,7 +427,7 @@ -- REPL for target components let clbi = targetCLBI target comp = targetComponent target- lbi' = lbiForComponent comp lbi+ lbi' <- lbiForComponent comp lbi preBuildComponent runPreBuildHooks verbosity lbi' target replComponent flags verbosity pkg_descr lbi' suffixHandlers comp clbi distPref @@ -925,13 +931,18 @@ -- directory environment variable for the current package to the current -- 'progOverrideEnv', so that any programs configured from now on will be -- able to invoke these build tools.-addInternalBuildTools- :: PackageDescription+--+-- NB: This function will be removed in the next Cabal major version+-- (use addInternalBuildTools instead). This function is introduced solely for+-- backporting in a PVP compliant way.+addInternalBuildToolsFixed+ :: Maybe (AbsolutePath (Dir Pkg))+ -> PackageDescription -> LocalBuildInfo -> BuildInfo -> ProgramDb -> ProgramDb-addInternalBuildTools pkg lbi bi progs =+addInternalBuildToolsFixed mpwd pkg lbi bi progs = prependProgramSearchPathNoLogging internalToolPaths [pkgDataDirVar]@@ -950,13 +961,27 @@ buildDir lbi </> makeRelativePathEx (toolName' </> toolName' <.> exeExtension (hostPlatform lbi)) ]- mbWorkDir = mbWorkDirLBI lbi- rawDataDir = dataDir pkg- dataDirPath- | null $ getSymbolicPath rawDataDir =- interpretSymbolicPath mbWorkDir sameDirectory- | otherwise =- interpretSymbolicPath mbWorkDir rawDataDir++ dataDirPath :: FilePath+ dataDirPath =+ case mpwd of+ -- This is an absolute path, so if a process changes directory, it can still+ -- find the datadir (#10717)+ Just pwd -> interpretSymbolicPathAbsolute pwd (dataDir pkg)+ -- This is just wrong, but implemented for PVP compliance..+ Nothing -> interpretSymbolicPathCWD (dataDir pkg)++{-# WARNING addInternalBuildTools "This function is broken, use addInternalBuildToolsFixed instead" #-}++-- | A backwards compatible (broken) version of `addInternalBuildTools`, do not+-- use this function. Use 'addInternalBuildToolsFixed' instead.+addInternalBuildTools+ :: PackageDescription+ -> LocalBuildInfo+ -> BuildInfo+ -> ProgramDb+ -> ProgramDb+addInternalBuildTools = addInternalBuildToolsFixed Nothing -- TODO: build separate libs in separate dirs so that we can build -- multiple libs, e.g. for 'LibTest' library-style test suites
src/Distribution/Simple/GHC.hs view
@@ -125,23 +125,28 @@ import Distribution.Verbosity import Distribution.Version import Language.Haskell.Extension-import System.Directory- ( canonicalizePath- , createDirectoryIfMissing- , doesDirectoryExist- , doesFileExist- , getAppUserDataDirectory- , getDirectoryContents- ) import System.FilePath ( isRelative , takeDirectory ) import qualified System.Info #ifndef mingw32_HOST_OS-import System.Directory (renameFile) import System.Posix (createSymbolicLink) #endif /* mingw32_HOST_OS */++{- FOURMOLU_DISABLE -}+import System.Directory+ ( canonicalizePath+ , createDirectoryIfMissing+ , doesDirectoryExist+ , doesFileExist+ , getAppUserDataDirectory+ , getDirectoryContents+#ifndef mingw32_HOST_OS+ , renameFile+#endif+ )+{- FOURMOLU_ENABLE -} import Distribution.Simple.Setup (BuildingWhat (..)) import Distribution.Simple.Setup.Build
src/Distribution/Simple/GHCJS.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE RankNTypes #-}
src/Distribution/Simple/Haddock.hs view
@@ -336,12 +336,13 @@ createInternalPackageDB verbosity lbi (flag $ setupDistPref . haddockCommonFlags) (\f -> foldM_ f (installedPkgs lbi) targets') $ \index target -> do+ curDir <- absoluteWorkingDirLBI lbi let component = targetComponent target clbi = targetCLBI target bi = componentBuildInfo component -- Include any build-tool-depends on build tools internal to the current package.- progs' = addInternalBuildTools pkg_descr lbi bi (withPrograms lbi)+ progs' = addInternalBuildToolsFixed (Just curDir) pkg_descr lbi bi (withPrograms lbi) lbi' = lbi { withPrograms = progs'
src/Distribution/Simple/Program/Run.hs view
@@ -30,6 +30,7 @@ , getProgramInvocationOutputAndErrors , getProgramInvocationLBSAndErrors , getEffectiveEnvironment+ , getFullEnvironment ) where import Distribution.Compat.Prelude@@ -236,6 +237,12 @@ -- | Return the current environment extended with the given overrides. -- If an entry is specified twice in @overrides@, the second entry takes -- precedence.+--+-- getEffectiveEnvironment returns 'Nothing' when there are no overrides.+-- It returns an argument that is suitable to pass directly to 'CreateProcess' to+-- override the environment.+-- If you need the full environment to manipulate further, even when there are no overrides,+-- then call 'getFullEnvironment'. getEffectiveEnvironment :: [(String, Maybe String)] -> IO (Maybe [(String, String)])@@ -246,6 +253,17 @@ apply os env = foldl' (flip update) env os update (var, Nothing) = Map.delete var update (var, Just val) = Map.insert var val++-- | Like 'getEffectiveEnvironment', but when no overrides are specified,+-- returns the full environment instead of 'Nothing'.+getFullEnvironment+ :: [(String, Maybe String)]+ -> IO [(String, String)]+getFullEnvironment overrides = do+ menv <- getEffectiveEnvironment overrides+ case menv of+ Just env -> return env+ Nothing -> getEnvironment -- | Like the unix xargs program. Useful for when we've got very long command -- lines that might overflow an OS limit on command line length and so you
src/Distribution/Simple/Program/Strip.hs view
@@ -58,6 +58,10 @@ IOS -> return () AIX -> return () Solaris -> return ()+ OpenBSD ->+ -- '--strip-unneeded' sometimes strips too much on OpenBSD.+ -- -- See https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/ports/lang/ghc/patches/patch-libraries_Cabal_Cabal_Distribution_Simple_Program_Strip_hs+ return () Windows -> -- Stripping triggers a bug in 'strip.exe' for -- libraries with lots identically named modules. See
src/Distribution/Simple/Register.hs view
@@ -549,8 +549,8 @@ , IPI.ldOptions = ldOptions bi , IPI.frameworks = map getSymbolicPath $ frameworks bi , IPI.frameworkDirs = map getSymbolicPath $ extraFrameworkDirs bi- , IPI.haddockInterfaces = [haddockdir installDirs </> haddockLibraryPath pkg lib]- , IPI.haddockHTMLs = [htmldir installDirs]+ , IPI.haddockInterfaces = [haddockdir installDirs </> haddockLibraryPath pkg lib | hasModules]+ , IPI.haddockHTMLs = [htmldir installDirs | hasModules] , IPI.pkgRoot = Nothing , IPI.libVisibility = libVisibility lib }
src/Distribution/Simple/Setup.hs view
@@ -1,12 +1,9 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE RankNTypes #-}------------------------------------------------------------------------------- -- | -- Module : Distribution.Simple.Setup
src/Distribution/Simple/Setup/Benchmark.hs view
@@ -1,12 +1,9 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-}------------------------------------------------------------------------------- -- | -- Module : Distribution.Simple.Benchmark
src/Distribution/Simple/Setup/Build.hs view
@@ -1,12 +1,9 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-}------------------------------------------------------------------------------- -- | -- Module : Distribution.Simple.Setup.Build
src/Distribution/Simple/Setup/Clean.hs view
@@ -1,12 +1,9 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-}------------------------------------------------------------------------------- -- | -- Module : Distribution.Simple.Setup.Clean
src/Distribution/Simple/Setup/Common.hs view
@@ -1,12 +1,9 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveTraversable #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE RankNTypes #-}------------------------------------------------------------------------------- -- | -- Module : Distribution.Simple.Setup.Common
src/Distribution/Simple/Setup/Copy.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-}@@ -6,8 +5,6 @@ {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-}------------------------------------------------------------------------------- -- | -- Module : Distribution.Simple.Setup.Copy
src/Distribution/Simple/Setup/Global.hs view
@@ -1,10 +1,7 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE RankNTypes #-}------------------------------------------------------------------------------- -- | -- Module : Distribution.Simple.Setup.Global
src/Distribution/Simple/Setup/Haddock.hs view
@@ -1,12 +1,9 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-}------------------------------------------------------------------------------- -- | -- Module : Distribution.Simple.Setup.Haddock
src/Distribution/Simple/Setup/Hscolour.hs view
@@ -1,12 +1,9 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-}------------------------------------------------------------------------------- -- | -- Module : Distribution.Simple.Setup.Hscolour
src/Distribution/Simple/Setup/Install.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-}@@ -6,8 +5,6 @@ {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-}------------------------------------------------------------------------------- -- | -- Module : Distribution.Simple.Setup.Install
src/Distribution/Simple/Setup/Register.hs view
@@ -1,12 +1,9 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-}------------------------------------------------------------------------------- -- | -- Module : Distribution.Simple.Setup.Register
src/Distribution/Simple/Setup/Repl.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-}@@ -6,8 +5,6 @@ {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-} ------------------------------------------------------------------------------- -- | -- Module : Distribution.Simple.Setup.Repl -- Copyright : Isaac Jones 2003-2004@@ -132,8 +129,7 @@ , commandDescription = Just $ \pname -> wrapText $ "If the current directory contains no package, ignores COMPONENT "- ++ "parameters and opens an interactive interpreter session; if a "- ++ "sandbox is present, its package database will be used.\n"+ ++ "parameters and opens an interactive interpreter session.\n" ++ "\n" ++ "Otherwise, (re)configures with the given or default flags, and " ++ "loads the interpreter with the relevant modules. For executables, "
src/Distribution/Simple/Setup/SDist.hs view
@@ -1,12 +1,9 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-}------------------------------------------------------------------------------- -- | -- Module : Distribution.Simple.Setup.SDist
src/Distribution/Simple/Setup/Test.hs view
@@ -1,12 +1,9 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-}------------------------------------------------------------------------------- -- | -- Module : Distribution.Simple.Test
src/Distribution/Simple/Test.hs view
@@ -27,7 +27,7 @@ import qualified Distribution.PackageDescription as PD import Distribution.Pretty-import Distribution.Simple.Build (addInternalBuildTools)+import Distribution.Simple.Build (addInternalBuildToolsFixed) import Distribution.Simple.Compiler import Distribution.Simple.Hpc import Distribution.Simple.InstallDirs@@ -70,6 +70,7 @@ -- ^ flags sent to test -> IO () test args pkg_descr lbi0 flags = do+ curDir <- LBI.absoluteWorkingDirLBI lbi0 let common = testCommonFlags flags verbosity = fromFlag $ setupVerbosity common distPref = fromFlag $ setupDistPref common@@ -95,7 +96,8 @@ lbi { withPrograms = -- Include any build-tool-depends on build tools internal to the current package.- addInternalBuildTools+ addInternalBuildToolsFixed+ (Just curDir) pkg_descr lbi (PD.testBuildInfo suite)
src/Distribution/Simple/Test/ExeV10.hs view
@@ -8,7 +8,6 @@ import Distribution.Compat.Prelude import Prelude () -import Distribution.Compat.Environment import qualified Distribution.PackageDescription as PD import Distribution.Simple.BuildPaths import Distribution.Simple.Compiler@@ -64,8 +63,6 @@ way = guessWay lbi tixDir_ = i $ tixDir distPref way - existingEnv <- getEnvironment- let cmd = i (LBI.buildDir lbi) </> testName'@@ -92,14 +89,19 @@ pathVar = progSearchPath progDb envOverrides = progOverrideEnv progDb newPath <- programSearchPathAsPATHVar pathVar- overrideEnv <- fromMaybe [] <$> getEffectiveEnvironment ([("PATH", Just newPath)] ++ envOverrides) let opts = map (testOption pkg_descr lbi suite) (testOptions flags) tixFile = packageRoot (testCommonFlags flags) </> getSymbolicPath (tixFilePath distPref way (testName'))- shellEnv = [("HPCTIXFILE", tixFile) | isCoverageEnabled] ++ overrideEnv ++ existingEnv + shellEnv <-+ getFullEnvironment+ ( [("PATH", Just newPath)]+ ++ [("HPCTIXFILE", Just tixFile) | isCoverageEnabled]+ ++ envOverrides+ )+ -- Add (DY)LD_LIBRARY_PATH if needed shellEnv' <- if LBI.withDynExe lbi@@ -125,13 +127,17 @@ -- drain the output. evaluate (force logText) + let mbWorkDir =+ interpretSymbolicPathCWD+ <$> flagToMaybe (setupWorkingDir (testCommonFlags flags))+ (exit, logText) <- case testWrapper flags of Flag path -> rawSystemIOWithEnvAndAction verbosity path (cmd : opts)- Nothing+ mbWorkDir (Just shellEnv') getLogText -- these handles are automatically closed@@ -143,7 +149,7 @@ verbosity cmd opts- Nothing+ mbWorkDir (Just shellEnv') getLogText -- these handles are automatically closed
src/Distribution/Simple/Test/LibV09.hs view
@@ -17,7 +17,6 @@ import Distribution.Types.UnqualComponentName import Prelude () -import Distribution.Compat.Environment import Distribution.Compat.Internal.TempFile import Distribution.Compat.Process (proc) import Distribution.ModuleName@@ -70,7 +69,6 @@ way = guessWay lbi let mbWorkDir = LBI.mbWorkDirLBI lbi- existingEnv <- getEnvironment let cmd = interpretSymbolicPath mbWorkDir (LBI.buildDir lbi)@@ -100,15 +98,17 @@ pathVar = progSearchPath progDb envOverrides = progOverrideEnv progDb newPath <- programSearchPathAsPATHVar pathVar- overrideEnv <- fromMaybe [] <$> getEffectiveEnvironment ([("PATH", Just newPath)] ++ envOverrides) -- Run test executable let opts = map (testOption pkg_descr lbi suite) $ testOptions flags tixFile = i $ tixFilePath distPref way testName'- shellEnv =- [("HPCTIXFILE", tixFile) | isCoverageEnabled]- ++ overrideEnv- ++ existingEnv++ shellEnv <-+ getFullEnvironment+ ( [("PATH", Just newPath)]+ ++ [("HPCTIXFILE", Just tixFile) | isCoverageEnabled]+ ++ envOverrides+ ) -- Add (DY)LD_LIBRARY_PATH if needed shellEnv' <- if LBI.withDynExe lbi
src/Distribution/Utils/MapAccum.hs view
@@ -1,5 +1,3 @@-{-# LANGUAGE CPP #-}- module Distribution.Utils.MapAccum (mapAccumM) where import Distribution.Compat.Prelude
src/Distribution/Utils/Progress.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveFunctor #-} -- Note: This module was copied from cabal-install.