--- nsprpub/config/rules.mk +++ nsprpub/config/rules.mk @@ -129,12 +129,35 @@ else ifdef MKSHLIB SHARED_LIBRARY = $(OBJDIR)/lib$(LIBRARY_NAME)$(LIBRARY_VERSION).$(DLL_SUFFIX) +SONAME = $(notdir $(SHARED_LIBRARY)) + +ifdef SO_VERSION +ifneq (,$(findstring $(SONAME),$(MKSHLIB))) +SO_VERSION_MAJOR := $(shell echo $(SO_VERSION) | sed 's/^\([^.]*\)\(\.[^.]*\)\?\(\.[^.]*\)\?/\1/') +SO_VERSION_MINOR := $(shell echo $(SO_VERSION) | sed 's/^\([^.]*\)\(\.[^.]*\)\?\(\.[^.]*\)\?/\2/') +SO_VERSION_MICRO := $(shell echo $(SO_VERSION) | sed 's/^\([^.]*\)\(\.[^.]*\)\?\(\.[^.]*\)\?/\3/') + +SHARED_LIBRARY_LINKS := $(SONAME) +ifdef SO_VERSION_MINOR +SHARED_LIBRARY_LINKS += $(SONAME).$(SO_VERSION_MAJOR) endif +ifdef SO_VERSION_MICRO +SHARED_LIBRARY_LINKS += $(SHARED_LIBRARY).$(SO_VERSION_MAJOR)$(SO_VERSION_MINOR) endif +SONAME := $(SONAME).$(SO_VERSION_MAJOR) +SHARED_LIBRARY := $(SHARED_LIBRARY).$(SO_VERSION) + +MKSHLINKS = (cd $(1) && for link in $(SHARED_LIBRARY_LINKS); do rm -f $$link; ln -s $(notdir $(SHARED_LIBRARY)) $$link; done) endif endif +endif +endif + +endif +endif + ifndef TARGETS ifeq (,$(filter-out WINNT OS2,$(OS_ARCH))) TARGETS = $(LIBRARY) $(SHARED_LIBRARY) $(IMPORT_LIBRARY) @@ -166,7 +189,7 @@ endif ALL_TRASH = $(TARGETS) $(OBJS) $(RES) $(filter-out . .., $(OBJDIR)) LOGS TAGS $(GARBAGE) \ - $(NOSUCHFILE) \ + $(SHARED_LIBRARY_LINKS) $(NOSUCHFILE) \ so_locations ifeq ($(OS_ARCH),OpenVMS) @@ -232,6 +255,7 @@ endif ifdef RELEASE_LIBS $(NSINSTALL) -t -m 0755 $(RELEASE_LIBS) $(DESTDIR)$(libdir)/$(lib_subdir) + $(call MKSHLINKS,$(DESTDIR)$(libdir)/$(lib_subdir)) endif +$(LOOP_OVER_DIRS) @@ -325,6 +349,8 @@ $(IMPLIB) $@ $(MAPFILE) endif +$(SHARED_LIBRARY_LINKS): %: $(SHARED_LIBRARY) + $(SHARED_LIBRARY): $(OBJS) $(RES) $(MAPFILE) @$(MAKE_OBJDIR) rm -f $@ @@ -352,6 +378,7 @@ fi endif # OpenVMS $(MKSHLIB) $(OBJS) $(RES) $(EXTRA_LIBS) + $(call MKSHLINKS,.) endif # OS2 vacpp endif # WINNT endif # AIX 4.1 --- nsprpub/configure.in +++ nsprpub/configure.in @@ -892,7 +892,7 @@ AC_DEFINE(_PR_STAT_HAS_ST_ATIMESPEC) MKSHLIB='$(CC) -o $@ $(DSO_LDOPTS)' DSO_CFLAGS=-fPIC - DSO_LDOPTS='-shared -Wl,-soname,$(@:$(OBJDIR)/%.so=%.so)' + DSO_LDOPTS='-shared -Wl,-soname,$(SONAME)' STRIP="$STRIP -d" case "$target_os" in bsdi4.2* | bsdi4.3* | bsdi5.*) @@ -1042,7 +1042,7 @@ fi MKSHLIB='$(CC) $(DSO_LDOPTS) -o $@' DSO_CFLAGS=-fPIC - DSO_LDOPTS='-shared -Wl,-soname -Wl,$(notdir $@)' + DSO_LDOPTS='-shared -Wl,-soname -Wl,$(SONAME)' MDCPUCFG_H=_freebsd.cfg PR_MD_CSRCS=freebsd.c ;; @@ -1059,7 +1059,7 @@ # workaround this problem. AC_DEFINE(_PR_POLL_WITH_SELECT) AC_DEFINE(_USE_BIG_FDS) - DSO_LDOPTS='-b +h $(notdir $@)' + DSO_LDOPTS='-b +h $(SONAME)' PR_MD_CSRCS=hpux.c if test "$OS_TEST" = "ia64"; then DLL_SUFFIX=so @@ -1304,7 +1304,7 @@ PR_MD_CSRCS=linux.c MKSHLIB='$(CC) $(DSO_LDOPTS) -o $@' DSO_CFLAGS=-fPIC - DSO_LDOPTS='-shared -Wl,-soname -Wl,$(notdir $@)' + DSO_LDOPTS='-shared -Wl,-soname -Wl,$(SONAME)' _OPTIMIZE_FLAGS=-O2 _DEBUG_FLAGS="-g -fno-inline" # most people on linux use gcc/gdb, and that # combo is not yet good at debugging inlined @@ -1561,7 +1561,7 @@ else OBJECT_FMT=ELF DLL_SUFFIX=so - DSO_LDOPTS='-shared -Wl,-soname,$(notdir $@)' + DSO_LDOPTS='-shared -Wl,-soname,$(SONAME)' fi fi @@ -1607,7 +1607,7 @@ AC_DEFINE(HAVE_POINTER_LOCALTIME_R) MDCPUCFG_H=_nto.cfg PR_MD_CSRCS=nto.c - MKSHLIB='$(CC) $(DSO_LDOPTS) -Wl,-soname -Wl,$(notdir $@) -o $@' + MKSHLIB='$(CC) $(DSO_LDOPTS) -Wl,-soname -Wl,$(SONAME) -o $@' DSO_CFLAGS=-fPIC DSO_LDOPTS=-shared OS_LIBS="$OS_LIBS -lsocket" @@ -1685,7 +1685,7 @@ if echo $OS_RELEASE | grep -c V4.0 >/dev/null; then AC_DEFINE(OSF1V4_MAP_PRIVATE_BUG) fi - DSO_LDOPTS='-shared -all -expect_unresolved "*" -soname $(notdir $@)' + DSO_LDOPTS='-shared -all -expect_unresolved "*" -soname $(SONAME)' MDCPUCFG_H=_osf1.cfg PR_MD_CSRCS=osf1.c ;; @@ -1751,7 +1751,7 @@ _OPTIMIZE_FLAGS='-O -F Olimit,4000' fi - DSO_LDOPTS='-G -z defs -h $(@:$(OBJDIR)/%.so=%.so)' + DSO_LDOPTS='-G -z defs -h $(SONAME)' if test "$OS_RELEASE" = "5.43"; then AC_DEFINE(IP_MULTICAST) @@ -1807,10 +1807,10 @@ if `$CC -print-prog-name=ld` -v 2>&1 | grep -c GNU >/dev/null; then GCC_USE_GNU_LD=1 fi - DSO_LDOPTS='-shared -Wl,-h,$(notdir $@),-z,combreloc,-z,defs,-z,ignore' + DSO_LDOPTS='-shared -Wl,-h,$(SONAME),-z,combreloc,-z,defs,-z,ignore' else DSO_CFLAGS=-KPIC - DSO_LDOPTS='-G -h $(notdir $@) -z combreloc -z defs -z ignore' + DSO_LDOPTS='-G -h $(SONAME) -z combreloc -z defs -z ignore' fi if test -n "$GNU_CC"; then CFLAGS="$CFLAGS -Wall" --- nsprpub/lib/ds/Makefile.in +++ nsprpub/lib/ds/Makefile.in @@ -127,6 +127,7 @@ LIBRARY_NAME = plds LIBRARY_VERSION = $(MOD_MAJOR_VERSION) +SO_VERSION = 0d RELEASE_HEADERS = $(HEADERS) RELEASE_HEADERS_DEST = $(RELEASE_INCLUDE_DIR) @@ -185,12 +186,14 @@ export:: $(TARGETS) $(INSTALL) -m 444 $(HEADERS) $(dist_includedir) $(INSTALL) -m 444 $(TARGETS) $(dist_libdir) + $(call MKSHLINKS,$(dist_libdir)) ifdef SHARED_LIBRARY ifeq ($(OS_ARCH),HP-UX) $(INSTALL) -m 755 $(SHARED_LIBRARY) $(dist_libdir) $(INSTALL) -m 755 $(SHARED_LIBRARY) $(dist_bindir) else $(INSTALL) -m 444 $(SHARED_LIBRARY) $(dist_bindir) + $(call MKSHLINKS,$(dist_bindir)) endif endif ifeq ($(MOZ_BITS),16) --- nsprpub/lib/libc/src/Makefile.in +++ nsprpub/lib/libc/src/Makefile.in @@ -69,6 +69,7 @@ LIBRARY_NAME = plc LIBRARY_VERSION = $(MOD_MAJOR_VERSION) +SO_VERSION = 0d RELEASE_LIBS = $(TARGETS) @@ -187,12 +188,14 @@ export:: $(TARGETS) $(INSTALL) -m 444 $(TARGETS) $(dist_libdir) + $(call MKSHLINKS,$(dist_libdir)) ifdef SHARED_LIBRARY ifeq ($(OS_ARCH),HP-UX) $(INSTALL) -m 755 $(SHARED_LIBRARY) $(dist_libdir) $(INSTALL) -m 755 $(SHARED_LIBRARY) $(dist_bindir) else $(INSTALL) -m 444 $(SHARED_LIBRARY) $(dist_bindir) + $(call MKSHLINKS,$(dist_bindir)) endif endif ifeq ($(MOZ_BITS),16) --- nsprpub/pr/src/Makefile.in +++ sprpub/pr/src/Makefile.in @@ -332,6 +332,7 @@ LIBRARY_NAME = nspr LIBRARY_VERSION = $(MOD_MAJOR_VERSION) +SO_VERSION = 0d RELEASE_LIBS = $(TARGETS) @@ -402,12 +403,14 @@ export:: $(TARGETS) $(INSTALL) -m 444 $(TARGETS) $(dist_libdir) + $(call MKSHLINKS,$(dist_libdir)) ifdef SHARED_LIBRARY ifeq ($(OS_ARCH),HP-UX) $(INSTALL) -m 755 $(SHARED_LIBRARY) $(dist_libdir) $(INSTALL) -m 755 $(SHARED_LIBRARY) $(dist_bindir) else $(INSTALL) -m 444 $(SHARED_LIBRARY) $(dist_bindir) + $(call MKSHLINKS,$(dist_bindir)) endif endif ifeq ($(MOZ_BITS),16)