about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2013-11-23T20·11+0000
committerEelco Dolstra <eelco.dolstra@logicblox.com>2013-11-23T20·11+0000
commit90dfb37f147941e5edf262c27e269cdfd1e8dcfb (patch)
tree31293e2bfb2e401f6dd8aa39bc74c2ed895c0b4e
parent14772783e66a6e67726872926834c0e9f7210e6d (diff)
Allow (dynamic) libraries to depend on other libraries
-rw-r--r--Makefile.lib17
-rw-r--r--src/libexpr/Makefile.new2
-rw-r--r--src/libmain/Makefile.new2
-rw-r--r--src/libstore/Makefile.new2
-rw-r--r--src/libutil/Makefile.new2
5 files changed, 17 insertions, 8 deletions
diff --git a/Makefile.lib b/Makefile.lib
index 0a2fcccadcc6..612550e92133 100644
--- a/Makefile.lib
+++ b/Makefile.lib
@@ -52,7 +52,8 @@ libs_list :=
 define LIBS_template =
   _d := $$(strip $$($(1)_DIR))
   _srcs := $$(foreach src, $$($(1)_SOURCES), $$(_d)/$$(src))
-  _objs := $$(addsuffix .o, $$(basename $$(_srcs)))
+  $(1)_OBJS := $$(addsuffix .o, $$(basename $$(_srcs)))
+  _libs := $$(foreach lib, $$($(1)_LIBS), $$($$(lib)_NAME))
 
   $(1)_LDFLAGS_USE :=
   $(1)_LDFLAGS_USE_INSTALLED :=
@@ -60,8 +61,8 @@ define LIBS_template =
   ifeq ($(BUILD_SHARED_LIBS), 1)
 
     _lib := $$(_d)/$(1).so
-    $$(_lib): $$(_objs)
-	$(QUIET) $(CC) -o $$@ -shared $$^ $$($(1)_LDFLAGS)
+    $$(_lib): $$($(1)_OBJS) $$(_libs)
+	$(QUIET) $(CC) -o $$@ -shared -Wl,--no-copy-dt-needed-entries $$($(1)_OBJS) $$($(1)_LDFLAGS) $$(foreach lib, $$($(1)_LIBS), $$($$(lib)_LDFLAGS_USE))
 
     $(1)_LDFLAGS_USE += -L$$(_d) -Wl,-rpath,$$(abspath $$(_d)) -l$$(patsubst lib%,%,$$(strip $(1)))
 
@@ -69,16 +70,18 @@ define LIBS_template =
 
     $(1)_INSTALL_PATH := $$($(1)_INSTALL_DIR)/$(1).so
 
-    $$($(1)_INSTALL_PATH): $$(_objs)
+    _libs_final := $$(foreach lib, $$($(1)_LIBS), $$($$(lib)_INSTALL_PATH))
+
+    $$($(1)_INSTALL_PATH): $$($(1)_OBJS) $$(_libs_final)
 	install -d $$($(1)_INSTALL_DIR)
-	$(QUIET) $(CC) -o $$@ -shared $$^ $$($(1)_LDFLAGS)
+	$(QUIET) $(CC) -o $$@ -shared -Wl,--no-copy-dt-needed-entries $$($(1)_OBJS) $$($(1)_LDFLAGS) $$(foreach lib, $$($(1)_LIBS), $$($$(lib)_LDFLAGS_USE_INSTALLED))
 
     $(1)_LDFLAGS_USE_INSTALLED += -L$$($(1)_INSTALL_DIR) -Wl,-rpath,$$($(1)_INSTALL_DIR) -l$$(patsubst lib%,%,$$(strip $(1)))
 
   else
 
     _lib := $$(_d)/$(1).a
-    $$(_lib): $$(_objs)
+    $$(_lib): $$($(1)_OBJS)
 	$(QUIET) ar crs $$@ $$?
 
     $(1)_LDFLAGS_USE += $$(_lib) $$($(1)_LDFLAGS)
@@ -92,7 +95,7 @@ define LIBS_template =
   $(1)_NAME := $$(_lib)
 
   # Propagate CXXFLAGS to the individual object files.
-  $$(foreach obj, $$(_objs), $$(eval $$(obj)_CXXFLAGS=$$($(1)_CXXFLAGS)))
+  $$(foreach obj, $$($(1)_OBJS), $$(eval $$(obj)_CXXFLAGS=$$($(1)_CXXFLAGS)))
 
   include $$(wildcard $$(_d)/*.dep)
 
diff --git a/src/libexpr/Makefile.new b/src/libexpr/Makefile.new
index 3fd4fc7b2161..ded112107fe8 100644
--- a/src/libexpr/Makefile.new
+++ b/src/libexpr/Makefile.new
@@ -7,6 +7,8 @@ libexpr_SOURCES = \
   get-drvs.cc attr-path.cc value-to-xml.cc value-to-json.cc \
   common-opts.cc names.cc
 
+libexpr_LIBS = libutil libstore libformat
+
 $(d)/parser-tab.cc $(d)/parser-tab.hh: $(d)/parser.y
 	bison -v -o $(libexpr_DIR)/parser-tab.cc $< -d
 
diff --git a/src/libmain/Makefile.new b/src/libmain/Makefile.new
index eed7e84afe18..86323dbd48ae 100644
--- a/src/libmain/Makefile.new
+++ b/src/libmain/Makefile.new
@@ -4,4 +4,6 @@ libmain_DIR := $(d)
 
 libmain_SOURCES = shared.cc stack.cc
 
+libmain_LIBS = libstore libutil libformat
+
 libmain_LDFLAGS_PROPAGATED = $(BDW_GC_LIBS)
diff --git a/src/libstore/Makefile.new b/src/libstore/Makefile.new
index 0a384e0b1d44..7d542d3123ee 100644
--- a/src/libstore/Makefile.new
+++ b/src/libstore/Makefile.new
@@ -6,6 +6,8 @@ libstore_SOURCES = \
   store-api.cc local-store.cc remote-store.cc derivations.cc build.cc misc.cc \
   globals.cc references.cc pathlocks.cc gc.cc optimise-store.cc
 
+libstore_LIBS = libutil libformat
+
 libstore_LDFLAGS = -lsqlite3 -lbz2
 
 libstore_CXXFLAGS = \
diff --git a/src/libutil/Makefile.new b/src/libutil/Makefile.new
index b7dbf7d1d21e..59670d2ce0b0 100644
--- a/src/libutil/Makefile.new
+++ b/src/libutil/Makefile.new
@@ -10,4 +10,4 @@ else
   libutil_SOURCES += md5.c sha1.c sha256.c
 endif
 
-libutil_LIBS = src/boost/format/libformat
+libutil_LIBS = libformat