Blame m4/strtoimax.m4

Packit 709fb3
# strtoimax.m4 serial 14
Packit 709fb3
dnl Copyright (C) 2002-2004, 2006, 2009-2017 Free Software Foundation, Inc.
Packit 709fb3
dnl This file is free software; the Free Software Foundation
Packit 709fb3
dnl gives unlimited permission to copy and/or distribute it,
Packit 709fb3
dnl with or without modifications, as long as this notice is preserved.
Packit 709fb3
Packit 709fb3
AC_DEFUN([gl_FUNC_STRTOIMAX],
Packit 709fb3
[
Packit 709fb3
  AC_REQUIRE([gl_INTTYPES_H_DEFAULTS])
Packit 709fb3
Packit 709fb3
  dnl On OSF/1 5.1 with cc, this function is declared but not defined.
Packit 709fb3
  AC_CHECK_FUNCS_ONCE([strtoimax])
Packit 709fb3
  AC_CHECK_DECLS_ONCE([strtoimax])
Packit 709fb3
  if test "$ac_cv_have_decl_strtoimax" != yes; then
Packit 709fb3
    HAVE_DECL_STRTOIMAX=0
Packit 709fb3
  fi
Packit 709fb3
Packit 709fb3
  if test "$ac_cv_func_strtoimax" = yes; then
Packit 709fb3
    HAVE_STRTOIMAX=1
Packit 709fb3
    dnl On AIX 5.1, strtoimax() fails for values outside the 'int' range.
Packit 709fb3
    AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
Packit 709fb3
    AC_CACHE_CHECK([whether strtoimax works], [gl_cv_func_strtoimax],
Packit 709fb3
      [AC_RUN_IFELSE(
Packit 709fb3
         [AC_LANG_SOURCE([[
Packit 709fb3
#include <errno.h>
Packit 709fb3
#include <string.h>
Packit 709fb3
#include <inttypes.h>
Packit 709fb3
int main ()
Packit 709fb3
{
Packit 709fb3
  if (sizeof (intmax_t) > sizeof (int))
Packit 709fb3
    {
Packit 709fb3
      const char *s = "4294967295";
Packit 709fb3
      char *p;
Packit 709fb3
      intmax_t res;
Packit 709fb3
      errno = 0;
Packit 709fb3
      res = strtoimax (s, &p, 10);
Packit 709fb3
      if (p != s + strlen (s))
Packit 709fb3
        return 1;
Packit 709fb3
      if (errno != 0)
Packit 709fb3
        return 2;
Packit 709fb3
      if (res != (intmax_t) 65535 * (intmax_t) 65537)
Packit 709fb3
        return 3;
Packit 709fb3
    }
Packit 709fb3
  else
Packit 709fb3
    {
Packit 709fb3
      const char *s = "2147483647";
Packit 709fb3
      char *p;
Packit 709fb3
      intmax_t res;
Packit 709fb3
      errno = 0;
Packit 709fb3
      res = strtoimax (s, &p, 10);
Packit 709fb3
      if (p != s + strlen (s))
Packit 709fb3
        return 1;
Packit 709fb3
      if (errno != 0)
Packit 709fb3
        return 2;
Packit 709fb3
      if (res != 2147483647)
Packit 709fb3
        return 3;
Packit 709fb3
    }
Packit 709fb3
  return 0;
Packit 709fb3
}
Packit 709fb3
]])],
Packit 709fb3
         [gl_cv_func_strtoimax=yes],
Packit 709fb3
         [gl_cv_func_strtoimax=no],
Packit 709fb3
         [case "$host_os" in
Packit 709fb3
                   # Guess no on AIX 5.
Packit 709fb3
            aix5*) gl_cv_func_strtoimax="guessing no" ;;
Packit 709fb3
                   # Guess yes otherwise.
Packit 709fb3
            *)     gl_cv_func_strtoimax="guessing yes" ;;
Packit 709fb3
          esac
Packit 709fb3
         ])
Packit 709fb3
      ])
Packit 709fb3
    case "$gl_cv_func_strtoimax" in
Packit 709fb3
      *no) REPLACE_STRTOIMAX=1 ;;
Packit 709fb3
    esac
Packit 709fb3
  else
Packit 709fb3
    if test "$ac_cv_have_decl_strtoimax" = yes; then
Packit 709fb3
      # HP-UX 11.11 has "#define strtoimax(...) ..." but no function.
Packit 709fb3
      REPLACE_STRTOIMAX=1
Packit 709fb3
    fi
Packit 709fb3
    HAVE_STRTOIMAX=0
Packit 709fb3
  fi
Packit 709fb3
])
Packit 709fb3
Packit 709fb3
# Prerequisites of lib/strtoimax.c.
Packit 709fb3
AC_DEFUN([gl_PREREQ_STRTOIMAX], [
Packit 709fb3
  AC_CHECK_DECLS([strtoll])
Packit 709fb3
  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
Packit 709fb3
])