diff options
author | Tobias Brunner <tobias@strongswan.org> | 2016-07-20 11:01:17 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2016-08-26 09:59:01 +0200 |
commit | 6e19a1f5f203e932c634c6151d341b19b5420b44 (patch) | |
tree | e196ab6adbf65f3288be321a0f8e70b041154164 /configure.ac | |
parent | 1806ba0890bc503df3dacf01992ec1bca2b0fbb0 (diff) | |
download | strongswan-6e19a1f5f203e932c634c6151d341b19b5420b44.tar.bz2 strongswan-6e19a1f5f203e932c634c6151d341b19b5420b44.tar.xz |
configure: Improve check for built-in __atomic_* functions
With AC_SEARCH_LIBS() we don't succeed if the searched function is a
built-in as the check uses the wrong signature so the built-in will not
be applied (the warning issued by GCC is "conflicting types for built-in
function '...'"). So even if not required, libatomic will be linked if
it is found, which could be problematic if compiling on a separate host
and the target host does not have libatomic installed.
Also, some tests showed that it's more likely that __atomic_and_fetch()
requires linking libatomic than __atomic_load_n() does.
References #1533.
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac index b58a5c149..408152a84 100644 --- a/configure.ac +++ b/configure.ac @@ -501,9 +501,20 @@ LIBS=$DLLIB AC_SEARCH_LIBS(pthread_create, pthread, [PTHREADLIB=$LIBS]) AC_SUBST(PTHREADLIB) -# uClibc requires explicit -latomic for __atomic_* operations +# Some architectures require explicit -latomic for __atomic_* operations +# AC_SEARCH_LIBS() does not work when checking built-ins due to conflicting types LIBS="" -AC_SEARCH_LIBS(__atomic_load, atomic, [ATOMICLIB=$LIBS]) +AC_MSG_CHECKING(for library containing __atomic_and_fetch) +AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[]], [[int x; __atomic_and_fetch(&x, 1, __ATOMIC_RELAXED);]])], + [AC_MSG_RESULT([none required])], + [LIBS="-latomic"; + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[]], [[int x; __atomic_and_fetch(&x, 1, __ATOMIC_RELAXED);]])], + [AC_MSG_RESULT([-latomic]); ATOMICLIB=$LIBS], + [AC_MSG_RESULT([no])]) + ] +) AC_SUBST(ATOMICLIB) LIBS=$saved_LIBS |