summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--Makefile.in4
-rw-r--r--aclocal.m459
-rw-r--r--configure.ac7
-rw-r--r--libhogweed.map.in18
-rw-r--r--libnettle.map.in17
6 files changed, 104 insertions, 3 deletions
diff --git a/.gitignore b/.gitignore
index 2b16f4c8..2227de34 100644
--- a/.gitignore
+++ b/.gitignore
@@ -67,3 +67,5 @@ core
/nettle.tps
/nettle.vr
/nettle.vrs
+/libhogweed.map
+/libnettle.map
diff --git a/Makefile.in b/Makefile.in
index 10a58b0b..ebd2bb1e 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -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_HOGWEED_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 36daec6f..4c0bd410 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1211,3 +1211,62 @@ 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)
+ EXTRA_HOGWEED_LINKER_FLAGS="-Wl,--version-script=\$(srcdir)/libhogweed.map"
+ AC_SUBST(EXTRA_HOGWEED_LINKER_FLAGS)
+ fi
+])
diff --git a/configure.ac b/configure.ac
index bb33962c..33c16e13 100644
--- a/configure.ac
+++ b/configure.ac
@@ -78,10 +78,13 @@ AC_ARG_ENABLE(mini-gmp,
if test "x$enable_mini_gmp" = xyes ; then
NETTLE_USE_MINI_GMP=1
+ HOGWEED_EXTRA_SYMBOLS="mpz_*;gmp_*;mpn_*;"
else
NETTLE_USE_MINI_GMP=0
+ HOGWEED_EXTRA_SYMBOLS=""
fi
AC_SUBST([NETTLE_USE_MINI_GMP])
+AC_SUBST([HOGWEED_EXTRA_SYMBOLS])
LSH_RPATH_INIT([`echo $with_lib_path | sed 's/:/ /g'` \
`echo $exec_prefix | sed "s@^NONE@$prefix/lib@g" | sed "s@^NONE@$ac_default_prefix/lib@g"` \
@@ -114,6 +117,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)
@@ -843,7 +848,7 @@ fi
AC_CONFIG_FILES([config.make config.m4 Makefile bignum.h])
AC_CONFIG_FILES([tools/Makefile testsuite/Makefile examples/Makefile])
-AC_CONFIG_FILES([nettle.pc hogweed.pc])
+AC_CONFIG_FILES([nettle.pc hogweed.pc libnettle.map libhogweed.map])
AC_OUTPUT
diff --git a/libhogweed.map.in b/libhogweed.map.in
new file mode 100644
index 00000000..eea6ed81
--- /dev/null
+++ b/libhogweed.map.in
@@ -0,0 +1,18 @@
+# libhogweed.map -- libhogweed linker version script. -*- ld-script -*-
+
+#
+# The symbol version must be updated on every hogweed
+# library major number change. That is taken care by
+# auto-generating the file.
+
+HOGWEED_@LIBHOGWEED_MAJOR@
+{
+ global:
+ nettle_*;
+ _nettle_*;
+ @HOGWEED_EXTRA_SYMBOLS@
+
+ local:
+ *;
+};
+
diff --git a/libnettle.map.in b/libnettle.map.in
new file mode 100644
index 00000000..02455bc5
--- /dev/null
+++ b/libnettle.map.in
@@ -0,0 +1,17 @@
+# libnettle.map -- libnettle linker version script. -*- ld-script -*-
+
+#
+# The symbol version must be updated on every nettle
+# library major number change. That is taken care by
+# auto-generating the file.
+
+NETTLE_@LIBNETTLE_MAJOR@
+{
+ global:
+ nettle_*;
+ _nettle_*;
+
+ local:
+ *;
+};
+