aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnu/packages/haskell.scm16
-rw-r--r--gnu/packages/libffi.scm13
2 files changed, 26 insertions, 3 deletions
diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm
index effc6eeb1b..ad2aa20ee1 100644
--- a/gnu/packages/haskell.scm
+++ b/gnu/packages/haskell.scm
@@ -423,7 +423,11 @@ libraries are included in this package.")
(inputs
`(("gmp" ,gmp)
("ncurses" ,ncurses)
- ("libffi" ,libffi)
+
+ ;; Use a LibFFI variant without static trampolines to work around
+ ;; <https://gitlab.haskell.org/ghc/ghc/-/issues/20051>.
+ ("libffi" ,libffi-sans-static-trampolines)
+
("ghc-testsuite"
,(origin
(method url-fetch)
@@ -597,7 +601,11 @@ interactive environment for the functional language Haskell.")
(inputs
`(("gmp" ,gmp)
("ncurses" ,ncurses)
- ("libffi" ,libffi)
+
+ ;; Use a LibFFI variant without static trampolines to work around
+ ;; <https://gitlab.haskell.org/ghc/ghc/-/issues/20051>.
+ ("libffi" ,libffi-sans-static-trampolines)
+
("ghc-testsuite"
,(origin
(method url-fetch)
@@ -696,7 +704,9 @@ interactive environment for the functional language Haskell.")
(sha256
(base32 "1ch4j2asg7pr52ai1hwzykxyj553wndg7wq93i47ql4fllspf48i"))))
(inputs
- (list gmp ncurses libffi))
+ ;; Note: GHC < 9 requires LibFFI < 3.4, or a variant without static
+ ;; trampolines.
+ (list gmp ncurses libffi-sans-static-trampolines))
(native-inputs
`(("perl" ,perl)
("python" ,python) ; for tests
diff --git a/gnu/packages/libffi.scm b/gnu/packages/libffi.scm
index 0c59509a91..923019c2ca 100644
--- a/gnu/packages/libffi.scm
+++ b/gnu/packages/libffi.scm
@@ -28,8 +28,10 @@
#:use-module (gnu packages)
#:use-module (guix licenses)
#:use-module (guix packages)
+ #:use-module (guix gexp)
#:use-module (guix download)
#:use-module (guix git-download)
+ #:use-module (guix utils)
#:use-module (gnu packages check)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages python)
@@ -78,6 +80,17 @@ conversions for values passed between the two languages.")
;; See <https://github.com/atgreen/libffi/blob/master/LICENSE>.
(license expat)))
+;; Provide a variant without static trampolines as some packages
+;; (particularly GHC < 9) cannot handle them. See
+;; <https://github.com/libffi/libffi/pull/647> for a discussion.
+(define-public libffi-sans-static-trampolines
+ (hidden-package
+ (package/inherit libffi
+ (arguments
+ (substitute-keyword-arguments (package-arguments libffi)
+ ((#:configure-flags flags #~'())
+ #~(append #$flags '("--disable-exec-static-tramp"))))))))
+
(define-public python-cffi
(package
(name "python-cffi")