From: Debian OpenLDAP Maintainers Date: Tue, 17 Nov 2020 01:23:45 +0000 (+0000) Subject: libldap-symbol-versions X-Git-Tag: archive/raspbian/2.4.47+dfsg-3+rpi1+deb10u4^2~25 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=50af275832d37542c200157fcc345202cabdff64;p=openldap.git libldap-symbol-versions Add symbol versioning to the public LDAP libraries. This is required for library transitions, such as the current transition from 2.1 to 2.4, since programs will sometimes have both libraries loaded by different dependency chains during the transition. Not yet contributed upstream. Upstream ITS #5365 filed requesting symbol versioning for libldap and libber. Gbp-Pq: Name libldap-symbol-versions --- diff --git a/build/openldap.m4 b/build/openldap.m4 index a0337548..f0fa9d32 100644 --- a/build/openldap.m4 +++ b/build/openldap.m4 @@ -1142,3 +1142,54 @@ AC_DEFUN([OL_SSL_COMPAT], #endif ], [ol_cv_ssl_crl_compat=yes], [ol_cv_ssl_crl_compat=no])]) ]) + +dnl ==================================================================== +dnl check for symbol versioning support +AC_DEFUN([OL_SYMBOL_VERSIONING], +[AC_CACHE_CHECK([for .symver assembler directive], + [ol_cv_asm_symver_directive],[ +cat > conftest.s <&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then + ol_cv_asm_symver_directive=yes +else + ol_cv_asm_symver_directive=no +fi +rm -f conftest*]) +AC_CACHE_CHECK([for ld --version-script], + [ol_cv_ld_version_script_option],[ +if test $ol_cv_asm_symver_directive = yes; then + cat > conftest.s < conftest.map <&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then + if AC_TRY_COMMAND([${CC-cc} $CFLAGS $LDFLAGS -shared + -o conftest.so conftest.o + -Wl,--version-script,conftest.map + 1>&AS_MESSAGE_LOG_FD]); + then + ol_cv_ld_version_script_option=yes + else + ol_cv_ld_version_script_option=no + fi + else + ol_cv_ld_version_script_option=no + fi +else + ol_cv_ld_version_script_option=no +fi +rm -f conftest*])]) diff --git a/build/top.mk b/build/top.mk index b793f58b..5348b4b6 100644 --- a/build/top.mk +++ b/build/top.mk @@ -104,6 +104,9 @@ LTFLAGS_MOD = $(@PLAT@_LTFLAGS_MOD) # LINK_LIBS referenced in library and module link commands. LINK_LIBS = $(MOD_LIBS) $(@PLAT@_LINK_LIBS) +# option to pass to $(CC) to support library symbol versioning, if any +VERSION_OPTION = @VERSION_OPTION@ + LTSTATIC = @LTSTATIC@ LTLINK = $(LIBTOOL) --mode=link \ @@ -113,7 +116,7 @@ LTCOMPILE_LIB = $(LIBTOOL) $(LTONLY_LIB) --mode=compile \ $(CC) $(LT_CFLAGS) $(LT_CPPFLAGS) $(LIB_DEFS) -c LTLINK_LIB = $(LIBTOOL) $(LTONLY_LIB) --mode=link \ - $(CC) $(LT_CFLAGS) $(LDFLAGS) $(LTFLAGS_LIB) + $(CC) $(LT_CFLAGS) $(LDFLAGS) $(LTFLAGS_LIB) $(VERSION_FLAGS) LTCOMPILE_MOD = $(LIBTOOL) $(LTONLY_MOD) --mode=compile \ $(CC) $(LT_CFLAGS) $(LT_CPPFLAGS) $(MOD_DEFS) -c diff --git a/configure.in b/configure.in index 21341714..30a785bc 100644 --- a/configure.in +++ b/configure.in @@ -1916,6 +1916,13 @@ else fi AC_SUBST(LTSTATIC)dnl +VERSION_OPTION="" +OL_SYMBOL_VERSIONING +if test $ol_cv_ld_version_script_option = yes ; then + VERSION_OPTION="-Wl,--version-script=" +fi +AC_SUBST(VERSION_OPTION) + dnl ---------------------------------------------------------------- if test $ol_enable_wrappers != no ; then AC_CHECK_HEADERS(tcpd.h,[ diff --git a/libraries/liblber/Makefile.in b/libraries/liblber/Makefile.in index cd5ca93e..d60fab33 100644 --- a/libraries/liblber/Makefile.in +++ b/libraries/liblber/Makefile.in @@ -38,6 +38,9 @@ XLIBS = $(LIBRARY) $(LDAP_LIBLUTIL_A) XXLIBS = NT_LINK_LIBS = $(AC_LIBS) UNIX_LINK_LIBS = $(AC_LIBS) +ifneq (,$(VERSION_OPTION)) + VERSION_FLAGS = "$(VERSION_OPTION)$(srcdir)/liblber.map" +endif dtest: $(XLIBS) dtest.o $(LTLINK) -o $@ dtest.o $(LIBS) diff --git a/libraries/liblber/liblber.map b/libraries/liblber/liblber.map new file mode 100644 index 00000000..b54853c0 --- /dev/null +++ b/libraries/liblber/liblber.map @@ -0,0 +1,8 @@ +OPENLDAP_2.4_2 { + global: + ber_*; + der_alloc; + lutil_*; + local: + *; +}; diff --git a/libraries/libldap/Makefile.in b/libraries/libldap/Makefile.in index 80262e1c..dd8cc948 100644 --- a/libraries/libldap/Makefile.in +++ b/libraries/libldap/Makefile.in @@ -52,6 +52,9 @@ XLIBS = $(LIBRARY) $(LDAP_LIBLBER_LA) $(LDAP_LIBLUTIL_A) XXLIBS = $(SECURITY_LIBS) $(LUTIL_LIBS) NT_LINK_LIBS = $(LDAP_LIBLBER_LA) $(AC_LIBS) $(SECURITY_LIBS) UNIX_LINK_LIBS = $(LDAP_LIBLBER_LA) $(AC_LIBS) $(SECURITY_LIBS) +ifneq (,$(VERSION_OPTION)) + VERSION_FLAGS = $(VERSION_OPTION)$(srcdir)/libldap.map +endif apitest: $(XLIBS) apitest.o $(LTLINK) -o $@ apitest.o $(LIBS) diff --git a/libraries/libldap/libldap.map b/libraries/libldap/libldap.map new file mode 100644 index 00000000..605dcffa --- /dev/null +++ b/libraries/libldap/libldap.map @@ -0,0 +1,7 @@ +OPENLDAP_2.4_2 { + global: + ldap_*; + ldif_*; + local: + *; +}; diff --git a/libraries/libldap_r/Makefile.in b/libraries/libldap_r/Makefile.in index 7be45934..b930d48e 100644 --- a/libraries/libldap_r/Makefile.in +++ b/libraries/libldap_r/Makefile.in @@ -61,6 +61,9 @@ XXLIBS = $(SECURITY_LIBS) $(LUTIL_LIBS) XXXLIBS = $(LTHREAD_LIBS) NT_LINK_LIBS = $(LDAP_LIBLBER_LA) $(AC_LIBS) $(SECURITY_LIBS) UNIX_LINK_LIBS = $(LDAP_LIBLBER_LA) $(AC_LIBS) $(SECURITY_LIBS) $(LTHREAD_LIBS) +ifneq (,$(VERSION_OPTION)) + VERSION_FLAGS = "$(VERSION_OPTION)$(XXDIR)/libldap.map" +endif .links : Makefile @for i in $(XXSRCS); do \