gnu: ghc-9.2: Support static linking with glibc < 2.34.
* gnu/packages/patches/ghc-9.2-glibc-2.33-link-order.patch: New file. * gnu/local.mk (dist_patch_DATA): Register it. * gnu/packages/haskell.scm (ghc-9.2)[origin]: Use it.
This commit is contained in:
parent
4bb40b098d
commit
7df12c8ca6
@ -1198,6 +1198,7 @@ dist_patch_DATA = \
|
||||
%D%/packages/patches/genimage-mke2fs-test.patch \
|
||||
%D%/packages/patches/geoclue-config.patch \
|
||||
%D%/packages/patches/ghc-8.0-fall-back-to-madv_dontneed.patch \
|
||||
%D%/packages/patches/ghc-9.2-glibc-2.33-link-order.patch \
|
||||
%D%/packages/patches/ghc-testsuite-dlopen-pie.patch \
|
||||
%D%/packages/patches/ghc-bloomfilter-ghc9.2.patch \
|
||||
%D%/packages/patches/ghc-bytestring-handle-ghc9.patch \
|
||||
|
@ -1286,7 +1286,8 @@ interactive environment for the functional language Haskell.")
|
||||
"/ghc-" version "-src.tar.xz"))
|
||||
(sha256
|
||||
(base32
|
||||
"07028i0hm74svvq9b3jpkczaj6lsdgn3hgr4wa7diqiq3dypj1h6"))))
|
||||
"07028i0hm74svvq9b3jpkczaj6lsdgn3hgr4wa7diqiq3dypj1h6"))
|
||||
(patches (search-patches "ghc-9.2-glibc-2.33-link-order.patch"))))
|
||||
(arguments
|
||||
(substitute-keyword-arguments (package-arguments base)
|
||||
((#:phases phases '%standard-phases)
|
||||
|
35
gnu/packages/patches/ghc-9.2-glibc-2.33-link-order.patch
Normal file
35
gnu/packages/patches/ghc-9.2-glibc-2.33-link-order.patch
Normal file
@ -0,0 +1,35 @@
|
||||
Slightly modified version of
|
||||
https://gitlab.haskell.org/ghc/ghc/-/issues/19029#note_447989, required
|
||||
for older, buggy glibc versions < 2.34.
|
||||
|
||||
diff -Naur ghc-9.2.5/compiler/GHC/Linker/Unit.hs ghc-9.2.5.patched/compiler/GHC/Linker/Unit.hs
|
||||
--- ghc-9.2.5/compiler/GHC/Linker/Unit.hs 2022-11-06 20:40:29.000000000 +0100
|
||||
+++ ghc-9.2.5.patched/compiler/GHC/Linker/Unit.hs 2023-01-15 14:52:57.511275338 +0100
|
||||
@@ -31,11 +31,26 @@
|
||||
ps <- mayThrowUnitErr $ preloadUnitsInfo' unit_env pkgs
|
||||
return (collectLinkOpts dflags ps)
|
||||
|
||||
+fixOrderLinkOpts :: [String] -> [String]
|
||||
+fixOrderLinkOpts opts
|
||||
+ | have_bad_glibc_version -- glibc version strictly less than 2.34
|
||||
+ , let (before, rest) = break (== libc) opts
|
||||
+ , not (pthread `elem` before)
|
||||
+ , pthread `elem` rest -- optional if we know pthread is definitely present
|
||||
+ = before ++ pthread_and_deps ++ rest
|
||||
+ | otherwise
|
||||
+ = opts
|
||||
+ where
|
||||
+ pthread = "-lpthread"
|
||||
+ libc = "-lc"
|
||||
+ pthread_and_deps = [ "-lrt", pthread ] -- should depend on the environment
|
||||
+ have_bad_glibc_version = True
|
||||
+
|
||||
collectLinkOpts :: DynFlags -> [UnitInfo] -> ([String], [String], [String])
|
||||
collectLinkOpts dflags ps =
|
||||
(
|
||||
concatMap (map ("-l" ++) . unitHsLibs (ghcNameVersion dflags) (ways dflags)) ps,
|
||||
- concatMap (map ("-l" ++) . map ST.unpack . unitExtDepLibsSys) ps,
|
||||
+ fixOrderLinkOpts $ concatMap (map ("-l" ++) . map ST.unpack . unitExtDepLibsSys) ps,
|
||||
concatMap (map ST.unpack . unitLinkerOptions) ps
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user