fpurge: fix previous commits
[gnulib.git] / m4 / nanosleep.m4
index d25295e..7f08744 100644 (file)
@@ -1,12 +1,11 @@
-#serial 20
+# serial 27
 
 dnl From Jim Meyering.
 dnl Check for the nanosleep function.
 dnl If not found, use the supplied replacement.
 dnl
 
-# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 Free
-# Software Foundation, Inc.
+# Copyright (C) 1999-2001, 2003-2009 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -17,8 +16,9 @@ AC_DEFUN([gl_FUNC_NANOSLEEP],
  dnl Persuade glibc and Solaris <time.h> to declare nanosleep.
  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
 
+ AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS])
  AC_REQUIRE([gl_CLOCK_TIME])
- AC_CHECK_HEADERS_ONCE(sys/time.h)
+ AC_CHECK_HEADERS_ONCE([sys/time.h])
 
  nanosleep_save_libs=$LIBS
 
@@ -28,6 +28,15 @@ AC_DEFUN([gl_FUNC_NANOSLEEP],
                 [test "$ac_cv_search_nanosleep" = "none required" ||
                 LIB_NANOSLEEP=$ac_cv_search_nanosleep])
 
+ AC_REQUIRE([gl_MULTIARCH])
+ if test $APPLE_UNIVERSAL_BUILD = 1; then
+   # A universal build on Apple MacOS X platforms.
+   # The test result would be 'no (mishandles large arguments)' in 64-bit mode
+   # but 'yes' in 32-bit mode. But we need a configuration result that is
+   # valid in both modes.
+   gl_cv_func_nanosleep='no (mishandles large arguments)'
+ fi
+
  AC_CACHE_CHECK([for working nanosleep],
   [gl_cv_func_nanosleep],
   [
@@ -60,9 +69,16 @@ AC_DEFUN([gl_FUNC_NANOSLEEP],
          static struct timespec ts_sleep;
          static struct timespec ts_remaining;
          static struct sigaction act;
+         if (! nanosleep)
+           return 1;
          act.sa_handler = check_for_SIGALRM;
-          sigemptyset (&act.sa_mask);
+         sigemptyset (&act.sa_mask);
          sigaction (SIGALRM, &act, NULL);
+         ts_sleep.tv_sec = 0;
+         ts_sleep.tv_nsec = 1;
+         alarm (1);
+         if (nanosleep (&ts_sleep, NULL) != 0)
+           return 1;
          ts_sleep.tv_sec = TYPE_MAXIMUM (time_t);
          ts_sleep.tv_nsec = 999999999;
          alarm (1);
@@ -78,10 +94,13 @@ AC_DEFUN([gl_FUNC_NANOSLEEP],
       esac],
      [gl_cv_func_nanosleep=cross-compiling])
   ])
-  if test "$gl_cv_func_nanosleep" != yes; then
+  if test "$gl_cv_func_nanosleep" = yes; then
+    REPLACE_NANOSLEEP=0
+  else
+    REPLACE_NANOSLEEP=1
     if test "$gl_cv_func_nanosleep" = 'no (mishandles large arguments)'; then
-      AC_DEFINE([HAVE_BUG_BIG_NANOSLEEP], 1,
-       [Define to 1 if nanosleep mishandle large arguments.])
+      AC_DEFINE([HAVE_BUG_BIG_NANOSLEEP], [1],
+       [Define to 1 if nanosleep mishandles large arguments.])
       for ac_lib in $LIB_CLOCK_GETTIME; do
        case " $LIB_NANOSLEEP " in
        *" $ac_lib "*) ;;
@@ -89,9 +108,7 @@ AC_DEFUN([gl_FUNC_NANOSLEEP],
        esac
       done
     fi
-    AC_LIBOBJ(nanosleep)
-    AC_DEFINE(nanosleep, rpl_nanosleep,
-      [Define to rpl_nanosleep if the replacement function should be used.])
+    AC_LIBOBJ([nanosleep])
     gl_PREREQ_NANOSLEEP
   fi
 
@@ -102,6 +119,6 @@ AC_DEFUN([gl_FUNC_NANOSLEEP],
 # Prerequisites of lib/nanosleep.c.
 AC_DEFUN([gl_PREREQ_NANOSLEEP],
 [
-  AC_CHECK_FUNCS_ONCE(siginterrupt)
-  AC_CHECK_HEADERS_ONCE(sys/select.h)
+  AC_CHECK_HEADERS_ONCE([sys/select.h])
+  gl_PREREQ_SIG_HANDLER_H
 ])