strtoimax, strtoumax: port to HP-UX 11.11
[gnulib.git] / m4 / strtoimax.m4
index b4e2d40..20454dc 100644 (file)
@@ -1,5 +1,5 @@
-# strtoimax.m4 serial 12
-dnl Copyright (C) 2002-2004, 2006, 2009-2012 Free Software Foundation, Inc.
+# strtoimax.m4 serial 14
+dnl Copyright (C) 2002-2004, 2006, 2009-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.
@@ -15,38 +15,46 @@ AC_DEFUN([gl_FUNC_STRTOIMAX],
     HAVE_DECL_STRTOIMAX=0
   fi
 
-  if test $ac_cv_func_strtoimax = yes; then
+  if test "$ac_cv_func_strtoimax" = yes; then
     HAVE_STRTOIMAX=1
     dnl On AIX 5.1, strtoimax() fails for values outside the 'int' range.
-    AC_REQUIRE([gl_AC_HEADER_STDINT_H])
-    AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
     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 <stdio.h>
 #include <string.h>
-#include <sys/types.h>
-#if HAVE_STDINT_H_WITH_UINTMAX
-# include <stdint.h>
-#endif
-#if HAVE_INTTYPES_H_WITH_UINTMAX
-# include <inttypes.h>
-#endif
+#include <inttypes.h>
 int main ()
 {
-  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;
+  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;
+    }
   return 0;
 }
 ]])],
@@ -64,6 +72,10 @@ int main ()
       *no) REPLACE_STRTOIMAX=1 ;;
     esac
   else
+    if test "$ac_cv_have_decl_strtoimax" = yes; then
+      # HP-UX 11.11 has "#define strtoimax(...) ..." but no function.
+      REPLACE_STRTOIMAX=1
+    fi
     HAVE_STRTOIMAX=0
   fi
 ])