The usual docs unbreaking...
[platform/upstream/glib.git] / configure.ac
index 4a9e723..f1fd5ef 100644 (file)
@@ -2402,65 +2402,63 @@ AC_CHECK_FUNCS(clock_gettime, [], [
 ])
 AC_SUBST(GLIB_RT_LIBS)
 
-AC_CACHE_CHECK(for monotonic clocks,
-    glib_cv_monotonic_clock,AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
-#include <time.h>
-#include <unistd.h>
-int main() {
-#if !(defined(_POSIX_MONOTONIC_CLOCK) && _POSIX_MONOTONIC_CLOCK >= 0 && defined(CLOCK_MONOTONIC))
-        #error No monotonic clock
-#endif
-       return 0;
-}
-]])],glib_cv_monotonic_clock=yes,glib_cv_monotonic_clock=no))
-if test "$glib_cv_monotonic_clock" = "yes"; then
-  AC_DEFINE(HAVE_MONOTONIC_CLOCK,1,[Have a monotonic clock])
-fi
-
 
 dnl ************************
 dnl *** g_atomic_* tests ***
 dnl ************************
 
-    case $host_cpu in
-      i?86|x86_64|s390|s390x|arm*|crisv32*|etrax*)
-        glib_memory_barrier_needed=no
-        ;;
-      sparc*|alpha*|powerpc*|ia64)
-        glib_memory_barrier_needed=yes
-        ;;
-      *)
-        glib_memory_barrier_needed=yes
-        ;;
-    esac
-
-glib_cv_gcc_has_builtin_atomic_operations=no
-if test x"$GCC" = xyes; then
-  AC_MSG_CHECKING([whether GCC supports built-in atomic intrinsics])
-  AC_TRY_LINK([],
-             [int i;
-              __sync_synchronize ();
-              __sync_bool_compare_and_swap (&i, 0, 1);
-              __sync_fetch_and_add (&i, 1);
-             ],
-             [glib_cv_gcc_has_builtin_atomic_operations=yes],
-             [glib_cv_gcc_has_builtin_atomic_operations=no])
-
-  AC_MSG_RESULT($glib_cv_gcc_has_builtin_atomic_operations)
-fi
-AM_CONDITIONAL(HAVE_GCC_BUILTINS_FOR_ATOMIC_OPERATIONS,
-              [test $glib_cv_gcc_has_builtin_atomic_operations = yes])
-
-AC_MSG_CHECKING([for Win32 atomic intrinsics])
-glib_cv_has_win32_atomic_operations=no
-AC_TRY_LINK([],
-       [int i; _InterlockedExchangeAdd (&i, 0);],
-       [glib_cv_has_win32_atomic_operations=yes],
-       [glib_cv_has_win32_atomic_operations=no])
-AC_MSG_RESULT($glib_cv_has_win32_atomic_operations)
-if test "x$glib_cv_has_win32_atomic_operations" = xyes; then
-       AC_DEFINE(HAVE_WIN32_BUILTINS_FOR_ATOMIC_OPERATIONS,1,[Have Win32 atomic intrinsics])
-fi
+dnl We need to decide at configure time if GLib will use real atomic
+dnl operations ("lock free") or emulated ones with a mutex.  This is
+dnl because we must put this information in glibconfig.h so we know if
+dnl it is safe or not to inline using compiler intrinsics directly from
+dnl the header.
+dnl
+dnl We also publish the information via G_ATOMIC_LOCK_FREE in case the
+dnl user is interested in knowing if they can use the atomic ops across
+dnl processes.
+dnl
+dnl We can currently support the atomic ops natively when building GLib
+dnl with recent versions of GCC or MSVC.  MSVC doesn't run ./configure,
+dnl so we skip that case here and define G_ATOMIC_LOCK_FREE exactly when
+dnl we are using GCC.
+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.
+
+dnl We may add other compilers here in the future...
+AC_MSG_CHECKING([for lock-free atomic intrinsics])
+AC_TRY_COMPILE([],
+               [__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4;],
+               [glib_cv_g_atomic_lock_free=yes],
+               [glib_cv_g_atomic_lock_free=no])
+AC_MSG_RESULT($glib_cv_g_atomic_lock_free)
+
+if test "$glib_cv_g_atomic_lock_free" = "no"; then
+  SAVE_CFLAGS="${CFLAGS}"
+  CFLAGS="-march=i486"
+  AC_TRY_COMPILE([],
+                 [__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4;],
+                 [AC_MSG_ERROR([GLib must be build with -march=i486 or later.])],
+                 [])
+  CFLAGS="${SAVE_CFLAGS}"
+fi
+
+dnl We need a more robust approach here...
+case $host_cpu in
+  i?86|x86_64|s390|s390x|arm*|crisv32*|etrax*)
+    glib_memory_barrier_needed=no
+    ;;
+  sparc*|alpha*|powerpc*|ia64)
+    glib_memory_barrier_needed=yes
+    ;;
+  *)
+    glib_memory_barrier_needed=yes
+    ;;
+esac
 
 dnl ************************
 dnl ** Check for futex(2) **
@@ -3106,27 +3104,13 @@ _______EOF
 #define G_THREADS_IMPL_$g_threads_impl_def
 _______EOF
 
-       cat >>$outfile <<_______EOF
-/* This represents a system thread as used by the implementation. An
- * alien implementaion, as loaded by g_thread_init can only count on
- * "sizeof (gpointer)" bytes to store their info. We however need more
- * for some of our native implementations. */
-typedef union _GSystemThread GSystemThread;
-union _GSystemThread
-{
-  char   data[[$g_system_thread_sizeof]];
-  double dummy_double;
-  void  *dummy_pointer;
-  long   dummy_long;
-};
-_______EOF
        if test x"$g_memory_barrier_needed" != xno; then
          echo >>$outfile
          echo "#define G_ATOMIC_OP_MEMORY_BARRIER_NEEDED 1" >>$outfile
        fi
-       if test x"$g_gcc_atomic_ops" != xno; then
+       if test x"$g_atomic_lock_free" = xyes; then
           echo >>$outfile
-          echo "#define G_ATOMIC_OP_USE_GCC_BUILTINS 1" >>$outfile
+          echo "#define G_ATOMIC_LOCK_FREE" >>$outfile
         fi
        echo >>$outfile
        g_bit_sizes="16 32 64"
@@ -3495,6 +3479,7 @@ g_threads_impl_def=$g_threads_impl
 
 g_system_thread_sizeof="$glib_cv_sizeof_system_thread"
 
+g_atomic_lock_free="$glib_cv_g_atomic_lock_free"
 g_memory_barrier_needed="$glib_memory_barrier_needed"
 g_gcc_atomic_ops="$glib_cv_gcc_has_builtin_atomic_operations"
 
@@ -3601,21 +3586,14 @@ AC_SUBST(gio_INCLUDES)
 
 AC_CONFIG_FILES([
 glib-2.0.pc
-glib-2.0-uninstalled.pc
 gmodule-2.0.pc
 gmodule-export-2.0.pc
 gmodule-no-export-2.0.pc
-gmodule-2.0-uninstalled.pc
-gmodule-no-export-2.0-uninstalled.pc
 gthread-2.0.pc
-gthread-2.0-uninstalled.pc
 gobject-2.0.pc
-gobject-2.0-uninstalled.pc
 gio-2.0.pc
 gio-unix-2.0.pc
 gio-windows-2.0.pc
-gio-2.0-uninstalled.pc
-gio-unix-2.0-uninstalled.pc
 glib-zip
 glib-gettextize
 Makefile
@@ -3638,7 +3616,6 @@ gobject/gobject.stp
 gobject/glib-mkenums
 gobject/tests/Makefile
 gthread/Makefile
-gthread/tests/Makefile
 gio/Makefile
 gio/gdbus-2.0/codegen/Makefile
 gio/gdbus-2.0/codegen/config.py