Jim, The nanosleep test is similar. Here is a proposed patch. (Most of the patch is adding indentation.)
2008-12-25 Bruno Haible <br...@clisp.org> * 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