Browse Source

nptl: proper soname handling

Since sublevel releases are not ABI compatible we need to adjust
the soname to include the sublevel version.

This makes it possible to install ABI incompatible versions of the
library side by side so clean upgrades are possible.

Signed-off-by: Natanael Copa <natanael.copa@gmail.com>
Signed-off-by: Austin Foxley <austinf@cetoncorp.com>
Natanael Copa 14 years ago
parent
commit
71239593ef

+ 5 - 5
Makefile.in

@@ -310,14 +310,14 @@ install_dev: install_headers install_runtime | $(PREFIX)$(DEVEL_PREFIX)$(MULTILI
 ifeq ($(HAVE_SHARED),y)
 	for i in `cd $(top_builddir) && find lib/ -type l -name 'lib[a-zA-Z]*.so' | \
 	$(SED) -e 's/lib\///'` ; do \
-		$(LN) -sf $(RUNTIME_PREFIX_LIB_FROM_DEVEL_PREFIX_LIB)$$i.$(MAJOR_VERSION) \
+		$(LN) -sf $(RUNTIME_PREFIX_LIB_FROM_DEVEL_PREFIX_LIB)$$i.$(ABI_VERSION) \
 		$(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/$$i; \
 	done
 ifeq ($(HARDWIRED_ABSPATH),y)
-	if [ -f $(top_builddir)lib/libc.so -a -f $(PREFIX)$(RUNTIME_PREFIX)$(MULTILIB_DIR)/$(SHARED_MAJORNAME) ] ; then \
+	if [ -f $(top_builddir)lib/libc.so -a -f $(PREFIX)$(RUNTIME_PREFIX)$(MULTILIB_DIR)/$(SHARED_LIBNAME) ] ; then \
 		$(RM) $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/libc.so; \
 		$(SED) -e 's:$(NONSHARED_LIBNAME):$(DEVEL_PREFIX)$(MULTILIB_DIR)/$(NONSHARED_LIBNAME):' \
-		    -e 's:$(SHARED_MAJORNAME):$(RUNTIME_PREFIX)$(MULTILIB_DIR)/$(SHARED_MAJORNAME):' \
+		    -e 's:$(SHARED_LIBNAME):$(RUNTIME_PREFIX)$(MULTILIB_DIR)/$(SHARED_LIBNAME):' \
 		    -e 's:$(UCLIBC_LDSO):$(RUNTIME_PREFIX)$(MULTILIB_DIR)/$(UCLIBC_LDSO):' \
 		    $(top_builddir)lib/libc.so > $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/libc.so; \
 	fi
@@ -327,10 +327,10 @@ endif
 ifeq ($(UCLIBC_HAS_THREADS),y)
 ifneq ($(LINUXTHREADS_OLD),y)
 ifeq ($(HARDWIRED_ABSPATH),y)
-	if [ -f $(top_builddir)lib/libpthread.so -a -f $(PREFIX)$(RUNTIME_PREFIX)$(MULTILIB_DIR)/libpthread.so.$(MAJOR_VERSION) ] ; then \
+	if [ -f $(top_builddir)lib/libpthread.so -a -f $(PREFIX)$(RUNTIME_PREFIX)$(MULTILIB_DIR)/libpthread.so.$(ABI_VERSION) ] ; then \
 		$(RM) $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/libpthread.so; \
 		cp $(top_srcdir)extra/scripts/format.lds $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/libpthread.so; \
-		echo "GROUP ( $(RUNTIME_PREFIX)$(MULTILIB_DIR)/libpthread.so.$(MAJOR_VERSION) $(DEVEL_PREFIX)$(MULTILIB_DIR)/libpthread_nonshared.a )" \
+		echo "GROUP ( $(RUNTIME_PREFIX)$(MULTILIB_DIR)/libpthread.so.$(ABI_VERSION) $(DEVEL_PREFIX)$(MULTILIB_DIR)/libpthread_nonshared.a )" \
 			>> $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/libpthread.so; \
 	fi
 else

+ 2 - 2
Makerules

@@ -336,10 +336,10 @@ $(interp): $(top_builddir)lib/interp.c
 	$(Q)$(STRIPTOOL) -x -R .note -R .comment $@
 
 $(ldso):
-	@cd $(top_builddir); $(MAKE) lib/$(patsubst %.$(MAJOR_VERSION),%,$(notdir $@))
+	@cd $(top_builddir); $(MAKE) lib/$(patsubst %.$(ABI_VERSION),%,$(notdir $@))
 
 $(libc):
-	@cd $(top_builddir); $(MAKE) lib/$(patsubst %.$(MAJOR_VERSION),%,$(notdir $@))
+	@cd $(top_builddir); $(MAKE) lib/$(patsubst %.$(ABI_VERSION),%,$(notdir $@))
 
 CRT := crt1
 

+ 10 - 6
Rules.mak

@@ -108,15 +108,19 @@ MINOR_VERSION := 9
 SUBLEVEL      := 32
 EXTRAVERSION  :=-git
 VERSION       := $(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL)
+# no abi compat between sublevel releases yet, so we use full version
+# for soname
+ABI_VERSION   := $(VERSION)
 ifneq ($(EXTRAVERSION),)
 VERSION       := $(VERSION)$(EXTRAVERSION)
 endif
 # Ensure consistent sort order, 'gcc -print-search-dirs' behavior, etc.
 LC_ALL := C
-export MAJOR_VERSION MINOR_VERSION SUBLEVEL VERSION LC_ALL
+export MAJOR_VERSION MINOR_VERSION SUBLEVEL VERSION ABI_VERSION LC_ALL
 
 LIBC := libc
-SHARED_MAJORNAME := $(LIBC).so.$(MAJOR_VERSION)
+SHARED_LIBNAME := $(LIBC).so.$(ABI_VERSION)
+
 ifneq ($(findstring  $(TARGET_ARCH) , hppa64 ia64 mips64 powerpc64 s390x sparc64 x86_64 ),)
 UCLIBC_LDSO_NAME := ld64-uClibc
 ARCH_NATIVE_BIT := 64
@@ -124,10 +128,10 @@ else
 UCLIBC_LDSO_NAME := ld-uClibc
 ARCH_NATIVE_BIT := 32
 endif
-UCLIBC_LDSO := $(UCLIBC_LDSO_NAME).so.$(MAJOR_VERSION)
+UCLIBC_LDSO := $(UCLIBC_LDSO_NAME).so.$(ABI_VERSION)
 NONSHARED_LIBNAME := uclibc_nonshared.a
-libc := $(top_builddir)lib/$(SHARED_MAJORNAME)
-libc.depend := $(top_builddir)lib/$(SHARED_MAJORNAME:.$(MAJOR_VERSION)=)
+libc := $(top_builddir)lib/$(SHARED_LIBNAME)
+libc.depend := $(top_builddir)lib/$(SHARED_LIBNAME:.$(ABI_VERSION)=)
 libdl.depend := $(top_builddir)lib/libdl.so
 libpthread.depend := $(top_builddir)lib/libpthread.so
 interp := $(top_builddir)lib/interp.os
@@ -136,7 +140,7 @@ headers_dep := $(top_builddir)include/bits/sysnum.h
 sub_headers := $(headers_dep)
 
 #LIBS :=$(interp) -L$(top_builddir)lib -lc
-LIBS := $(interp) -L$(top_builddir)lib $(libc:.$(MAJOR_VERSION)=)
+LIBS := $(interp) -L$(top_builddir)lib $(libc:.$(ABI_VERSION)=)
 
 # Make sure DESTDIR and PREFIX can be used to install
 # PREFIX is a uClibcism while DESTDIR is a common GNUism

+ 3 - 3
ldso/ldso/Makefile.in

@@ -62,9 +62,9 @@ ldso-y := $($(UCLIBC_LDSO_NAME)_OBJS:.o=.oS)
 lib-so-y += $(ldso)
 objclean-y += CLEAN_ldso/ldso
 
-$(ldso): $(ldso:.$(MAJOR_VERSION)=)
-$(ldso:.$(MAJOR_VERSION)=): $($(UCLIBC_LDSO_NAME)_OUT)/$(UCLIBC_LDSO_NAME)_so.a
-	$(call link.so,$(ldso_FULL_NAME),$(MAJOR_VERSION))
+$(ldso): $(ldso:.$(ABI_VERSION)=)
+$(ldso:.$(ABI_VERSION)=): $($(UCLIBC_LDSO_NAME)_OUT)/$(UCLIBC_LDSO_NAME)_so.a
+	$(call link.so,$(ldso_FULL_NAME),$(ABI_VERSION))
 
 $($(UCLIBC_LDSO_NAME)_OUT)/$(UCLIBC_LDSO_NAME)_so.a: $(ldso-y)
 	$(Q)$(RM) $@

+ 1 - 1
ldso/libdl/Makefile.in

@@ -44,7 +44,7 @@ lib-so-y += $(top_builddir)lib/libdl.so
 objclean-y += CLEAN_ldso/libdl
 
 $(top_builddir)lib/libdl.so: $(libdl_OUT)/libdl_so.a $(libc.depend)
-	$(call link.so,$(libdl_FULL_NAME),$(MAJOR_VERSION))
+	$(call link.so,$(libdl_FULL_NAME),$(ABI_VERSION))
 
 $(libdl_OUT)/libdl_so.a: $(libdl-so-y)
 	$(Q)$(RM) $@

+ 5 - 5
libc/Makefile.in

@@ -21,7 +21,7 @@ CFLAGS += -D__USE_STDIO_FUTEXES__
 endif
 LIBS-libc.so := $(interp) $(ldso) $(top_builddir)lib/$(NONSHARED_LIBNAME)
 
-# we have SHARED_MAJORNAME=libc.so.$(MAJOR_VERSION) defined in Rules.mak
+# we have SHARED_LIBNAME=libc.so.$(ABI_VERSION) defined in Rules.mak
 libc_FULL_NAME := libuClibc-$(VERSION).so
 
 # this comes first, so duplicate removal works correctly
@@ -60,18 +60,18 @@ OUTPUT_FORMAT = $(CC) $(CFLAGS) -Wl,--verbose 2>&1 | $(SED) -n '/OUTPUT_FORMAT/,
 
 ifeq ($(DOMULTI),n)
 $(libc.depend): $(libc_OUT)/libc_so.a $(LIBS-libc.so)
-	$(call link.so,$(libc_FULL_NAME),$(MAJOR_VERSION))
+	$(call link.so,$(libc_FULL_NAME),$(ABI_VERSION))
 else
 $(libc.depend): $(libc_OUT)/libc.oS $(libc-nomulti-y:.o=.oS) | $(LIBS-libc.so)
-	$(call linkm.so,$(libc_FULL_NAME),$(MAJOR_VERSION))
+	$(call linkm.so,$(libc_FULL_NAME),$(ABI_VERSION))
 endif
 	$(Q)$(RM) $@
 	$(Q)cp $(top_srcdir)extra/scripts/format.lds $@
 	$(Q)$(OUTPUT_FORMAT) >> $@
 ifeq ($(COMPAT_ATEXIT),y)
-	$(Q)echo "GROUP ( $(NONSHARED_LIBNAME) $(SHARED_MAJORNAME) $(ASNEEDED) )" >> $@
+	$(Q)echo "GROUP ( $(NONSHARED_LIBNAME) $(SHARED_LIBNAME) $(ASNEEDED) )" >> $@
 else
-	$(Q)echo "GROUP ( $(SHARED_MAJORNAME) $(NONSHARED_LIBNAME) $(ASNEEDED) )" >> $@
+	$(Q)echo "GROUP ( $(SHARED_LIBNAME) $(NONSHARED_LIBNAME) $(ASNEEDED) )" >> $@
 endif
 
 $(libc_OUT)/libc_so.a: $(libc-so-y) | $(top_builddir)lib/libc.a $(top_builddir)lib/$(NONSHARED_LIBNAME)

+ 2 - 2
libcrypt/Makefile.in

@@ -42,10 +42,10 @@ $(top_builddir)lib/libcrypt.so: $(top_builddir)lib/libcrypt.a $(libc.depend)
 else
 $(top_builddir)lib/libcrypt.so: $(libcrypt_OUT)/libcrypt_so.a $(libc.depend)
 endif
-	$(call link.so,$(libcrypt_FULL_NAME),$(MAJOR_VERSION))
+	$(call link.so,$(libcrypt_FULL_NAME),$(ABI_VERSION))
 else
 $(top_builddir)lib/libcrypt.so: $(libcrypt_OUT)/libcrypt.oS | $(libc.depend)
-	$(call linkm.so,$(libcrypt_FULL_NAME),$(MAJOR_VERSION))
+	$(call linkm.so,$(libcrypt_FULL_NAME),$(ABI_VERSION))
 endif
 
 $(libcrypt_OUT)/libcrypt_so.a: $(libcrypt-so-y)

+ 2 - 2
libintl/Makefile.in

@@ -47,10 +47,10 @@ $(top_builddir)lib/libintl.so: $(top_builddir)lib/libintl.a $(libc)
 else
 $(top_builddir)lib/libintl.so: $(libintl_OUT)/libintl_so.a $(libc)
 endif
-	$(call link.so,$(libintl_FULL_NAME),$(MAJOR_VERSION))
+	$(call link.so,$(libintl_FULL_NAME),$(ABI_VERSION))
 else
 $(top_builddir)lib/libintl.so: $(libintl_OUT)/libintl.oS | $(libc)
-	$(call linkm.so,$(libintl_FULL_NAME),$(MAJOR_VERSION))
+	$(call linkm.so,$(libintl_FULL_NAME),$(ABI_VERSION))
 endif
 
 $(libintl_OUT)/libintl_so.a: $(libintl-so-y)

+ 2 - 2
libm/Makefile.in

@@ -278,10 +278,10 @@ $(top_builddir)lib/libm.so: $(top_builddir)lib/libm.a $(libc.depend)
 else
 $(top_builddir)lib/libm.so: $(libm_OUT)/libm_so.a $(libc.depend)
 endif
-	$(call link.so,$(libm_FULL_NAME),$(MAJOR_VERSION))
+	$(call link.so,$(libm_FULL_NAME),$(ABI_VERSION))
 else
 $(top_builddir)lib/libm.so: $(libm_OUT)/libm.oS | $(libc.depend)
-	$(call linkm.so,$(libm_FULL_NAME),$(MAJOR_VERSION))
+	$(call linkm.so,$(libm_FULL_NAME),$(ABI_VERSION))
 endif
 
 $(libm_OUT)/libm_so.a: $(libm-so-y)

+ 1 - 1
libnsl/Makefile.in

@@ -37,7 +37,7 @@ $(top_builddir)lib/libnsl.so: $(top_builddir)lib/libnsl.a $(libc.depend)
 else
 $(top_builddir)lib/libnsl.so: $(libnsl_OUT)/libnsl_so.a $(libc.depend)
 endif
-	$(call link.so,$(libnsl_FULL_NAME),$(MAJOR_VERSION))
+	$(call link.so,$(libnsl_FULL_NAME),$(ABI_VERSION))
 
 $(libnsl_OUT)/libnsl_so.a: $(libnsl-so-y)
 	$(Q)$(RM) $@

+ 2 - 2
libpthread/linuxthreads.old/Makefile.in

@@ -76,10 +76,10 @@ lib-so-$(UCLIBC_HAS_THREADS) += $(top_builddir)lib/libpthread.so
 
 #ifeq ($(DOMULTI),n)
 $(top_builddir)lib/libpthread.so: $(libpthread_OUT)/libpthread_so.a $(libc.depend)
-	$(call link.so,$(libpthread_FULL_NAME),$(MAJOR_VERSION))
+	$(call link.so,$(libpthread_FULL_NAME),$(ABI_VERSION))
 #else
 #$(top_builddir)lib/libpthread.so: $(libpthread_OUT)/libpthread.oS | $(libc.depend)
-#	$(call linkm.so,$(libpthread_FULL_NAME),$(MAJOR_VERSION))
+#	$(call linkm.so,$(libpthread_FULL_NAME),$(ABI_VERSION))
 #endif
 
 ifeq ($(PTHREADS_DEBUG_SUPPORT),y)

+ 1 - 1
libpthread/linuxthreads.old_db/Makefile.in

@@ -8,7 +8,7 @@
 subdirs += libpthread/linuxthreads.old_db
 
 # Get the thread include dependencies and shared object name
-CFLAGS-linuxthreads.old_db := -DNOT_IN_libc -DLIBPTHREAD_SO="\"libpthread.so.$(MAJOR_VERSION)\""
+CFLAGS-linuxthreads.old_db := -DNOT_IN_libc -DLIBPTHREAD_SO="\"libpthread.so.$(ABI_VERSION)\""
 
 LDFLAGS-libthread_db.so := $(LDFLAGS_NOSTRIP) $(if $(call check_ld,--warn-unresolved-symbols),-Wl$(comma)--warn-unresolved-symbols)
 ifeq ($(DOSTRIP),y)

+ 3 - 3
libpthread/linuxthreads/Makefile.in

@@ -88,14 +88,14 @@ lib-so-$(UCLIBC_HAS_THREADS) += $(top_builddir)lib/libpthread.so
 
 #ifeq ($(DOMULTI),n)
 $(top_builddir)lib/libpthread.so: $(libpthread_OUT)/libpthread_so.a $(libc.depend) $(top_builddir)lib/libpthread_nonshared.a
-	$(call link.so,$(libpthread_FULL_NAME),$(MAJOR_VERSION))
+	$(call link.so,$(libpthread_FULL_NAME),$(ABI_VERSION))
 #else
 #$(top_builddir)lib/libpthread.so: $(libpthread_OUT)/libpthread.oS | $(libc.depend) $(top_builddir)lib/libpthread_nonshared.a
-#	$(call linkm.so,$(libpthread_FULL_NAME),$(MAJOR_VERSION))
+#	$(call linkm.so,$(libpthread_FULL_NAME),$(ABI_VERSION))
 #endif
 	$(Q)$(RM) $@
 	$(Q)cp $(top_srcdir)extra/scripts/format.lds $@
-	$(Q)echo "GROUP ( $(notdir $@).$(MAJOR_VERSION) libpthread_nonshared.a )" >> $@
+	$(Q)echo "GROUP ( $(notdir $@).$(ABI_VERSION) libpthread_nonshared.a )" >> $@
 
 ifeq ($(PTHREADS_DEBUG_SUPPORT),y)
 $(libpthread_OUT)/libpthread_so.a: STRIP_FLAGS:=$(STRIP_FLAGS:-x=-X --strip-debug)

+ 1 - 1
libpthread/linuxthreads_db/Makefile.in

@@ -8,7 +8,7 @@
 subdirs += libpthread/linuxthreads_db
 
 # Get the thread include dependencies and shared object name
-CFLAGS-linuxthreads_db := -DNOT_IN_libc -DLIBPTHREAD_SO="\"libpthread.so.$(MAJOR_VERSION)\""
+CFLAGS-linuxthreads_db := -DNOT_IN_libc -DLIBPTHREAD_SO="\"libpthread.so.$(ABI_VERSION)\""
 
 LDFLAGS-libthread_db.so := $(LDFLAGS_NOSTRIP) $(if $(call check_ld,--warn-unresolved-symbols),-Wl$(comma)--warn-unresolved-symbols)
 ifeq ($(DOSTRIP),y)

+ 2 - 2
libpthread/nptl/Makefile.in

@@ -274,10 +274,10 @@ lib-a-$(UCLIBC_HAS_THREADS) += $(top_builddir)lib/libpthread.a
 lib-so-$(UCLIBC_HAS_THREADS) += $(top_builddir)lib/libpthread.so
 
 $(top_builddir)lib/libpthread.so: $(PTHREAD_OUT)/libpthread_so.a $(libc.depend) $(libdl.depend) $(top_builddir)lib/libpthread_nonshared.a
-	$(call link.so,$(libpthread_FULL_NAME),$(MAJOR_VERSION))
+	$(call link.so,$(libpthread_FULL_NAME),$(ABI_VERSION))
 	$(Q)$(RM) $@
 	$(Q)cp $(top_srcdir)extra/scripts/format.lds $@
-	$(Q)echo "GROUP ( $(notdir $@).$(MAJOR_VERSION) libpthread_nonshared.a )" >> $@
+	$(Q)echo "GROUP ( $(notdir $@).$(ABI_VERSION) libpthread_nonshared.a )" >> $@
 
 $(PTHREAD_OUT)/libpthread_so.a: $(libpthread-so-y)
 	$(Q)$(RM) $@

+ 1 - 1
libpthread/nptl_db/Makefile.in

@@ -8,7 +8,7 @@
 subdirs += libpthread/nptl/nptl_db
 
 # Get the thread include dependencies and shared object name
-CFLAGS-nptl_db := -DLIBPTHREAD_SO="\"libpthread.so.$(MAJOR_VERSION)\""
+CFLAGS-nptl_db := -DLIBPTHREAD_SO="\"libpthread.so.$(ABI_VERSION)\""
 CFLAGS-nptl_db += -I$(top_srcdir)libpthread/nptl -D_GNU_SOURCE
 CFLAGS-nptl_db += -DIS_IN_libthread_db=1 -std=gnu99 -I$(top_srcdir)ldso/include
 

+ 1 - 1
libresolv/Makefile.in

@@ -37,7 +37,7 @@ $(top_builddir)lib/libresolv.so: $(top_builddir)lib/libresolv.a $(libc.depend)
 else
 $(top_builddir)lib/libresolv.so: $(libresolv_OUT)/libresolv_so.a $(libc.depend)
 endif
-	$(call link.so,$(libresolv_FULL_NAME),$(MAJOR_VERSION))
+	$(call link.so,$(libresolv_FULL_NAME),$(ABI_VERSION))
 
 $(libresolv_OUT)/libresolv_so.a: $(libresolv-so-y)
 	$(Q)$(RM) $@

+ 1 - 1
librt/Makefile.in

@@ -57,7 +57,7 @@ $(top_builddir)lib/librt.so: $(top_builddir)lib/librt.a $(libc.depend)
 else
 $(top_builddir)lib/librt.so: $(librt_OUT)/librt_so.a $(libc.depend) $(libpthread.depend) $(libdl.depend)
 endif
-	$(call link.so,$(librt_FULL_NAME),$(MAJOR_VERSION))
+	$(call link.so,$(librt_FULL_NAME),$(ABI_VERSION))
 
 $(librt_OUT)/librt_so.a: $(librt-so-y)
 	$(Q)$(RM) $@

+ 2 - 2
libutil/Makefile.in

@@ -45,10 +45,10 @@ $(top_builddir)lib/libutil.so: $(top_builddir)lib/libutil.a $(libc.depend)
 else
 $(top_builddir)lib/libutil.so: $(libutil_OUT)/libutil_so.a $(libc.depend)
 endif
-	$(call link.so,$(libutil_FULL_NAME),$(MAJOR_VERSION))
+	$(call link.so,$(libutil_FULL_NAME),$(ABI_VERSION))
 else
 $(top_builddir)lib/libutil.so: $(libutil_OUT)/libutil.oS | $(libc.depend)
-	$(call linkm.so,$(libutil_FULL_NAME),$(MAJOR_VERSION))
+	$(call linkm.so,$(libutil_FULL_NAME),$(ABI_VERSION))
 endif
 
 $(libutil_OUT)/libutil_so.a: $(libutil-so-y)