[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
cross-compilation guesses (15)
From: |
Bruno Haible |
Subject: |
cross-compilation guesses (15) |
Date: |
Sat, 05 May 2012 12:59:06 +0200 |
User-agent: |
KMail/4.7.4 (Linux/3.1.10-1.9-desktop; KDE/4.7.4; x86_64; ; ) |
Another suboptimal cross-compilation guess is
checking for working nanosleep... cross-compiling
This test has 3 possible results:
- "yes", it works, no override needed.
- "no (mishandles large arguments)", means it works halfway, the
override in lib/nanosleep.c can use the system's nanosleep().
- "no", means it is completely unusable, the override in lib/nanosleep.c
must use other system calls.
The result 'cross-compiling' is treated like 'no', which is suboptimal.
This patch improves it.
2012-05-05 Bruno Haible <address@hidden>
nanosleep: Avoid guessing wrong when cross-compiling to Linux.
* m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Require AC_CANONICAL_HOST. When
cross-compiling, set gl_cv_func_nanosleep to either 'guessing no'
or 'guessing no (mishandles large arguments)'.
diff --git a/m4/nanosleep.m4 b/m4/nanosleep.m4
index 8c66940..51efa18 100644
--- a/m4/nanosleep.m4
+++ b/m4/nanosleep.m4
@@ -1,4 +1,4 @@
-# serial 34
+# serial 35
dnl From Jim Meyering.
dnl Check for the nanosleep function.
@@ -13,10 +13,12 @@ dnl
AC_DEFUN([gl_FUNC_NANOSLEEP],
[
+ AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
dnl Persuade glibc and Solaris <time.h> to declare nanosleep.
AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
- AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS])
AC_CHECK_HEADERS_ONCE([sys/time.h])
AC_REQUIRE([gl_FUNC_SELECT])
@@ -73,6 +75,7 @@ AC_DEFUN([gl_FUNC_NANOSLEEP],
static struct timespec ts_sleep;
static struct timespec ts_remaining;
static struct sigaction act;
+ /* Test for major problems first. */
if (! nanosleep)
return 2;
act.sa_handler = check_for_SIGALRM;
@@ -83,6 +86,7 @@ AC_DEFUN([gl_FUNC_NANOSLEEP],
alarm (1);
if (nanosleep (&ts_sleep, NULL) != 0)
return 3;
+ /* Test for a minor problem: the handling of large arguments. */
ts_sleep.tv_sec = TYPE_MAXIMUM (time_t);
ts_sleep.tv_nsec = 999999999;
alarm (1);
@@ -99,24 +103,37 @@ AC_DEFUN([gl_FUNC_NANOSLEEP],
4|5|6) gl_cv_func_nanosleep='no (mishandles large arguments)';; dnl (
*) gl_cv_func_nanosleep=no;;
esac],
- [gl_cv_func_nanosleep=cross-compiling])
+ [case "$host_os" in dnl ((
+ linux*) # Guess it halfway works on when the kernel is Linux.
+ gl_cv_func_nanosleep='guessing no (mishandles large arguments)' ;;
+ *) # If we don't know, assume the worst.
+ gl_cv_func_nanosleep='guessing no' ;;
+ esac
+ ])
])
- if test "$gl_cv_func_nanosleep" = yes; then
+ case "$gl_cv_func_nanosleep" in
+ *yes)
REPLACE_NANOSLEEP=0
- else
+ ;;
+ *)
REPLACE_NANOSLEEP=1
- if test "$gl_cv_func_nanosleep" = 'no (mishandles large arguments)'; then
+ case "$gl_cv_func_nanosleep" in
+ *"mishandles large arguments"*)
AC_DEFINE([HAVE_BUG_BIG_NANOSLEEP], [1],
[Define to 1 if nanosleep mishandles large arguments.])
- else
+ ;;
+ *)
+ # The replacement uses select(). Add $LIBSOCKET to $LIB_NANOSLEEP.
for ac_lib in $LIBSOCKET; do
case " $LIB_NANOSLEEP " in
*" $ac_lib "*) ;;
*) LIB_NANOSLEEP="$LIB_NANOSLEEP $ac_lib";;
esac
done
- fi
- fi
+ ;;
+ esac
+ ;;
+ esac
else
HAVE_NANOSLEEP=0
fi
- Re: cross-compilation guesses (9), (continued)
- cross-compilation guesses (10), Bruno Haible, 2012/05/01
- cross-compilation guesses (11), Bruno Haible, 2012/05/05
- cross-compilation guesses (12), Bruno Haible, 2012/05/05
- cross-compilation guesses (13), Bruno Haible, 2012/05/05
- cross-compilation guesses (14), Bruno Haible, 2012/05/05
- cross-compilation guesses (15),
Bruno Haible <=