Signed-off-by: Pavel Hrdina <phrd...@redhat.com>
---
 configure.ac      | 55 +--------------------------------------
 m4/virt-atomic.m4 | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 78 insertions(+), 54 deletions(-)
 create mode 100644 m4/virt-atomic.m4

diff --git a/configure.ac b/configure.ac
index 9e43b52650..57f7728c63 100644
--- a/configure.ac
+++ b/configure.ac
@@ -312,60 +312,7 @@ fi
 AC_SUBST([ACL_CFLAGS])
 AC_SUBST([ACL_LIBS])
 
-dnl We need to decide at configure time if libvirt will use real atomic
-dnl operations ("lock free") or emulated ones with a mutex.
-
-dnl Note that the atomic ops are only available with GCC on x86 when
-dnl using -march=i486 or higher.  If we detect that the atomic ops are
-dnl not available but would be available given the right flags, we want
-dnl to abort and advise the user to fix their CFLAGS.  It's better to do
-dnl that then to silently fall back on emulated atomic ops just because
-dnl the user had the wrong build environment.
-
-atomic_ops=
-
-AC_MSG_CHECKING([for atomic ops implementation])
-
-AC_TRY_COMPILE([], [__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4;],[
-  atomic_ops=gcc
-],[])
-
-if test "$atomic_ops" = "" ; then
-  SAVE_CFLAGS="${CFLAGS}"
-  CFLAGS="-march=i486"
-  AC_TRY_COMPILE([],
-                 [__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4;],
-                 [AC_MSG_ERROR([Libvirt must be built with -march=i486 or 
later.])],
-                 [])
-  CFLAGS="${SAVE_CFLAGS}"
-
-  case "$host" in
-    *-*-mingw* | *-*-msvc* )
-      atomic_ops=win32
-      ;;
-    *)
-      if test "$ac_cv_header_pthread_h" = "yes" ; then
-        atomic_ops=pthread
-      else
-        AC_MSG_ERROR([Libvirt must be built with GCC or have pthread.h on 
non-Win32 platforms])
-      fi
-      ;;
-  esac
-fi
-
-case "$atomic_ops" in
-   gcc)
-     AC_DEFINE([VIR_ATOMIC_OPS_GCC],[1],[Use GCC atomic ops])
-     ;;
-   win32)
-     AC_DEFINE([VIR_ATOMIC_OPS_WIN32],[1],[Use Win32 atomic ops])
-     ;;
-   pthread)
-     AC_DEFINE([VIR_ATOMIC_OPS_PTHREAD],[1],[Use pthread atomic ops emulation])
-     ;;
-esac
-AM_CONDITIONAL([WITH_ATOMIC_OPS_PTHREAD],[test "$atomic_ops" = "pthread"])
-AC_MSG_RESULT([$atomic_ops])
+LIBVIRT_CHECK_ATOMIC
 
 
 AC_CHECK_TYPE([struct ifreq],
diff --git a/m4/virt-atomic.m4 b/m4/virt-atomic.m4
new file mode 100644
index 0000000000..d96f7a2bac
--- /dev/null
+++ b/m4/virt-atomic.m4
@@ -0,0 +1,77 @@
+dnl The atomic implementation check
+dnl
+dnl Copyright (C) 2016 Red Hat, Inc.
+dnl
+dnl This library is free software; you can redistribute it and/or
+dnl modify it under the terms of the GNU Lesser General Public
+dnl License as published by the Free Software Foundation; either
+dnl version 2.1 of the License, or (at your option) any later version.
+dnl
+dnl This library is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+dnl Lesser General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU Lesser General Public
+dnl License along with this library.  If not, see
+dnl <http://www.gnu.org/licenses/>.
+dnl
+
+AC_DEFUN([LIBVIRT_CHECK_ATOMIC], [
+  AC_REQUIRE([LIBVIRT_CHECK_PTHREAD])
+
+  dnl We need to decide at configure time if libvirt will use real atomic
+  dnl operations ("lock free") or emulated ones with a mutex.
+  dnl
+  dnl Note that the atomic ops are only available with GCC on x86 when
+  dnl using -march=i486 or higher.  If we detect that the atomic ops are
+  dnl not available but would be available given the right flags, we want
+  dnl to abort and advise the user to fix their CFLAGS.  It's better to do
+  dnl that then to silently fall back on emulated atomic ops just because
+  dnl the user had the wrong build environment.
+
+  atomic_ops=
+
+  AC_MSG_CHECKING([for atomic ops implementation])
+
+  AC_TRY_COMPILE([], [__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4;],[
+    atomic_ops=gcc
+  ],[])
+
+  if test "$atomic_ops" = "" ; then
+    SAVE_CFLAGS="${CFLAGS}"
+    CFLAGS="-march=i486"
+    AC_TRY_COMPILE([],
+                   [__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4;],
+                   [AC_MSG_ERROR([Libvirt must be built with -march=i486 or 
later.])],
+                   [])
+    CFLAGS="${SAVE_CFLAGS}"
+
+    case "$host" in
+      *-*-mingw* | *-*-msvc* )
+        atomic_ops=win32
+        ;;
+      *)
+        if test "$ac_cv_header_pthread_h" = "yes" ; then
+          atomic_ops=pthread
+        else
+          AC_MSG_ERROR([Libvirt must be built with GCC or have pthread.h on 
non-Win32 platforms])
+        fi
+        ;;
+    esac
+  fi
+
+  case "$atomic_ops" in
+    gcc)
+      AC_DEFINE([VIR_ATOMIC_OPS_GCC],[1],[Use GCC atomic ops])
+      ;;
+    win32)
+      AC_DEFINE([VIR_ATOMIC_OPS_WIN32],[1],[Use Win32 atomic ops])
+      ;;
+    pthread)
+      AC_DEFINE([VIR_ATOMIC_OPS_PTHREAD],[1],[Use pthread atomic ops 
emulation])
+      ;;
+  esac
+  AM_CONDITIONAL([WITH_ATOMIC_OPS_PTHREAD],[test "$atomic_ops" = "pthread"])
+  AC_MSG_RESULT([$atomic_ops])
+])
-- 
2.11.0

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to