[reSIProcate] soname for shared libraries
Byron Campen
bcampen at estacado.net
Wed Sep 9 19:32:19 CDT 2009
I /think/ this is a good idea, although we'd need to do more than
your patch does (for starters, we'd need to change a bunch of stuff in
build/Makefile.pkg to get all the various apps/test programs to
build). I am not sure how much of a shock this would be for people
whose build systems assume unversioned libs. At any rate, I think I
should go through a few releases and see how much our API/ABI tends to
change from release to release.
Best regards,
Byron Campen
> 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 at googlemail.com>
> Subject: [PATCH] features/versioned-libraries
>
> Add version information to shared libraries.
>
> Signed-off-by: Gregor Jasny <gjasny at googlemail.com>
>
> ---
> 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)
> _______________________________________________
> resiprocate-devel mailing list
> resiprocate-devel at resiprocate.org
> https://list.resiprocate.org/mailman/listinfo/resiprocate-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2482 bytes
Desc: not available
URL: <http://list.resiprocate.org/pipermail/resiprocate-devel/attachments/20090909/ea5b8d04/attachment.bin>
More information about the resiprocate-devel
mailing list