summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2021-07-21 09:22:06 -0400
committerMarge Bot <ben+marge-bot@smart-cactus.org>2021-07-27 04:47:51 -0400
commit63184a71277aa15608659ad20f45b7b0fe9746bc (patch)
tree09ebc39bfc16ec045931be9abd39005a144d5bf8
parentdd3c9602fdb0d408509d166cc0bf05777753ca43 (diff)
downloadhaskell-63184a71277aa15608659ad20f45b7b0fe9746bc.tar.gz
rts: Don't declare libCffi as bundled when using system libffi
Previously the rts's cabal file would claim that it bundled libffi, even if we are using the system's libffi. Fixes #19869.
-rw-r--r--configure.ac4
-rw-r--r--hadrian/src/Settings/Packages.hs2
-rw-r--r--rts/rts.cabal.in14
3 files changed, 15 insertions, 5 deletions
diff --git a/configure.ac b/configure.ac
index 535a0c3b88..b91c86f1ba 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1083,10 +1083,12 @@ AC_ARG_WITH([system-libffi],
])
AS_IF([test "x$with_system_libffi" = "xyes"],
- [UseSystemLibFFI="YES"], [UseSystemLibFFI="NO"]
+ [UseSystemLibFFI="YES"; CabalUseSystemLibFFI="True"],
+ [UseSystemLibFFI="NO"; CabalUseSystemLibFFI="True"]
)
AC_SUBST(UseSystemLibFFI)
+AC_SUBST(CabalUseSystemLibFFI)
AC_ARG_WITH([ffi-includes],
[AS_HELP_STRING([--with-ffi-includes=ARG],
diff --git a/hadrian/src/Settings/Packages.hs b/hadrian/src/Settings/Packages.hs
index 3b722e05a9..1a3d191c99 100644
--- a/hadrian/src/Settings/Packages.hs
+++ b/hadrian/src/Settings/Packages.hs
@@ -245,6 +245,7 @@ rtsPackageArgs = package rts ? do
way <- getWay
path <- getBuildPath
top <- expr topDirectory
+ useSystemFfi <- expr $ flag UseSystemFfi
libffiName <- expr libffiLibraryName
ffiIncludeDir <- getSetting FfiIncludeDir
ffiLibraryDir <- getSetting FfiLibDir
@@ -355,6 +356,7 @@ rtsPackageArgs = package rts ? do
, any (wayUnit Debug) rtsWays `cabalFlag` "debug"
, any (wayUnit Logging) rtsWays `cabalFlag` "logging"
, any (wayUnit Dynamic) rtsWays `cabalFlag` "dynamic"
+ , useSystemFfi `cabalFlag` "use-system-libffi"
, useLibffiForAdjustors `cabalFlag` "libffi-adjustors"
, Debug `wayUnit` way `cabalFlag` "find-ptr"
]
diff --git a/rts/rts.cabal.in b/rts/rts.cabal.in
index ded2f15509..c46873e205 100644
--- a/rts/rts.cabal.in
+++ b/rts/rts.cabal.in
@@ -12,6 +12,8 @@ flag libdl
default: @CabalHaveLibdl@
flag ffi
default: @CabalHaveLibffi@
+flag use-system-libffi
+ default: @CabalUseSystemLibFFI@
flag libffi-adjustors
default: @CabalLibffiAdjustors@
flag need-pthread
@@ -57,10 +59,14 @@ library
-- expects the unit-id to be
-- set without version
ghc-options: -this-unit-id rts
- if os(windows)
- extra-bundled-libraries: Cffi-6
- else
- extra-bundled-libraries: Cffi
+
+ -- If we are using an in-tree libffi then we must declare it as a bundled
+ -- library to ensure that Cabal installs it.
+ if !flag(use-system-libffi)
+ if os(windows)
+ extra-bundled-libraries: Cffi-6
+ else
+ extra-bundled-libraries: Cffi
-- The make build system does something special in config.mk.in
-- for generating profiled, debugged, etc builds of those