aboutsummaryrefslogtreecommitdiffstats
path: root/configure.ac
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2016-07-20 11:01:17 +0200
committerTobias Brunner <tobias@strongswan.org>2016-08-26 09:59:01 +0200
commit6e19a1f5f203e932c634c6151d341b19b5420b44 (patch)
treee196ab6adbf65f3288be321a0f8e70b041154164 /configure.ac
parent1806ba0890bc503df3dacf01992ec1bca2b0fbb0 (diff)
downloadstrongswan-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.ac15
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