strtoimax.m4 2.31 KB
Newer Older
1
# strtoimax.m4 serial 14
Paul Eggert's avatar
Paul Eggert committed
2
dnl Copyright (C) 2002-2004, 2006, 2009-2016 Free Software Foundation, Inc.
3 4 5
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.
6 7 8

AC_DEFUN([gl_FUNC_STRTOIMAX],
[
9 10
  AC_REQUIRE([gl_INTTYPES_H_DEFAULTS])

11 12
  dnl On OSF/1 5.1 with cc, this function is declared but not defined.
  AC_CHECK_FUNCS_ONCE([strtoimax])
13 14 15
  AC_CHECK_DECLS_ONCE([strtoimax])
  if test "$ac_cv_have_decl_strtoimax" != yes; then
    HAVE_DECL_STRTOIMAX=0
16
  fi
17

18
  if test "$ac_cv_func_strtoimax" = yes; then
19 20 21 22 23 24 25 26
    HAVE_STRTOIMAX=1
    dnl On AIX 5.1, strtoimax() fails for values outside the 'int' range.
    AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
    AC_CACHE_CHECK([whether strtoimax works], [gl_cv_func_strtoimax],
      [AC_RUN_IFELSE(
         [AC_LANG_SOURCE([[
#include <errno.h>
#include <string.h>
27
#include <inttypes.h>
28 29
int main ()
{
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
  if (sizeof (intmax_t) > sizeof (int))
    {
      const char *s = "4294967295";
      char *p;
      intmax_t res;
      errno = 0;
      res = strtoimax (s, &p, 10);
      if (p != s + strlen (s))
        return 1;
      if (errno != 0)
        return 2;
      if (res != (intmax_t) 65535 * (intmax_t) 65537)
        return 3;
    }
  else
    {
      const char *s = "2147483647";
      char *p;
      intmax_t res;
      errno = 0;
      res = strtoimax (s, &p, 10);
      if (p != s + strlen (s))
        return 1;
      if (errno != 0)
        return 2;
      if (res != 2147483647)
        return 3;
    }
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
  return 0;
}
]])],
         [gl_cv_func_strtoimax=yes],
         [gl_cv_func_strtoimax=no],
         [case "$host_os" in
                   # Guess no on AIX 5.
            aix5*) gl_cv_func_strtoimax="guessing no" ;;
                   # Guess yes otherwise.
            *)     gl_cv_func_strtoimax="guessing yes" ;;
          esac
         ])
      ])
    case "$gl_cv_func_strtoimax" in
      *no) REPLACE_STRTOIMAX=1 ;;
    esac
  else
75 76 77 78
    if test "$ac_cv_have_decl_strtoimax" = yes; then
      # HP-UX 11.11 has "#define strtoimax(...) ..." but no function.
      REPLACE_STRTOIMAX=1
    fi
79 80
    HAVE_STRTOIMAX=0
  fi
81 82 83 84
])

# Prerequisites of lib/strtoimax.c.
AC_DEFUN([gl_PREREQ_STRTOIMAX], [
85
  AC_CHECK_DECLS([strtoll])
86
  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
87
])