From 2b7f450a6dbc2f78f99101560f82be20fa80833d Mon Sep 17 00:00:00 2001
From: Duncan Coutts <duncan@well-typed.com>
Date: Fri, 1 May 2009 23:58:24 +0000
Subject: [PATCH] Link the rts shared libs against gmp and the other C libs
 When using shared libs we should link each lib against its deps. This allows
 the dynamic linker to chase dependencies and means we do not have to specify
 all indirect dependencies (as we must do for static libs).

---
 rts/ghc.mk | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/rts/ghc.mk b/rts/ghc.mk
index 4f81e10dbd8..0e7650eca56 100644
--- a/rts/ghc.mk
+++ b/rts/ghc.mk
@@ -70,6 +70,11 @@ rts/dist/build/sm/Scav_thr.c : rts/sm/Scav.c
 
 rts_H_FILES = $(wildcard $(GHC_INCLUDE_DIR)/*.h) $(wildcard rts/*.h)
 
+# collect the -l flags that we need to link the rts dyn lib.
+rts/libs.depend : $(GHC_PKG_INPLACE)
+	$$(GHC_PKG_INPLACE) field rts extra-libraries \
+	  | sed -e 's/^extra-libraries: //' -e 's/\([a-z]*\)/-l\1/g' > $$@
+
 #-----------------------------------------------------------------------------
 # Building one way
 
@@ -139,9 +144,9 @@ rts_$1_CMM_OBJS = $$(patsubst rts/%.cmm,rts/dist/build/%.$$($1_osuf),$$(rts_CMM_
 rts_$1_OBJS = $$(rts_$1_C_OBJS) $$(rts_$1_S_OBJS) $$(rts_$1_CMM_OBJS)
 
 ifneq "$$(findstring dyn, $1)" ""
-$$(rts_$1_LIB) : $$(rts_$1_OBJS)
+$$(rts_$1_LIB) : $$(rts_$1_OBJS) rts/libs.depend
 	$$(RM) $$@
-	$$(rts_dist_HC) -shared -dynamic -no-auto-link-packages $$(rts_$1_OBJS) -o $$@
+	$$(rts_dist_HC) -shared -dynamic -no-auto-link-packages `cat rts/libs.depend` $$(rts_$1_OBJS) -o $$@
 else
 $$(rts_$1_LIB) : $$(rts_$1_OBJS)
 	$$(RM) $$@
-- 
GitLab