[reSIProcate] soname for shared libraries
Hi,
Currently I'm trying to package reSIProcate for Debian[0]. This is a
rather difficult process due to many requirements for Debian library
packages[1].
The most difficult packaging problem is to get the shared object name
and version right.
Correct me if I'm wrong, but reSIProcate doesn't provide ABI or API
compatibility between releases. So according to [1] adding a release
version to the soname is recommended.
This would result in the following package layout:
libresiprocate-1.5:
/usr/lib/librutil-1.5.so (soname librutil-1.5.so)
/usr/lib/libresip-1.5.so (soname libresip-1.5.so)
/usr/lib/libdum-1.5.so (soname libdum-1.5.so)
libresiprocate-1.5-dev:
/usr/lib/librutil.so (-> librutil-1.5.so)
/usr/lib/libresip.so (-> libresip-1.5.so)
/usr/lib/libdum.so (-> libdum-1.5.so)
So, for the linking process nothing changes. Developers will continue to
link via -ldum. But due to the soname the linker will search for
libdum-1.5.so on startup. That way it will be possible to have different
(library) packages of resiprocate installed in parallel and also an
defined upgrade path. For the development packages there will be only a
single version installable.
Attached to this mail you'll find a patch for the described behavior.
Are you willing to apply this patch? Maybe in a modified form?
Thanks for your comments!
Gregor
[0] http://git.debian.org/?p=collab-maint/resiprocate.git;a=summary
[1] http://packages.debian.org/de/sid/libpkg-guide
From: Gregor Jasny <gjasny@xxxxxxxxxxxxxx>
Subject: [PATCH] features/versioned-libraries
Add version information to shared libraries.
Signed-off-by: Gregor Jasny <gjasny@xxxxxxxxxxxxxx>
---
build/Makefile.post | 12 +++++++++++-
build/Makefile.tools | 1 +
2 files changed, 12 insertions(+), 1 deletions(-)
diff --git a/build/Makefile.post b/build/Makefile.post
index 5db4ee5..742b650 100644
--- a/build/Makefile.post
+++ b/build/Makefile.post
@@ -120,6 +120,11 @@ DEPENDENCIES = $(patsubst %.cpp,$(OBJ)/%.d,$(patsubst
%.c,$(OBJ)/%.d,$(patsubst
SHARED_LIB = $(patsubst %,$(OBJ)/%.$(SHARED_EXTENSION),$(strip
$(TARGET_LIBRARY)))
STATIC_LIB = $(patsubst %,$(OBJ)/%.a,$(strip $(TARGET_LIBRARY)))
+VERSION_MAJ=1
+VERSION_MIN=5
+
+VERSION_SUFFIX=-$(VERSION_MAJ).$(VERSION_MIN)
+
ifeq ($(BUILD_SHARED_LIBS),yes)
LIBTARGETS += $(SHARED_LIB)
else
@@ -295,7 +300,7 @@ $(OBJ)/$(strip $(TARGET_LIBRARY)).a: $(OBJS) $(OTHERLIBS)
$(OBJ)/$(strip $(TARGET_LIBRARY)).$(SHARED_EXTENSION): $(OBJS) $(OTHERLIBS)
-@ test -f $@ && /bin/rm $@
- $(MKSHLIB) -o $@ $^
+ $(MKSHLIB) $(call MKSONAME,$(strip
$(TARGET_LIBRARY))$(VERSION_SUFFIX).$(SHARED_EXTENSION)) -o $@ $^
-@ mkdir -p $(ROOT)/lib.$(TARGET_NAME)
@ test -h $(ROOT)/lib.$(TARGET_NAME)/$(strip
$(TARGET_LIBRARY)).$(SHARED_EXTENSION) || ln -s $(shell pwd)/$@
$(ROOT)/lib.$(TARGET_NAME)
endif
@@ -314,7 +319,12 @@ INSTALL_INCDIR :=
$(DESTDIR)$(INSTALL_PREFIX)/include/$(subst lib,,$(TARGET_LIBR
install: all
$(INSTALL) -d $(DESTDIR)$(INSTALL_PREFIX)
$(INSTALL) -d $(DESTDIR)$(INSTALL_PREFIX)/lib
+ifeq ($(BUILD_SHARED_LIBS),yes)
+ $(INSTALL) $(OBJ)/$(TARGET_LIBRARY).$(LIBSUFFIX)
$(INSTALL_LIBDIR)/$(TARGET_LIBRARY)$(VERSION_SUFFIX).$(LIBSUFFIX)
+ @ ln -sf $(TARGET_LIBRARY)$(VERSION_SUFFIX).$(LIBSUFFIX)
$(INSTALL_LIBDIR)/$(TARGET_LIBRARY).$(LIBSUFFIX)
+else
$(INSTALL) $(OBJ)/$(TARGET_LIBRARY).$(LIBSUFFIX)
$(INSTALL_LIBDIR)/$(TARGET_LIBRARY).$(LIBSUFFIX)
+endif
$(INSTALL) -d $(INSTALL_INCDIR)
$(INSTALL) -m 644 *.h* $(INSTALL_INCDIR)
ifdef CODE_SUBDIRS
diff --git a/build/Makefile.tools b/build/Makefile.tools
index 0e0ab5e..7aaf4fa 100644
--- a/build/Makefile.tools
+++ b/build/Makefile.tools
@@ -36,6 +36,7 @@ ifeq ($(OSTYPE),Darwin)
MKSHLIB += -dynamiclib -undefined dynamic_lookup
else
MKSHLIB += -shared
+ MKSONAME = -Wl,-soname,$(1)
endif
DEP := $(CXX)
--
tg: (e925bc8..) features/versioned-libraries (depends on: upstream)