Port: Add support for linkers with no support for 'no-as-needed'
authorAlexis Martin <alexis.martin@inria.fr>
Thu, 1 Oct 2015 20:12:25 +0000 (16:12 -0400)
committerMichael Jeanson <mjeanson@efficios.com>
Fri, 16 Oct 2015 19:40:29 +0000 (15:40 -0400)
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
13 files changed:
compat/Makefile.am
configure.ac
converter/Makefile.am
formats/bt-dummy/Makefile.am
formats/ctf-metadata/Makefile.am
formats/ctf-text/Makefile.am
formats/ctf/Makefile.am
formats/lttng-live/Makefile.am
m4/ax_append_flag.m4 [new file with mode: 0644]
m4/ax_append_link_flags.m4 [new file with mode: 0644]
m4/ax_check_link_flag.m4 [new file with mode: 0644]
m4/ax_require_defined.m4 [new file with mode: 0644]
tests/lib/Makefile.am

index b09ebab12f83bb47199927233a00ce5faeea7141..38af18854c48084740d3145dc55a3b868da50e9b 100644 (file)
@@ -5,7 +5,7 @@ noinst_LTLIBRARIES = libcompat.la
 libcompat_la_SOURCES = dummy.c
 
 libcompat_la_LDFLAGS = \
 libcompat_la_SOURCES = dummy.c
 
 libcompat_la_LDFLAGS = \
-       -Wl,--no-as-needed
+       $(LD_NO_AS_NEEDED)
 
 if BABELTRACE_BUILD_WITH_MINGW
 libcompat_la_SOURCES += compat_uuid.c
 
 if BABELTRACE_BUILD_WITH_MINGW
 libcompat_la_SOURCES += compat_uuid.c
index 507efe6c00d27c436743d7f10d024f97e439112b..eb19de3b0ec195af71045b78b537c976564c285d 100644 (file)
@@ -29,6 +29,10 @@ LT_INIT
 AC_PROG_YACC
 AC_PROG_LEX
 
 AC_PROG_YACC
 AC_PROG_LEX
 
+# Check linker option
+AX_APPEND_LINK_FLAGS([-Wl,--no-as-needed], [LD_NO_AS_NEEDED])
+AC_SUBST([LD_NO_AS_NEEDED])
+
 if test ! -f "$srcdir/formats/ctf/metadata/ctf-parser.h"; then
         if test x"$YACC" != "xbison -y"; then
                 AC_MSG_ERROR([[bison not found and is required when building from git.
 if test ! -f "$srcdir/formats/ctf/metadata/ctf-parser.h"; then
         if test x"$YACC" != "xbison -y"; then
                 AC_MSG_ERROR([[bison not found and is required when building from git.
index 374d1d47f11a5e3cfc8aa852dbd2baf98907b986..af95627d285d30b81af385d70ff2da70a3921377 100644 (file)
@@ -9,7 +9,7 @@ babeltrace_SOURCES = \
 # -Wl,--no-as-needed is needed for recent gold linker who seems to think
 # it knows better and considers libraries with constructors having
 # side-effects as dead code.
 # -Wl,--no-as-needed is needed for recent gold linker who seems to think
 # it knows better and considers libraries with constructors having
 # side-effects as dead code.
-babeltrace_LDFLAGS = -Wl,--no-as-needed
+babeltrace_LDFLAGS = $(LD_NO_AS_NEEDED)
 babeltrace_LDADD = \
        $(top_builddir)/lib/libbabeltrace.la \
        $(top_builddir)/formats/ctf/libbabeltrace-ctf.la \
 babeltrace_LDADD = \
        $(top_builddir)/lib/libbabeltrace.la \
        $(top_builddir)/formats/ctf/libbabeltrace-ctf.la \
index 1d21de94286425e2af4cfc2001bd21c0ac9ab2b1..e8ae4de9d79260841093144f197ec6b6327cf496 100644 (file)
@@ -7,7 +7,7 @@ libbabeltrace_dummy_la_SOURCES = \
 
 # Request that the linker keeps all static libraries objects.
 libbabeltrace_dummy_la_LDFLAGS = \
 
 # Request that the linker keeps all static libraries objects.
 libbabeltrace_dummy_la_LDFLAGS = \
-       -Wl,--no-as-needed -version-info $(BABELTRACE_LIBRARY_VERSION)
+       $(LD_NO_AS_NEEDED) -version-info $(BABELTRACE_LIBRARY_VERSION)
 
 libbabeltrace_dummy_la_LIBADD = \
        $(top_builddir)/lib/libbabeltrace.la
 
 libbabeltrace_dummy_la_LIBADD = \
        $(top_builddir)/lib/libbabeltrace.la
index f5061761720ce7e116cdc9c9f08906458f3fbbd4..252d9afa7903a05d6a719d44ee3002ab97970192 100644 (file)
@@ -7,7 +7,7 @@ libbabeltrace_ctf_metadata_la_SOURCES = \
 
 # Request that the linker keeps all static libraries objects.
 libbabeltrace_ctf_metadata_la_LDFLAGS = \
 
 # Request that the linker keeps all static libraries objects.
 libbabeltrace_ctf_metadata_la_LDFLAGS = \
-       -Wl,--no-as-needed -version-info $(BABELTRACE_LIBRARY_VERSION)
+       $(LD_NO_AS_NEEDED) -version-info $(BABELTRACE_LIBRARY_VERSION)
 
 libbabeltrace_ctf_metadata_la_LIBADD = \
        $(top_builddir)/lib/libbabeltrace.la
 
 libbabeltrace_ctf_metadata_la_LIBADD = \
        $(top_builddir)/lib/libbabeltrace.la
index 1619df3e8ce3011270dd26ff5edb2a667396ab94..39f8f389abc0c4b59d71b7b8b3591334f59215e1 100644 (file)
@@ -8,7 +8,7 @@ libbabeltrace_ctf_text_la_SOURCES = \
        ctf-text.c
 
 libbabeltrace_ctf_text_la_LDFLAGS = \
        ctf-text.c
 
 libbabeltrace_ctf_text_la_LDFLAGS = \
-       -Wl,--no-as-needed -version-info $(BABELTRACE_LIBRARY_VERSION) \
+       $(LD_NO_AS_NEEDED) -version-info $(BABELTRACE_LIBRARY_VERSION) \
        types/libctf-text-types.la
 
 libbabeltrace_ctf_text_la_LIBADD = \
        types/libctf-text-types.la
 
 libbabeltrace_ctf_text_la_LIBADD = \
index 5d8a29701eccfc4063fc71f0b699e1edbfe550f8..094cb36dd5eedb00d4b406d01cb2b4b9d3602c32 100644 (file)
@@ -13,7 +13,7 @@ libbabeltrace_ctf_la_SOURCES = \
 
 # Request that the linker keeps all static libraries objects.
 libbabeltrace_ctf_la_LDFLAGS = \
 
 # Request that the linker keeps all static libraries objects.
 libbabeltrace_ctf_la_LDFLAGS = \
-       -Wl,--no-as-needed -version-info $(BABELTRACE_LIBRARY_VERSION)
+       $(LD_NO_AS_NEEDED) -version-info $(BABELTRACE_LIBRARY_VERSION)
 
 libbabeltrace_ctf_la_LIBADD = \
        $(top_builddir)/lib/libbabeltrace.la \
 
 libbabeltrace_ctf_la_LIBADD = \
        $(top_builddir)/lib/libbabeltrace.la \
index 2c6b0bd13cbb20ee03849db7763027517f176468..d976979670dadd3a6f943d1e0f94465b1a77e305 100644 (file)
@@ -11,7 +11,7 @@ libbabeltrace_lttng_live_la_SOURCES = \
 
 # Request that the linker keeps all static libraries objects.
 libbabeltrace_lttng_live_la_LDFLAGS = \
 
 # Request that the linker keeps all static libraries objects.
 libbabeltrace_lttng_live_la_LDFLAGS = \
-       -Wl,--no-as-needed -version-info $(BABELTRACE_LIBRARY_VERSION)
+       $(LD_NO_AS_NEEDED) -version-info $(BABELTRACE_LIBRARY_VERSION)
 
 libbabeltrace_lttng_live_la_LIBADD = \
        $(top_builddir)/lib/libbabeltrace.la
 
 libbabeltrace_lttng_live_la_LIBADD = \
        $(top_builddir)/lib/libbabeltrace.la
diff --git a/m4/ax_append_flag.m4 b/m4/ax_append_flag.m4
new file mode 100644 (file)
index 0000000..08f2e07
--- /dev/null
@@ -0,0 +1,71 @@
+# ===========================================================================
+#      http://www.gnu.org/software/autoconf-archive/ax_append_flag.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_APPEND_FLAG(FLAG, [FLAGS-VARIABLE])
+#
+# DESCRIPTION
+#
+#   FLAG is appended to the FLAGS-VARIABLE shell variable, with a space
+#   added in between.
+#
+#   If FLAGS-VARIABLE is not specified, the current language's flags (e.g.
+#   CFLAGS) is used.  FLAGS-VARIABLE is not changed if it already contains
+#   FLAG.  If FLAGS-VARIABLE is unset in the shell, it is set to exactly
+#   FLAG.
+#
+#   NOTE: Implementation based on AX_CFLAGS_GCC_OPTION.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
+#   Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
+#
+#   This program is free software: you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation, either version 3 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 6
+
+AC_DEFUN([AX_APPEND_FLAG],
+[dnl
+AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_SET_IF
+AS_VAR_PUSHDEF([FLAGS], [m4_default($2,_AC_LANG_PREFIX[FLAGS])])
+AS_VAR_SET_IF(FLAGS,[
+  AS_CASE([" AS_VAR_GET(FLAGS) "],
+    [*" $1 "*], [AC_RUN_LOG([: FLAGS already contains $1])],
+    [
+     AS_VAR_APPEND(FLAGS,[" $1"])
+     AC_RUN_LOG([: FLAGS="$FLAGS"])
+    ])
+  ],
+  [
+  AS_VAR_SET(FLAGS,[$1])
+  AC_RUN_LOG([: FLAGS="$FLAGS"])
+  ])
+AS_VAR_POPDEF([FLAGS])dnl
+])dnl AX_APPEND_FLAG
diff --git a/m4/ax_append_link_flags.m4 b/m4/ax_append_link_flags.m4
new file mode 100644 (file)
index 0000000..c73ddaf
--- /dev/null
@@ -0,0 +1,63 @@
+# ===========================================================================
+#   http://www.gnu.org/software/autoconf-archive/ax_append_link_flags.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_APPEND_LINK_FLAGS([FLAG1 FLAG2 ...], [FLAGS-VARIABLE], [EXTRA-FLAGS])
+#
+# DESCRIPTION
+#
+#   For every FLAG1, FLAG2 it is checked whether the linker works with the
+#   flag.  If it does, the flag is added FLAGS-VARIABLE
+#
+#   If FLAGS-VARIABLE is not specified, the linker's flags (LDFLAGS) is
+#   used. During the check the flag is always added to the linker's flags.
+#
+#   If EXTRA-FLAGS is defined, it is added to the linker's default flags
+#   when the check is done.  The check is thus made with the flags: "LDFLAGS
+#   EXTRA-FLAGS FLAG".  This can for example be used to force the linker to
+#   issue an error when a bad flag is given.
+#
+#   NOTE: This macro depends on the AX_APPEND_FLAG and AX_CHECK_LINK_FLAG.
+#   Please keep this macro in sync with AX_APPEND_COMPILE_FLAGS.
+#
+# LICENSE
+#
+#   Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
+#
+#   This program is free software: you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation, either version 3 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 4
+
+AC_DEFUN([AX_APPEND_LINK_FLAGS],
+[AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG])
+AX_REQUIRE_DEFINED([AX_APPEND_FLAG])
+for flag in $1; do
+  AX_CHECK_LINK_FLAG([$flag], [AX_APPEND_FLAG([$flag], [m4_default([$2], [LDFLAGS])])], [], [$3])
+done
+])dnl AX_APPEND_LINK_FLAGS
diff --git a/m4/ax_check_link_flag.m4 b/m4/ax_check_link_flag.m4
new file mode 100644 (file)
index 0000000..eb01a6c
--- /dev/null
@@ -0,0 +1,74 @@
+# ===========================================================================
+#    http://www.gnu.org/software/autoconf-archive/ax_check_link_flag.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_CHECK_LINK_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
+#
+# DESCRIPTION
+#
+#   Check whether the given FLAG works with the linker or gives an error.
+#   (Warnings, however, are ignored)
+#
+#   ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
+#   success/failure.
+#
+#   If EXTRA-FLAGS is defined, it is added to the linker's default flags
+#   when the check is done.  The check is thus made with the flags: "LDFLAGS
+#   EXTRA-FLAGS FLAG".  This can for example be used to force the linker to
+#   issue an error when a bad flag is given.
+#
+#   INPUT gives an alternative input source to AC_LINK_IFELSE.
+#
+#   NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
+#   macro in sync with AX_CHECK_{PREPROC,COMPILE}_FLAG.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
+#   Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
+#
+#   This program is free software: you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation, either version 3 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 4
+
+AC_DEFUN([AX_CHECK_LINK_FLAG],
+[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF
+AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_ldflags_$4_$1])dnl
+AC_CACHE_CHECK([whether the linker accepts $1], CACHEVAR, [
+  ax_check_save_flags=$LDFLAGS
+  LDFLAGS="$LDFLAGS $4 $1"
+  AC_LINK_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
+    [AS_VAR_SET(CACHEVAR,[yes])],
+    [AS_VAR_SET(CACHEVAR,[no])])
+  LDFLAGS=$ax_check_save_flags])
+AS_VAR_IF(CACHEVAR,yes,
+  [m4_default([$2], :)],
+  [m4_default([$3], :)])
+AS_VAR_POPDEF([CACHEVAR])dnl
+])dnl AX_CHECK_LINK_FLAGS
diff --git a/m4/ax_require_defined.m4 b/m4/ax_require_defined.m4
new file mode 100644 (file)
index 0000000..cae1111
--- /dev/null
@@ -0,0 +1,37 @@
+# ===========================================================================
+#    http://www.gnu.org/software/autoconf-archive/ax_require_defined.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_REQUIRE_DEFINED(MACRO)
+#
+# DESCRIPTION
+#
+#   AX_REQUIRE_DEFINED is a simple helper for making sure other macros have
+#   been defined and thus are available for use.  This avoids random issues
+#   where a macro isn't expanded.  Instead the configure script emits a
+#   non-fatal:
+#
+#     ./configure: line 1673: AX_CFLAGS_WARN_ALL: command not found
+#
+#   It's like AC_REQUIRE except it doesn't expand the required macro.
+#
+#   Here's an example:
+#
+#     AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG])
+#
+# LICENSE
+#
+#   Copyright (c) 2014 Mike Frysinger <vapier@gentoo.org>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved. This file is offered as-is, without any
+#   warranty.
+
+#serial 1
+
+AC_DEFUN([AX_REQUIRE_DEFINED], [dnl
+  m4_ifndef([$1], [m4_fatal([macro ]$1[ is not defined; is a m4 file missing?])])
+])dnl AX_REQUIRE_DEFINED
index 7c96e4ab0b2c0448964feb5e063bca4c51f8f394..8c46acb533746f7cf85ce96029ff7ccd300f12c8 100644 (file)
@@ -9,7 +9,7 @@ libtestcommon_a_SOURCES = common.c common.h
 # -Wl,--no-as-needed is needed for recent gold linker who seems to think
 # it knows better and considers libraries with constructors having
 # side-effects as dead code.
 # -Wl,--no-as-needed is needed for recent gold linker who seems to think
 # it knows better and considers libraries with constructors having
 # side-effects as dead code.
-test_seek_LDFLAGS = -Wl,--no-as-needed
+test_seek_LDFLAGS = $(LD_NO_AS_NEEDED)
 test_seek_LDADD = $(LIBTAP) libtestcommon.a \
        $(top_builddir)/lib/libbabeltrace.la \
        $(top_builddir)/formats/ctf/libbabeltrace-ctf.la
 test_seek_LDADD = $(LIBTAP) libtestcommon.a \
        $(top_builddir)/lib/libbabeltrace.la \
        $(top_builddir)/formats/ctf/libbabeltrace-ctf.la
This page took 0.030827 seconds and 4 git commands to generate.