diff --git a/config_host.mk.in b/config_host.mk.in index 8db0d6ddd779..5476dffa6191 100644 --- a/config_host.mk.in +++ b/config_host.mk.in @@ -30,6 +30,7 @@ export AR=@AR@ export ASSERT_ALWAYS_ABORT=@ASSERT_ALWAYS_ABORT@ export ATL_INCLUDE=@ATL_INCLUDE@ export ATL_LIB=@ATL_LIB@ +export ATOMIC_LIB=@ATOMIC_LIB@ export AVAHI_CFLAGS=$(gb_SPACE)@AVAHI_CFLAGS@ export AVAHI_LIBS=$(gb_SPACE)@AVAHI_LIBS@ export LIBATOMIC_OPS_CFLAGS=$(gb_SPACE)@LIBATOMIC_OPS_CFLAGS@ diff --git a/configure.ac b/configure.ac index 41d64890d01c..658abe24081a 100644 --- a/configure.ac +++ b/configure.ac @@ -6537,6 +6537,14 @@ else fi AC_SUBST(CXXFLAGS_CXX11) +if test "$GCC" = "yes"; then + save_CXXFLAGS=$CXXFLAGS + CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11" + CHECK_L_ATOMIC + CXXFLAGS=$save_CXXFLAGS + AC_SUBST(ATOMIC_LIB) +fi + dnl Test for temporarily incompatible libstdc++ 4.7.{0,1}, where dnl introduced dnl an additional member _M_size into C++11 std::list towards 4.7.0 and diff --git a/m4/l_atomic.m4 b/m4/l_atomic.m4 new file mode 100644 index 000000000000..6e011ebabe3d --- /dev/null +++ b/m4/l_atomic.m4 @@ -0,0 +1,41 @@ +# Some versions of gcc/libstdc++ require linking with -latomic if +# using the C++ atomic library. +# +# Sourced from http://bugs.debian.org/797228 + +m4_define([_CHECK_L_ATOMIC_testbody], [[ + #include + #include + + int main() { + std::atomic a{}; + + int64_t v = 5; + int64_t r = a.fetch_add(v); + return static_cast(r); + } +]]) + +AC_DEFUN([CHECK_L_ATOMIC], [ + + AC_LANG_PUSH(C++) + + AC_MSG_CHECKING([whether std::atomic can be used without link library]) + + AC_LINK_IFELSE([AC_LANG_SOURCE([_CHECK_L_ATOMIC_testbody])],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + LIBS="$LIBS -latomic" + AC_MSG_CHECKING([whether std::atomic needs -latomic]) + AC_LINK_IFELSE([AC_LANG_SOURCE([_CHECK_L_ATOMIC_testbody])],[ + AC_MSG_RESULT([yes]) + ATOMIC_LIB=-latomic + ],[ + AC_MSG_RESULT([no]) + AC_MSG_FAILURE([cannot figure our how to use std::atomic]) + ]) + ]) + + AC_LANG_POP +])