diff options
-rw-r--r-- | gnu/packages/haskell.scm | 16 | ||||
-rw-r--r-- | gnu/packages/libffi.scm | 13 |
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") |