bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

support for universal binaries on MacOS X (6/6)


From: Bruno Haible
Subject: support for universal binaries on MacOS X (6/6)
Date: Thu, 25 Dec 2008 20:30:38 +0100
User-agent: KMail/1.9.9

Jim,

The nanosleep test is similar. Here is a proposed patch. (Most of the patch
is adding indentation.)

2008-12-25  Bruno Haible  <address@hidden>

        * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Require gl_MULTIARCH. In Apple
        universal builds, assume that nanosleep does not work.
        * modules/nanosleep (Depends-on): Add multiarch.

--- m4/nanosleep.m4.orig        2008-12-25 20:26:15.000000000 +0100
+++ m4/nanosleep.m4     2008-12-25 19:09:40.000000000 +0100
@@ -1,4 +1,4 @@
-#serial 25
+#serial 26
 
 dnl From Jim Meyering.
 dnl Check for the nanosleep function.
@@ -17,6 +17,8 @@
  dnl Persuade glibc and Solaris <time.h> to declare nanosleep.
  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
 
+ AC_REQUIRE([gl_MULTIARCH])
+
  AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS])
  AC_REQUIRE([gl_CLOCK_TIME])
  AC_CHECK_HEADERS_ONCE(sys/time.h)
@@ -32,59 +34,67 @@
  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))))
-
-       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;
-       }]])],
-     [gl_cv_func_nanosleep=yes],
-     [case $? in dnl (
-      119) gl_cv_func_nanosleep='no (mishandles large arguments)';; dnl (
-      *)   gl_cv_func_nanosleep=no;;
-      esac],
-     [gl_cv_func_nanosleep=cross-compiling])
+   if test $APPLE_UNIVERSAL_BUILD = 0; then
+     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))))
+
+         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;
+         }]])],
+       [gl_cv_func_nanosleep=yes],
+       [case $? in dnl (
+       119) gl_cv_func_nanosleep='no (mishandles large arguments)';; dnl (
+       *)   gl_cv_func_nanosleep=no;;
+       esac],
+       [gl_cv_func_nanosleep=cross-compiling])
+   else
+     # 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
   ])
   if test "$gl_cv_func_nanosleep" = yes; then
     REPLACE_NANOSLEEP=0
--- modules/nanosleep.orig      2008-12-25 20:26:15.000000000 +0100
+++ modules/nanosleep   2008-12-25 19:05:53.000000000 +0100
@@ -9,6 +9,7 @@
 clock-time
 extensions
 gettime
+multiarch
 sigaction
 stdbool
 sys_select





reply via email to

[Prev in Thread] Current Thread [Next in Thread]