From 9f4ca582555b208d065f730b5ce3b1901136b275 Mon Sep 17 00:00:00 2001
From: Asaf Kahlon <asafka7@gmail.com>
Date: Mon, 7 May 2018 23:19:09 +0300
Subject: [PATCH] acinclude.m4: check if -latomic is needed

On some cases, -latomic is needed for linking, and since the current
acinclude.m4 checks only compilation we can sometimes miss the need for -latomic
and the linking process will fail.
Therefore, the AC_CHECK_IFELSE was replaced with AC_LINK_IFELSE. If the first
try fails, we try to link again with -latomic and add LIBS="-latomic" in case we
succeeded.

Signed-off-by: Asaf Kahlon <asafka7@gmail.com>
---
 acinclude.m4 | 32 ++++++++++++++++++++++++++++----
 1 file changed, 28 insertions(+), 4 deletions(-)

diff --git a/acinclude.m4 b/acinclude.m4
index f648ed0f..aa35195f 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -668,7 +668,7 @@ dnl # Check if compiler supoorts __atomic_Xxx intrinsics
 dnl ################################################################################
 AC_DEFUN([LIBZMQ_CHECK_ATOMIC_INTRINSICS], [{
     AC_MSG_CHECKING(whether compiler supports __atomic_Xxx intrinsics)
-    AC_COMPILE_IFELSE([AC_LANG_SOURCE([
+    AC_LINK_IFELSE([AC_LANG_SOURCE([
 /* atomic intrinsics test */
 int v = 0;
 int main (int, char **)
@@ -677,9 +677,33 @@ int main (int, char **)
     return t;
 }
     ])],
-    [AC_MSG_RESULT(yes) ; libzmq_cv_has_atomic_instrisics="yes" ; $1],
-    [AC_MSG_RESULT(no)  ; libzmq_cv_has_atomic_instrisics="no"  ; $2]
-    )
+    [libzmq_cv_has_atomic_instrisics="yes"],
+    [libzmq_cv_has_atomic_instrisics="no"])
+
+    if test "x$libzmq_cv_has_atomic_instrisics" = "xno"; then
+        save_LDFLAGS=$LDFLAGS
+        LDFLAGS="$LDFLAGS -latomic"
+        AC_LINK_IFELSE([AC_LANG_SOURCE([
+        /* atomic intrinsics test */
+        int v = 0;
+        int main (int, char **)
+        {
+            int t = __atomic_add_fetch (&v, 1, __ATOMIC_ACQ_REL);
+            return t;
+        }
+        ])],
+        [libzmq_cv_has_atomic_instrisics="yes" LIBS="-latomic"],
+        [libzmq_cv_has_atomic_instrisics="no"])
+        LDFLAGS=$save_LDFLAGS
+    fi
+
+    if test "x$libzmq_cv_has_atomic_instrisics" = "xyes"; then
+        AC_MSG_RESULT(yes)
+        $1
+    else
+        AC_MSG_RESULT(no)
+        $2
+    fi
 }])
 
 dnl ################################################################################
-- 
2.17.0