stpncpy: Fix C++ test error on mingw.
[gnulib.git] / m4 / nanosleep.m4
index d5248a7..a633321 100644 (file)
@@ -1,12 +1,11 @@
-#serial 25
+# serial 30
 
 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, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1999-2001, 2003-2010 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -18,67 +17,78 @@ AC_DEFUN([gl_FUNC_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])
+ AC_REQUIRE([gl_FUNC_SELECT])
 
  nanosleep_save_libs=$LIBS
 
  # Solaris 2.5.1 needs -lposix4 to get the nanosleep function.
  # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4.
+ LIB_NANOSLEEP=
+ AC_SUBST([LIB_NANOSLEEP])
  AC_SEARCH_LIBS([nanosleep], [rt posix4],
                 [test "$ac_cv_search_nanosleep" = "none required" ||
-                LIB_NANOSLEEP=$ac_cv_search_nanosleep])
+                 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],
   [
    AC_RUN_IFELSE(
      [AC_LANG_SOURCE([[
-       #include <errno.h>
-       #include <limits.h>
-       #include <signal.h>
-       #if HAVE_SYS_TIME_H
-        #include <sys/time.h>
-       #endif
-       #include <time.h>
-       #include <unistd.h>
-       #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
-       #define TYPE_MAXIMUM(t) \
-         ((t) (! TYPE_SIGNED (t) \
-               ? (t) -1 \
-               : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
+        #include <errno.h>
+        #include <limits.h>
+        #include <signal.h>
+        #if HAVE_SYS_TIME_H
+         #include <sys/time.h>
+        #endif
+        #include <time.h>
+        #include <unistd.h>
+        #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
+        #define TYPE_MAXIMUM(t) \
+          ((t) (! TYPE_SIGNED (t) \
+                ? (t) -1 \
+                : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
 
-       static void
-       check_for_SIGALRM (int sig)
-       {
-         if (sig != SIGALRM)
-           _exit (1);
-       }
+        static void
+        check_for_SIGALRM (int sig)
+        {
+          if (sig != SIGALRM)
+            _exit (1);
+        }
 
-       int
-       main ()
-       {
-         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);
-         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);
-         if (nanosleep (&ts_sleep, &ts_remaining) == -1 && errno == EINTR
-             && TYPE_MAXIMUM (time_t) - 10 < ts_remaining.tv_sec)
-           return 0;
-         return 119;
-       }]])],
+        int
+        main ()
+        {
+          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);
+          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);
+          if (nanosleep (&ts_sleep, &ts_remaining) == -1 && errno == EINTR
+              && TYPE_MAXIMUM (time_t) - 10 < ts_remaining.tv_sec)
+            return 0;
+          return 119;
+        }]])],
      [gl_cv_func_nanosleep=yes],
      [case $? in dnl (
       119) gl_cv_func_nanosleep='no (mishandles large arguments)';; dnl (
@@ -91,26 +101,26 @@ AC_DEFUN([gl_FUNC_NANOSLEEP],
   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 mishandles large arguments.])
-      for ac_lib in $LIB_CLOCK_GETTIME; do
-       case " $LIB_NANOSLEEP " in
-       *" $ac_lib "*) ;;
-       *) LIB_NANOSLEEP="$LIB_NANOSLEEP $ac_lib";;
-       esac
+      AC_DEFINE([HAVE_BUG_BIG_NANOSLEEP], [1],
+        [Define to 1 if nanosleep mishandles large arguments.])
+    else
+      for ac_lib in $LIBSOCKET; do
+        case " $LIB_NANOSLEEP " in
+        *" $ac_lib "*) ;;
+        *) LIB_NANOSLEEP="$LIB_NANOSLEEP $ac_lib";;
+        esac
       done
     fi
-    AC_LIBOBJ(nanosleep)
+    AC_LIBOBJ([nanosleep])
     gl_PREREQ_NANOSLEEP
   fi
 
- AC_SUBST([LIB_NANOSLEEP])
  LIBS=$nanosleep_save_libs
 ])
 
 # Prerequisites of lib/nanosleep.c.
 AC_DEFUN([gl_PREREQ_NANOSLEEP],
 [
-  AC_CHECK_HEADERS_ONCE(sys/select.h)
+  AC_CHECK_HEADERS_ONCE([sys/select.h])
   gl_PREREQ_SIG_HANDLER_H
 ])