From d778af2a3bc0bebdff0ceb31f7948882ea707107 Mon Sep 17 00:00:00 2001 From: Travis Cross Date: Sat, 5 Apr 2014 22:04:31 +0000 Subject: [PATCH] Add soname to chibi shared library Including a soname with a public shared library is a good practice and is required by the policy of many distributions such as Debian. The major version of the soname distinguishes incompatible versions of the shared library. --- .hgignore | 1 + Makefile | 18 +++++++++++++++--- Makefile.libs | 2 ++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/.hgignore b/.hgignore index 33dc000d..cd3c0af6 100644 --- a/.hgignore +++ b/.hgignore @@ -4,6 +4,7 @@ syntax: glob *.s *.o *.so +*.so.* *.pc *.sch *.sps diff --git a/Makefile b/Makefile index 52021680..a793fca7 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,8 @@ .DEFAULT_GOAL := all VERSION ?= $(shell cat VERSION) +SOVERSION ?= $(shell echo "$(VERSION)" | sed "s/^\(\(\.\?[0-9]\+\)*\).*$$/\1/") +SOVERSION_MAJOR ?= $(shell echo "$(SOVERSION)" | sed "s/\..*//") CHIBI_FFI ?= $(CHIBI) -q tools/chibi-ffi CHIBI_FFI_DEPENDENCIES ?= $(CHIBI_DEPENDENCIES) tools/chibi-ffi @@ -98,8 +100,14 @@ EVAL_OBJS = opcodes.o vm.o eval.o simplify.o libchibi-sexp$(SO): $(SEXP_OBJS) $(CC) $(CLIBFLAGS) $(CLINKFLAGS) -o $@ $^ $(XLDFLAGS) -libchibi-scheme$(SO): $(SEXP_OBJS) $(EVAL_OBJS) - $(CC) $(CLIBFLAGS) $(CLINKFLAGS) -o $@ $^ $(XLDFLAGS) +libchibi-scheme$(SO).$(SOVERSION): $(SEXP_OBJS) $(EVAL_OBJS) + $(CC) $(CLIBFLAGS) $(CLINKFLAGS) -Wl,-soname,libchibi-scheme$(SO).$(SOVERSION_MAJOR) -o $@ $^ $(XLDFLAGS) + +libchibi-scheme$(SO).$(SOVERSION_MAJOR): libchibi-scheme$(SO).$(SOVERSION) + $(LN) -sf $< $@ + +libchibi-scheme$(SO): libchibi-scheme$(SO).$(SOVERSION_MAJOR) + $(LN) -sf $< $@ libchibi-scheme.a: $(SEXP_OBJS) $(EVAL_OBJS) $(AR) rcs $@ $^ @@ -317,7 +325,9 @@ install: all $(INSTALL) -m0644 $(INCLUDES) $(DESTDIR)$(INCDIR)/ $(MKDIR) $(DESTDIR)$(LIBDIR) $(MKDIR) $(DESTDIR)$(SOLIBDIR) - $(INSTALL) -m0644 libchibi-scheme$(SO) $(DESTDIR)$(SOLIBDIR)/ + $(INSTALL) -m0644 libchibi-scheme$(SO).$(SOVERSION) $(DESTDIR)$(SOLIBDIR)/ + $(CP) -d libchibi-scheme$(SO).$(SOVERSION_MAJOR) $(DESTDIR)$(SOLIBDIR)/ + $(CP) -d libchibi-scheme$(SO) $(DESTDIR)$(SOLIBDIR)/ -$(INSTALL) -m0644 libchibi-scheme.a $(DESTDIR)$(SOLIBDIR)/ $(MKDIR) $(DESTDIR)$(SOLIBDIR)/pkgconfig $(INSTALL) -m0644 chibi-scheme.pc $(DESTDIR)$(SOLIBDIR)/pkgconfig/ @@ -333,6 +343,8 @@ uninstall: -$(RM) $(DESTDIR)$(BINDIR)/chibi-ffi -$(RM) $(DESTDIR)$(BINDIR)/chibi-doc -$(RM) $(DESTDIR)$(SOLIBDIR)/libchibi-scheme$(SO) + -$(RM) $(DESTDIR)$(SOLIBDIR)/libchibi-scheme$(SO).$(SOVERSION) + -$(RM) $(DESTDIR)$(SOLIBDIR)/libchibi-scheme$(SO).$(SOVERSION_MAJOR) -$(RM) $(DESTDIR)$(LIBDIR)/libchibi-scheme$(SO).a -$(RM) $(DESTDIR)$(SOLIBDIR)/pkgconfig/chibi-scheme.pc -$(CD) $(DESTDIR)$(INCDIR) && $(RM) $(INCLUDES) diff --git a/Makefile.libs b/Makefile.libs index 02599184..ae566a8a 100644 --- a/Makefile.libs +++ b/Makefile.libs @@ -13,6 +13,8 @@ AR ?= ar CD ?= cd RM ?= rm -f LS ?= ls +CP ?= cp +LN ?= ln INSTALL ?= install MKDIR ?= $(INSTALL) -d RMDIR ?= rmdir