From 7df12c8ca631cc46f59da9ceeb883a28044dbb9e Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Sun, 29 Jan 2023 18:45:45 +0100 Subject: 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. --- gnu/packages/haskell.scm | 3 +- .../patches/ghc-9.2-glibc-2.33-link-order.patch | 35 ++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/ghc-9.2-glibc-2.33-link-order.patch (limited to 'gnu/packages') diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm index 6e00a756a8..3406161c7c 100644 --- a/gnu/packages/haskell.scm +++ b/gnu/packages/haskell.scm @@ -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) diff --git a/gnu/packages/patches/ghc-9.2-glibc-2.33-link-order.patch b/gnu/packages/patches/ghc-9.2-glibc-2.33-link-order.patch new file mode 100644 index 0000000000..5d4afa28c1 --- /dev/null +++ b/gnu/packages/patches/ghc-9.2-glibc-2.33-link-order.patch @@ -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 + ) + -- cgit v1.2.3