diff options
| -rw-r--r-- | gnu/local.mk | 1 | ||||
| -rw-r--r-- | gnu/packages/haskell.scm | 3 | ||||
| -rw-r--r-- | gnu/packages/patches/ghc-9.10-cabal-support-package-path.patch | 67 |
3 files changed, 70 insertions, 1 deletions
diff --git a/gnu/local.mk b/gnu/local.mk index f90c12810fd..ecb32742310 100644 --- a/gnu/local.mk +++ b/gnu/local.mk | |||
| @@ -1448,6 +1448,7 @@ dist_patch_DATA = \ | |||
| 1448 | %D%/packages/patches/ghc-9.2-cabal-support-package-path.patch \ | 1448 | %D%/packages/patches/ghc-9.2-cabal-support-package-path.patch \ |
| 1449 | %D%/packages/patches/ghc-9-StgCRunAsm-only-when-needed.patch \ | 1449 | %D%/packages/patches/ghc-9-StgCRunAsm-only-when-needed.patch \ |
| 1450 | %D%/packages/patches/ghc-9.2-grep-warnings.patch \ | 1450 | %D%/packages/patches/ghc-9.2-grep-warnings.patch \ |
| 1451 | %D%/packages/patches/ghc-9.10-cabal-support-package-path.patch \ | ||
| 1451 | %D%/packages/patches/ghc-basement-fix-32-bit.patch \ | 1452 | %D%/packages/patches/ghc-basement-fix-32-bit.patch \ |
| 1452 | %D%/packages/patches/ghc-testsuite-dlopen-pie.patch \ | 1453 | %D%/packages/patches/ghc-testsuite-dlopen-pie.patch \ |
| 1453 | %D%/packages/patches/ghc-testsuite-grep-compat.patch \ | 1454 | %D%/packages/patches/ghc-testsuite-grep-compat.patch \ |
diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm index 6bba8bccbb1..56ccab3b45a 100644 --- a/gnu/packages/haskell.scm +++ b/gnu/packages/haskell.scm | |||
| @@ -2135,7 +2135,8 @@ interactive environment for the functional language Haskell.") | |||
| 2135 | "/ghc-" version "-src.tar.xz")) | 2135 | "/ghc-" version "-src.tar.xz")) |
| 2136 | (sha256 | 2136 | (sha256 |
| 2137 | (base32 | 2137 | (base32 |
| 2138 | "1pm84cgr3yg99r3srdjllgz6zig8h7dbwa597srwcnjp0nh41zam")))) | 2138 | "1pm84cgr3yg99r3srdjllgz6zig8h7dbwa597srwcnjp0nh41zam")) |
| 2139 | (patches (search-patches "ghc-9.10-cabal-support-package-path.patch")))) | ||
| 2139 | (arguments | 2140 | (arguments |
| 2140 | (substitute-keyword-arguments (package-arguments base) | 2141 | (substitute-keyword-arguments (package-arguments base) |
| 2141 | ((#:phases phases #~%standard-phases) | 2142 | ((#:phases phases #~%standard-phases) |
diff --git a/gnu/packages/patches/ghc-9.10-cabal-support-package-path.patch b/gnu/packages/patches/ghc-9.10-cabal-support-package-path.patch new file mode 100644 index 00000000000..edfe06f0b1a --- /dev/null +++ b/gnu/packages/patches/ghc-9.10-cabal-support-package-path.patch | |||
| @@ -0,0 +1,67 @@ | |||
| 1 | Without this patch, Cabal terminates if GHC_PACKAGE_PATH is set. This is | ||
| 2 | an annoyance with Guix as it makes heavy use of GHC_PACKAGE_PATH to have | ||
| 3 | GHC pickup Haskell package installed via Guix. Therefore, Cabal does | ||
| 4 | presently not work by default in environments created by Guix. This is | ||
| 5 | a workaround which makes Cabal respect GHC_PACKAGE_PATH. | ||
| 6 | |||
| 7 | Taken from https://github.com/haskell/cabal/issues/3728 | ||
| 8 | |||
| 9 | diff --git a/Cabal/src/Distribution/Simple/GHC.hs b/Cabal/src/Distribution/Simple/GHC.hs | ||
| 10 | index 614de7580..a14dd562f 100644 | ||
| 11 | --- a/libraries/Cabal/Cabal/src/Distribution/Simple/GHC.hs | ||
| 12 | +++ b/libraries/Cabal/Cabal/src/Distribution/Simple/GHC.hs | ||
| 13 | @@ -79,6 +79,7 @@ module Distribution.Simple.GHC | ||
| 14 | , GhcImplInfo (..) | ||
| 15 | ) where | ||
| 16 | |||
| 17 | +import Distribution.Compat.Environment (lookupEnv) | ||
| 18 | import Distribution.Compat.Prelude | ||
| 19 | import Prelude () | ||
| 20 | |||
| 21 | @@ -133,6 +134,7 @@ import System.FilePath | ||
| 22 | ( takeDirectory | ||
| 23 | , (<.>) | ||
| 24 | , (</>) | ||
| 25 | + , searchPathSeparator | ||
| 26 | ) | ||
| 27 | import qualified System.Info | ||
| 28 | #ifndef mingw32_HOST_OS | ||
| 29 | @@ -407,9 +409,11 @@ getInstalledPackages | ||
| 30 | -> ProgramDb | ||
| 31 | -> IO InstalledPackageIndex | ||
| 32 | getInstalledPackages verbosity comp packagedbs progdb = do | ||
| 33 | - checkPackageDbEnvVar verbosity | ||
| 34 | checkPackageDbStack verbosity comp packagedbs | ||
| 35 | - pkgss <- getInstalledPackages' verbosity packagedbs progdb | ||
| 36 | + envPackageDBs <- | ||
| 37 | + maybe [] (map SpecificPackageDB . unintersperse searchPathSeparator) | ||
| 38 | + <$> lookupEnv "GHC_PACKAGE_PATH" | ||
| 39 | + pkgss <- getInstalledPackages' verbosity (envPackageDBs ++ packagedbs) progdb | ||
| 40 | index <- toPackageIndex verbosity pkgss progdb | ||
| 41 | return $! hackRtsPackage index | ||
| 42 | where | ||
| 43 | @@ -484,10 +488,6 @@ getUserPackageDB _verbosity ghcProg platform = do | ||
| 44 | packageConfFileName = "package.conf.d" | ||
| 45 | ghcVersion = fromMaybe (error "GHC.getUserPackageDB: no ghc version") $ programVersion ghcProg | ||
| 46 | |||
| 47 | -checkPackageDbEnvVar :: Verbosity -> IO () | ||
| 48 | -checkPackageDbEnvVar verbosity = | ||
| 49 | - Internal.checkPackageDbEnvVar verbosity "GHC" "GHC_PACKAGE_PATH" | ||
| 50 | - | ||
| 51 | checkPackageDbStack :: Verbosity -> Compiler -> PackageDBStack -> IO () | ||
| 52 | checkPackageDbStack verbosity comp = | ||
| 53 | if flagPackageConf implInfo | ||
| 54 | @@ -542,8 +542,11 @@ getInstalledPackagesMonitorFiles | ||
| 55 | -> ProgramDb | ||
| 56 | -> [PackageDB] | ||
| 57 | -> IO [FilePath] | ||
| 58 | -getInstalledPackagesMonitorFiles verbosity platform progdb = | ||
| 59 | - traverse getPackageDBPath | ||
| 60 | +getInstalledPackagesMonitorFiles verbosity platform progdb packageDBs = do | ||
| 61 | + envPackageDBs <- | ||
| 62 | + maybe [] (map SpecificPackageDB . unintersperse searchPathSeparator) | ||
| 63 | + <$> lookupEnv "GHC_PACKAGE_PATH" | ||
| 64 | + traverse getPackageDBPath (envPackageDBs ++ packageDBs) | ||
| 65 | where | ||
| 66 | getPackageDBPath :: PackageDB -> IO FilePath | ||
| 67 | getPackageDBPath GlobalPackageDB = | ||
