mirror of
https://github.com/ilyakooo0/nixpkgs.git
synced 2024-12-27 05:43:50 +03:00
ghc: add Darwin patch for #10322
This commit is contained in:
parent
b84f3e85d9
commit
24be3cfcff
@ -42,6 +42,9 @@ stdenv.mkDerivation rec {
|
|||||||
url = "https://git.haskell.org/ghc.git/patch/c46e4b184e0abc158ad8f1eff6b3f0421acaf984";
|
url = "https://git.haskell.org/ghc.git/patch/c46e4b184e0abc158ad8f1eff6b3f0421acaf984";
|
||||||
sha256 = "0fkdyqd4bqp742rydwmqq8d2n7gf61bgdhaiw8xf7jy0ix7lr60w";
|
sha256 = "0fkdyqd4bqp742rydwmqq8d2n7gf61bgdhaiw8xf7jy0ix7lr60w";
|
||||||
})
|
})
|
||||||
|
# Fix TH + indirect symbol resolution on OSX (or any system using gold linker)
|
||||||
|
# https://phabricator.haskell.org/D852
|
||||||
|
./osx-dylib-resolver.patch
|
||||||
];
|
];
|
||||||
|
|
||||||
postPatch = ''
|
postPatch = ''
|
||||||
|
60
pkgs/development/compilers/ghc/osx-dylib-resolver.patch
Normal file
60
pkgs/development/compilers/ghc/osx-dylib-resolver.patch
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
diff --git a/compiler/ghci/Linker.hs b/compiler/ghci/Linker.hs
|
||||||
|
--- a/compiler/ghci/Linker.hs
|
||||||
|
+++ b/compiler/ghci/Linker.hs
|
||||||
|
@@ -119,9 +119,9 @@
|
||||||
|
-- that is really important
|
||||||
|
pkgs_loaded :: ![PackageKey],
|
||||||
|
|
||||||
|
- -- we need to remember the name of the last temporary DLL/.so
|
||||||
|
- -- so we can link it
|
||||||
|
- last_temp_so :: !(Maybe (FilePath, String)) }
|
||||||
|
+ -- we need to remember the name of previous temporary DLL/.so
|
||||||
|
+ -- libraries so we can link them (see #10322)
|
||||||
|
+ temp_sos :: ![(FilePath, String)] }
|
||||||
|
|
||||||
|
|
||||||
|
emptyPLS :: DynFlags -> PersistentLinkerState
|
||||||
|
@@ -131,7 +131,7 @@
|
||||||
|
pkgs_loaded = init_pkgs,
|
||||||
|
bcos_loaded = [],
|
||||||
|
objs_loaded = [],
|
||||||
|
- last_temp_so = Nothing }
|
||||||
|
+ temp_sos = [] }
|
||||||
|
|
||||||
|
-- Packages that don't need loading, because the compiler
|
||||||
|
-- shares them with the interpreted program.
|
||||||
|
@@ -841,19 +841,19 @@
|
||||||
|
dflags2 = dflags1 {
|
||||||
|
-- We don't want the original ldInputs in
|
||||||
|
-- (they're already linked in), but we do want
|
||||||
|
- -- to link against the previous dynLoadObjs
|
||||||
|
- -- library if there was one, so that the linker
|
||||||
|
+ -- to link against previous dynLoadObjs
|
||||||
|
+ -- libraries if there were any, so that the linker
|
||||||
|
-- can resolve dependencies when it loads this
|
||||||
|
-- library.
|
||||||
|
ldInputs =
|
||||||
|
- case last_temp_so pls of
|
||||||
|
- Nothing -> []
|
||||||
|
- Just (lp, l) ->
|
||||||
|
+ concatMap
|
||||||
|
+ (\(lp, l) ->
|
||||||
|
[ Option ("-L" ++ lp)
|
||||||
|
, Option ("-Wl,-rpath")
|
||||||
|
, Option ("-Wl," ++ lp)
|
||||||
|
, Option ("-l" ++ l)
|
||||||
|
- ],
|
||||||
|
+ ])
|
||||||
|
+ (temp_sos pls),
|
||||||
|
-- Even if we're e.g. profiling, we still want
|
||||||
|
-- the vanilla dynamic libraries, so we set the
|
||||||
|
-- ways / build tag to be just WayDyn.
|
||||||
|
@@ -868,7 +868,7 @@
|
||||||
|
consIORef (filesToNotIntermediateClean dflags) soFile
|
||||||
|
m <- loadDLL soFile
|
||||||
|
case m of
|
||||||
|
- Nothing -> return pls { last_temp_so = Just (libPath, libName) }
|
||||||
|
+ Nothing -> return pls { temp_sos = (libPath, libName) : temp_sos pls }
|
||||||
|
Just err -> panic ("Loading temp shared object failed: " ++ err)
|
||||||
|
|
||||||
|
rmDupLinkables :: [Linkable] -- Already loaded
|
Loading…
Reference in New Issue
Block a user