< Previous by Date Date Index Next by Date >
  Thread Index Next in Thread >

[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)