]> git.ipfire.org Git - thirdparty/autoconf.git/commitdiff
autoconf: tune long long tests, particularly for c99
authorPaul Eggert <eggert@cs.ucla.edu>
Wed, 16 Feb 2011 09:29:40 +0000 (01:29 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Wed, 16 Feb 2011 09:29:51 +0000 (01:29 -0800)
This change is imported from gnulib.
* lib/autoconf/types.m4 (AC_TYPE_LONG_LONG_INT): Don't bother compiling
or running anything if c99, or if unsigned long long int does not
work.  In either case, we know the answer without further tests.
Do not compile _AC_TYPE_LONG_LONG_SNIPPET twice.  Instead, compile
it at most once, and use its results for both long long int and
unsigned long long int.  This is more likely to be efficient in
the common case where the program wants to check for both long
long int and unsigned long long int.
(AC_TYPE_UNSIGNED_LONG_LONG_INT): Don't bother compiling if c99,
since the answer is already known.

ChangeLog
lib/autoconf/types.m4

index fbfbc537a67724708f54da92025619ec764fcc84..79b905825287cedb6fe916909ffcc2076e482dbf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2011-02-16  Paul Eggert  <eggert@cs.ucla.edu>
+
+       autoconf: tune long long tests, particularly for c99
+
+       This change is imported from gnulib.
+       * lib/autoconf/types.m4 (AC_TYPE_LONG_LONG_INT): Don't bother compiling
+       or running anything if c99, or if unsigned long long int does not
+       work.  In either case, we know the answer without further tests.
+       Do not compile _AC_TYPE_LONG_LONG_SNIPPET twice.  Instead, compile
+       it at most once, and use its results for both long long int and
+       unsigned long long int.  This is more likely to be efficient in
+       the common case where the program wants to check for both long
+       long int and unsigned long long int.
+       (AC_TYPE_UNSIGNED_LONG_LONG_INT): Don't bother compiling if c99,
+       since the answer is already known.
+
 2011-02-15  Eric Blake  <eblake@redhat.com>
 
        doc: fix debug advice typo
index 6583cb02a12b9315c5d4375a4a0a1cf4c7fe367d..166aeb59f1d9a6fd01f568cbb4ecc13bfce71c12 100644 (file)
@@ -500,37 +500,40 @@ AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET],
 # ---------------------
 AC_DEFUN([AC_TYPE_LONG_LONG_INT],
 [
+  AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
   AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
-    [AC_LINK_IFELSE(
-       [_AC_TYPE_LONG_LONG_SNIPPET],
-       [dnl This catches a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
-       dnl If cross compiling, assume the bug isn't important, since
-       dnl nobody cross compiles for this platform as far as we know.
-       AC_RUN_IFELSE(
-         [AC_LANG_PROGRAM(
-            [[@%:@include <limits.h>
-              @%:@ifndef LLONG_MAX
-              @%:@ define HALF \
-                       (1LL << (sizeof (long long int) * CHAR_BIT - 2))
-              @%:@ define LLONG_MAX (HALF - 1 + HALF)
-              @%:@endif]],
-            [[long long int n = 1;
-              int i;
-              for (i = 0; ; i++)
-                {
-                  long long int m = n << i;
-                  if (m >> i != n)
-                    return 1;
-                  if (LLONG_MAX / 2 < m)
-                    break;
-                }
-              return 0;]])],
-         [ac_cv_type_long_long_int=yes],
-         [ac_cv_type_long_long_int=no],
-         [ac_cv_type_long_long_int=yes])],
-       [ac_cv_type_long_long_int=no])])
+     [ac_cv_type_long_long_int=yes
+      if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+       ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
+       if test $ac_cv_type_long_long_int = yes; then
+         dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
+         dnl If cross compiling, assume the bug is not important, since
+         dnl nobody cross compiles for this platform as far as we know.
+         AC_RUN_IFELSE(
+           [AC_LANG_PROGRAM(
+              [[@%:@include <limits.h>
+                @%:@ifndef LLONG_MAX
+                @%:@ define HALF \
+                         (1LL << (sizeof (long long int) * CHAR_BIT - 2))
+                @%:@ define LLONG_MAX (HALF - 1 + HALF)
+                @%:@endif]],
+              [[long long int n = 1;
+                int i;
+                for (i = 0; ; i++)
+                  {
+                    long long int m = n << i;
+                    if (m >> i != n)
+                      return 1;
+                    if (LLONG_MAX / 2 < m)
+                      break;
+                  }
+                return 0;]])],
+           [],
+           [ac_cv_type_long_long_int=no])
+       fi
+      fi])
   if test $ac_cv_type_long_long_int = yes; then
-    AC_DEFINE([HAVE_LONG_LONG_INT], 1,
+    AC_DEFINE([HAVE_LONG_LONG_INT], [1],
       [Define to 1 if the system has the type `long long int'.])
   fi
 ])
@@ -542,12 +545,15 @@ AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
 [
   AC_CACHE_CHECK([for unsigned long long int],
     [ac_cv_type_unsigned_long_long_int],
-    [AC_LINK_IFELSE(
-       [_AC_TYPE_LONG_LONG_SNIPPET],
-       [ac_cv_type_unsigned_long_long_int=yes],
-       [ac_cv_type_unsigned_long_long_int=no])])
+    [ac_cv_type_unsigned_long_long_int=yes
+     if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+       AC_LINK_IFELSE(
+        [_AC_TYPE_LONG_LONG_SNIPPET],
+        [],
+        [ac_cv_type_unsigned_long_long_int=no])
+     fi])
   if test $ac_cv_type_unsigned_long_long_int = yes; then
-    AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], 1,
+    AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1],
       [Define to 1 if the system has the type `unsigned long long int'.])
   fi
 ])