"Fossies" - the Fresh Open Source Software Archive

Member "gnuastro-0.8/bootstrapped/m4/nanosleep.m4" (28 Dec 2018, 5126 Bytes) of package /linux/privat/gnuastro-0.8.tar.lz:


As a special service "Fossies" has tried to format the requested text file into HTML format (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file. See also the last Fossies "Diffs" side-by-side code changes report for "nanosleep.m4": 0.5_vs_0.6.

    1 # serial 38
    2 
    3 dnl From Jim Meyering.
    4 dnl Check for the nanosleep function.
    5 dnl If not found, use the supplied replacement.
    6 dnl
    7 
    8 # Copyright (C) 1999-2001, 2003-2018 Free Software Foundation, Inc.
    9 
   10 # This file is free software; the Free Software Foundation
   11 # gives unlimited permission to copy and/or distribute it,
   12 # with or without modifications, as long as this notice is preserved.
   13 
   14 AC_DEFUN([gl_FUNC_NANOSLEEP],
   15 [
   16  AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS])
   17  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
   18 
   19  dnl Persuade glibc and Solaris <time.h> to declare nanosleep.
   20  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
   21 
   22  AC_CHECK_HEADERS_ONCE([sys/time.h])
   23  AC_REQUIRE([gl_FUNC_SELECT])
   24 
   25  AC_CHECK_DECLS_ONCE([alarm])
   26 
   27  nanosleep_save_libs=$LIBS
   28 
   29  # Solaris 2.5.1 needs -lposix4 to get the nanosleep function.
   30  # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4.
   31  LIB_NANOSLEEP=
   32  AC_SUBST([LIB_NANOSLEEP])
   33  AC_SEARCH_LIBS([nanosleep], [rt posix4],
   34                 [test "$ac_cv_search_nanosleep" = "none required" ||
   35                  LIB_NANOSLEEP=$ac_cv_search_nanosleep])
   36  if test "x$ac_cv_search_nanosleep" != xno; then
   37    dnl The system has a nanosleep function.
   38 
   39    AC_REQUIRE([gl_MULTIARCH])
   40    if test $APPLE_UNIVERSAL_BUILD = 1; then
   41      # A universal build on Apple Mac OS X platforms.
   42      # The test result would be 'no (mishandles large arguments)' in 64-bit
   43      # mode but 'yes' in 32-bit mode. But we need a configuration result that
   44      # is valid in both modes.
   45      gl_cv_func_nanosleep='no (mishandles large arguments)'
   46    fi
   47 
   48    AC_CACHE_CHECK([for working nanosleep],
   49     [gl_cv_func_nanosleep],
   50     [
   51      AC_RUN_IFELSE(
   52        [AC_LANG_SOURCE([[
   53           #include <errno.h>
   54           #include <limits.h>
   55           #include <signal.h>
   56           #if HAVE_SYS_TIME_H
   57            #include <sys/time.h>
   58           #endif
   59           #include <time.h>
   60           #include <unistd.h>
   61           #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
   62           #define TYPE_MAXIMUM(t) \
   63             ((t) (! TYPE_SIGNED (t) \
   64                   ? (t) -1 \
   65                   : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
   66 
   67           #if HAVE_DECL_ALARM
   68           static void
   69           check_for_SIGALRM (int sig)
   70           {
   71             if (sig != SIGALRM)
   72               _exit (1);
   73           }
   74           #endif
   75 
   76           int
   77           main ()
   78           {
   79             static struct timespec ts_sleep;
   80             static struct timespec ts_remaining;
   81             /* Test for major problems first.  */
   82             if (! nanosleep)
   83               return 2;
   84             ts_sleep.tv_sec = 0;
   85             ts_sleep.tv_nsec = 1;
   86             #if HAVE_DECL_ALARM
   87             {
   88               static struct sigaction act;
   89               act.sa_handler = check_for_SIGALRM;
   90               sigemptyset (&act.sa_mask);
   91               sigaction (SIGALRM, &act, NULL);
   92               alarm (1);
   93               if (nanosleep (&ts_sleep, NULL) != 0)
   94                 return 3;
   95               /* Test for a minor problem: the handling of large arguments.  */
   96               ts_sleep.tv_sec = TYPE_MAXIMUM (time_t);
   97               ts_sleep.tv_nsec = 999999999;
   98               alarm (1);
   99               if (nanosleep (&ts_sleep, &ts_remaining) != -1)
  100                 return 4;
  101               if (errno != EINTR)
  102                 return 5;
  103               if (ts_remaining.tv_sec <= TYPE_MAXIMUM (time_t) - 10)
  104                 return 6;
  105             }
  106             #else /* A simpler test for native Windows.  */
  107             if (nanosleep (&ts_sleep, &ts_remaining) < 0)
  108               return 3;
  109             #endif
  110             return 0;
  111           }]])],
  112        [gl_cv_func_nanosleep=yes],
  113        [case $? in dnl (
  114         4|5|6) gl_cv_func_nanosleep='no (mishandles large arguments)';; dnl (
  115         *)   gl_cv_func_nanosleep=no;;
  116         esac],
  117        [case "$host_os" in dnl ((
  118           linux*) # Guess it halfway works when the kernel is Linux.
  119             gl_cv_func_nanosleep='guessing no (mishandles large arguments)' ;;
  120           mingw*) # Guess no on native Windows.
  121             gl_cv_func_nanosleep='guessing no' ;;
  122           *)      # If we don't know, assume the worst.
  123             gl_cv_func_nanosleep='guessing no' ;;
  124         esac
  125        ])
  126     ])
  127    case "$gl_cv_func_nanosleep" in
  128      *yes)
  129        REPLACE_NANOSLEEP=0
  130        ;;
  131      *)
  132        REPLACE_NANOSLEEP=1
  133        case "$gl_cv_func_nanosleep" in
  134          *"mishandles large arguments"*)
  135            AC_DEFINE([HAVE_BUG_BIG_NANOSLEEP], [1],
  136              [Define to 1 if nanosleep mishandles large arguments.])
  137            ;;
  138          *)
  139            # The replacement uses select(). Add $LIBSOCKET to $LIB_NANOSLEEP.
  140            for ac_lib in $LIBSOCKET; do
  141              case " $LIB_NANOSLEEP " in
  142                *" $ac_lib "*) ;;
  143                *) LIB_NANOSLEEP="$LIB_NANOSLEEP $ac_lib";;
  144              esac
  145            done
  146            ;;
  147        esac
  148        ;;
  149    esac
  150  else
  151    HAVE_NANOSLEEP=0
  152  fi
  153  LIBS=$nanosleep_save_libs
  154 ])
  155 
  156 # Prerequisites of lib/nanosleep.c.
  157 AC_DEFUN([gl_PREREQ_NANOSLEEP],
  158 [
  159   AC_CHECK_HEADERS_ONCE([sys/select.h])
  160   gl_PREREQ_SIG_HANDLER_H
  161 ])