Link the rts shared libs against gmp and the other C libs
authorDuncan Coutts <duncan@well-typed.com>
Fri, 1 May 2009 23:58:24 +0000 (23:58 +0000)
committerDuncan Coutts <duncan@well-typed.com>
Fri, 1 May 2009 23:58:24 +0000 (23:58 +0000)
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

index 4f81e10..0e7650e 100644 (file)
@@ -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)
 
 
 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
 
 #-----------------------------------------------------------------------------
 # 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_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) $$@
        $$(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) $$@
 else
 $$(rts_$1_LIB) : $$(rts_$1_OBJS)
        $$(RM) $$@