| # sleep.m4 serial 7 |
| dnl Copyright (C) 2007-2013 Free Software Foundation, Inc. |
| dnl This file is free software; the Free Software Foundation |
| dnl gives unlimited permission to copy and/or distribute it, |
| dnl with or without modifications, as long as this notice is preserved. |
| |
| AC_DEFUN([gl_FUNC_SLEEP], |
| [ |
| AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) |
| AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles |
| dnl We expect to see the declaration of sleep() in a header file. |
| dnl Older versions of mingw have a sleep() function that is an alias to |
| dnl _sleep() in MSVCRT. It has a different signature than POSIX sleep(): |
| dnl it takes the number of milliseconds as argument and returns void. |
| dnl mingw does not declare this function. |
| AC_CHECK_DECLS([sleep], , , [[#include <unistd.h>]]) |
| AC_CHECK_FUNCS_ONCE([sleep]) |
| if test $ac_cv_have_decl_sleep != yes; then |
| HAVE_SLEEP=0 |
| else |
| dnl Cygwin 1.5.x has a bug where sleep can't exceed 49.7 days. |
| AC_CACHE_CHECK([for working sleep], [gl_cv_func_sleep_works], |
| [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ |
| #include <errno.h> |
| #include <unistd.h> |
| #include <signal.h> |
| static void |
| handle_alarm (int sig) |
| { |
| if (sig != SIGALRM) |
| _exit (2); |
| } |
| ]], [[ |
| /* Failure to compile this test due to missing alarm is okay, |
| since all such platforms (mingw) also lack sleep. */ |
| unsigned int pentecost = 50 * 24 * 60 * 60; /* 50 days. */ |
| unsigned int remaining; |
| signal (SIGALRM, handle_alarm); |
| alarm (1); |
| remaining = sleep (pentecost); |
| if (remaining > pentecost) |
| return 3; |
| if (remaining <= pentecost - 10) |
| return 4; |
| return 0; |
| ]])], |
| [gl_cv_func_sleep_works=yes], [gl_cv_func_sleep_works=no], |
| [case "$host_os" in |
| # Guess yes on glibc systems. |
| *-gnu*) gl_cv_func_sleep_works="guessing yes" ;; |
| # If we don't know, assume the worst. |
| *) gl_cv_func_sleep_works="guessing no" ;; |
| esac |
| ])]) |
| case "$gl_cv_func_sleep_works" in |
| *yes) ;; |
| *) |
| REPLACE_SLEEP=1 |
| ;; |
| esac |
| fi |
| ]) |