]> git.ipfire.org Git - location/libloc.git/commitdiff
Detect if linker supports --version-script=
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 12 Jan 2019 16:18:26 +0000 (16:18 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 17 Oct 2019 13:25:37 +0000 (14:25 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
Makefile.am
configure.ac
m4/ld-version-script.m4 [new file with mode: 0644]

index be8d94c08bf2172444aba54be90c83a58d47c9b5..489458d9a6361b32d83daaa171e1138eed94ae44 100644 (file)
@@ -98,8 +98,13 @@ src_libloc_la_CFLAGS = \
 
 src_libloc_la_LDFLAGS = \
        $(AM_LDFLAGS) \
-       -version-info $(LIBLOC_CURRENT):$(LIBLOC_REVISION):$(LIBLOC_AGE) \
-       -Wl,--version-script=$(top_srcdir)/src/libloc.sym
+       -version-info $(LIBLOC_CURRENT):$(LIBLOC_REVISION):$(LIBLOC_AGE)
+
+if HAVE_LD_VERSION_SCRIPT
+       src_libloc_la_LDFLAGS += -Wl,--version-script=$(top_srcdir)/src/libloc.sym
+else
+       src_libloc_la_LDFLAGS += -export-symbols $(top_srcdir)/src/libloc.sym
+endif
 
 src_libloc_la_DEPENDENCIES = \
        ${top_srcdir}/src/libloc.sym
index 2c1e8f377024ec04b6fb0efcb38d83cd1526d708..c4ba1f3f446c6904b14dc0e18327bde951ac3f3f 100644 (file)
@@ -28,6 +28,7 @@ LT_INIT([
        pic-only
 ])
 AC_PREFIX_DEFAULT([/usr])
+gl_LD_VERSION_SCRIPT
 
 IT_PROG_INTLTOOL([0.40.0])
 GETTEXT_PACKAGE=${PACKAGE_TARNAME}
diff --git a/m4/ld-version-script.m4 b/m4/ld-version-script.m4
new file mode 100644 (file)
index 0000000..211d67b
--- /dev/null
@@ -0,0 +1,48 @@
+# ld-version-script.m4 serial 4
+dnl Copyright (C) 2008-2015 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([gl_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],
+    [AC_CACHE_CHECK([if LD -Wl,--version-script works],
+       [gl_cv_sys_ld_version_script],
+       [gl_cv_sys_ld_version_script=no
+        save_LDFLAGS=$LDFLAGS
+        LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map"
+        echo foo >conftest.map
+        AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
+          [],
+          [cat > conftest.map <<EOF
+VERS_1 {
+        global: sym;
+};
+
+VERS_2 {
+        global: sym;
+} VERS_1;
+EOF
+           AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
+             [gl_cv_sys_ld_version_script=yes])])
+        rm -f conftest.map
+        LDFLAGS=$save_LDFLAGS])
+     have_ld_version_script=$gl_cv_sys_ld_version_script])
+  AM_CONDITIONAL([HAVE_LD_VERSION_SCRIPT],
+    [test "$have_ld_version_script" = yes])
+])