aboutsummaryrefslogtreecommitdiff
path: root/configure.ac
diff options
context:
space:
mode:
authorMichal Privoznik <mprivozn@redhat.com>2018-08-06 07:50:35 +0200
committerPetri Lehtinen <petri@digip.org>2018-08-09 07:54:26 +0300
commit360b1ef5a1811594751234ffe630beabd138ba2e (patch)
treee2f84094fac8fada486458378ac029282e023957 /configure.ac
parent37147b8a234345232a994d45e5f1293703f44605 (diff)
downloadjansson-360b1ef5a1811594751234ffe630beabd138ba2e.zip
jansson-360b1ef5a1811594751234ffe630beabd138ba2e.tar.gz
jansson-360b1ef5a1811594751234ffe630beabd138ba2e.tar.bz2
Enable -Bsymbolic-functions linker flag whenever possible
It was discovered fairly recently that JSON parsing libraries use common pattern to name their exported symbols (they all use json_ prefix). So eventually it happens that two symbols from two different libraries have the same name. This will lead to cryptic crashes (see [1] and [2]). Linking with -Bsymbolic-functions prevents this. 1: https://gitlab.gnome.org/GNOME/json-glib/issues/33 2: https://groups.google.com/forum/#!topic/jansson-users/7Efx-RI45IU Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac29
1 files changed, 29 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
index ca12b59..735fe89 100644
--- a/configure.ac
+++ b/configure.ac
@@ -107,6 +107,35 @@ AC_ARG_ENABLE([initial-hashtable-order],
AC_DEFINE_UNQUOTED([INITIAL_HASHTABLE_ORDER], [$initial_hashtable_order],
[Number of buckets new object hashtables contain is 2 raised to this power. E.g. 3 -> 2^3 = 8.])
+AC_ARG_ENABLE([Bsymbolic],
+ [AS_HELP_STRING([--disable-Bsymbolic],
+ [Avoid linking with -Bsymbolic-function])],
+ [], [with_Bsymbolic=check])
+
+if test "x$with_Bsymbolic" != "xno" ; then
+ AC_MSG_CHECKING([for -Bsymbolic-functions linker flag])
+ saved_LDFLAGS="${LDFLAGS}"
+ LDFLAGS=-Wl,-Bsymbolic-functions
+ AC_TRY_LINK(
+ [], [int main (void) { return 0; }],
+ [AC_MSG_RESULT([yes])
+ have_Bsymbolic=yes],
+ [AC_MSG_RESULT([no])
+ have_Bsymbolic=no]
+ )
+ LDFLAGS="${saved_LDFLAGS}"
+
+ if test "x$with_Bsymbolic" = "xcheck" ; then
+ with_Bsymbolic=$have_Bsymbolic;
+ fi
+ if test "x$with_Bsymbolic:x$have_Bsymbolic" = "xyes:xno" ; then
+ AC_MSG_ERROR([linker support is required for -Bsymbolic])
+ fi
+fi
+
+AS_IF([test "x$with_Bsymbolic" = "xyes"], [JSON_BSYMBOLIC_LDFLAGS=-Wl[,]-Bsymbolic-functions])
+AC_SUBST(JSON_BSYMBOLIC_LDFLAGS)
+
if test x$GCC = xyes; then
AC_MSG_CHECKING(for -Wno-format-truncation)
wnoformat_truncation="-Wno-format-truncation"