The attached patch will add symbol versioning in nettle. That would
mean that software linked against nettle 3.x will be able to
interoperate with libraries that are linked on a previous version of
nettle (and vice versa).

You could check the new symbol names with "readelf -Ws libnettle.so"

regards,
Nikos
From 45adca1f634b9c3b85784b56411eeecab6113be6 Mon Sep 17 00:00:00 2001
From: Nikos Mavrogiannopoulos <[email protected]>
Date: Mon, 24 Nov 2014 14:02:25 +0100
Subject: [PATCH] Added symbol versioning

Signed-off-by: Nikos Mavrogiannopoulos <[email protected]>
---
 Makefile.in   |  6 +++---
 aclocal.m4    | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 configure.ac  |  2 ++
 libnettle.map | 12 ++++++++++++
 5 files changed, 75 insertions(+), 3 deletions(-)
 create mode 100644 libnettle.map

diff --git a/Makefile.in b/Makefile.in
index 10a58b0..afd011f 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -218,7 +218,7 @@ DISTFILES = $(SOURCES) $(HEADERS) getopt.h getopt_int.h \
 	cast128_sboxes.h desinfo.h desCode.h \
 	nettle-internal.h nettle-write.h \
 	gmp-glue.h ecc-internal.h \
-	mini-gmp.h mini-gmp.c asm.m4 \
+	mini-gmp.h mini-gmp.c asm.m4 ld-version-script.m4 \
 	nettle.texinfo nettle.info nettle.html nettle.pdf sha-example.c
 
 # Rules building static libraries
@@ -244,7 +244,7 @@ libhogweed.a: $(hogweed_OBJS)
 
 # Rules building shared libraries.
 $(LIBNETTLE_FORLINK): $(nettle_OBJS)
-	$(LIBNETTLE_LINK) $(nettle_OBJS) -o $@ $(LIBNETTLE_LIBS)
+	$(LIBNETTLE_LINK) $(nettle_OBJS) @EXTRA_LINKER_FLAGS@ -o $@ $(LIBNETTLE_LIBS)
 	-mkdir .lib 2>/dev/null
 	(cd .lib \
           && rm -f $(LIBNETTLE_FORLINK) \
@@ -255,7 +255,7 @@ $(LIBNETTLE_FORLINK): $(nettle_OBJS)
 	echo nettle > libnettle.stamp
 
 $(LIBHOGWEED_FORLINK): $(hogweed_OBJS) $(LIBNETTLE_FORLINK)
-	$(LIBHOGWEED_LINK) $(hogweed_OBJS) -o $@ $(LIBHOGWEED_LIBS)
+	$(LIBHOGWEED_LINK) $(hogweed_OBJS) @EXTRA_LINKER_FLAGS@ -o $@ $(LIBHOGWEED_LIBS)
 	-mkdir .lib 2>/dev/null
 	(cd .lib \
           && rm -f $(LIBHOGWEED_FORLINK) \
diff --git a/aclocal.m4 b/aclocal.m4
index 36daec6..4ac3ba5 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1211,3 +1211,60 @@ ac_cv_type_int_fast32_t="$ac_cv_type_int_fast32_t"
 ac_cv_type_intmax_t="$ac_cv_type_intmax_t"
 ])
 ])
+
+# ld-version-script.m4 serial 3
+dnl Copyright (C) 2008-2014 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Simon Josefsson
+
+# FIXME: The test below returns a false positive for mingw
+# cross-compiles, 'local:' statements does not reduce number of
+# exported symbols in a DLL.  Use --disable-ld-version-script to work
+# around the problem.
+
+# gl_LD_VERSION_SCRIPT
+# --------------------
+# Check if LD supports linker scripts, and define automake conditional
+# HAVE_LD_VERSION_SCRIPT if so.
+AC_DEFUN([LD_VERSION_SCRIPT],
+[
+  AC_ARG_ENABLE([ld-version-script],
+    AS_HELP_STRING([--enable-ld-version-script],
+      [enable linker version script (default is enabled when possible)]),
+      [have_ld_version_script=$enableval], [])
+  if test -z "$have_ld_version_script"; then
+    AC_MSG_CHECKING([if LD -Wl,--version-script works])
+    save_LDFLAGS="$LDFLAGS"
+    LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map"
+    cat > conftest.map <<EOF
+foo
+EOF
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
+                   [accepts_syntax_errors=yes], [accepts_syntax_errors=no])
+    if test "$accepts_syntax_errors" = no; then
+      cat > conftest.map <<EOF
+VERS_1 {
+        global: sym;
+};
+
+VERS_2 {
+        global: sym;
+} VERS_1;
+EOF
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
+                     [have_ld_version_script=yes], [have_ld_version_script=no])
+    else
+      have_ld_version_script=no
+    fi
+    rm -f conftest.map
+    LDFLAGS="$save_LDFLAGS"
+    AC_MSG_RESULT($have_ld_version_script)
+  fi
+  if test "$have_ld_version_script" = "yes";then
+	EXTRA_LINKER_FLAGS="-Wl,--version-script=\$(srcdir)/libnettle.map"
+	AC_SUBST(EXTRA_LINKER_FLAGS)
+  fi
+])
diff --git a/configure.ac b/configure.ac
index bb33962..46fa312 100644
--- a/configure.ac
+++ b/configure.ac
@@ -114,6 +114,8 @@ AC_TRY_COMPILE([],[return 0;],[IF_CXX=''], [IF_CXX='#'])
 AC_SUBST([IF_CXX])
 AC_LANG_POP
 
+LD_VERSION_SCRIPT
+
 AC_PROG_MAKE_SET
 AC_PROG_RANLIB
 AC_CHECK_TOOL(NM, nm, strings)
diff --git a/libnettle.map b/libnettle.map
new file mode 100644
index 0000000..c1c7394
--- /dev/null
+++ b/libnettle.map
@@ -0,0 +1,12 @@
+# libnettle.map -- libnettle linker version script.           -*- ld-script -*-
+
+NETTLE_3
+{
+  global:
+    nettle_*;
+    _nettle_*;
+
+  local:
+    *;
+};
+
-- 
1.9.3

_______________________________________________
nettle-bugs mailing list
[email protected]
http://lists.lysator.liu.se/mailman/listinfo/nettle-bugs

Reply via email to