longlong.m4
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:4k
源码类别:

midi

开发平台:

Unix_Linux

  1. # longlong.m4 serial 13
  2. dnl Copyright (C) 1999-2007 Free Software Foundation, Inc.
  3. dnl This file is free software; the Free Software Foundation
  4. dnl gives unlimited permission to copy and/or distribute it,
  5. dnl with or without modifications, as long as this notice is preserved.
  6. dnl From Paul Eggert.
  7. # Define HAVE_LONG_LONG_INT if 'long long int' works.
  8. # This fixes a bug in Autoconf 2.61, but can be removed once we
  9. # assume 2.62 everywhere.
  10. # Note: If the type 'long long int' exists but is only 32 bits large
  11. # (as on some very old compilers), HAVE_LONG_LONG_INT will not be
  12. # defined. In this case you can treat 'long long int' like 'long int'.
  13. AC_DEFUN([AC_TYPE_LONG_LONG_INT],
  14. [
  15.   AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
  16.     [AC_LINK_IFELSE(
  17.        [_AC_TYPE_LONG_LONG_SNIPPET],
  18.        [dnl This catches a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
  19. dnl If cross compiling, assume the bug isn't important, since
  20. dnl nobody cross compiles for this platform as far as we know.
  21. AC_RUN_IFELSE(
  22.   [AC_LANG_PROGRAM(
  23.      [[@%:@include <limits.h>
  24.        @%:@ifndef LLONG_MAX
  25.        @%:@ define HALF 
  26. (1LL << (sizeof (long long int) * CHAR_BIT - 2))
  27.        @%:@ define LLONG_MAX (HALF - 1 + HALF)
  28.        @%:@endif]],
  29.      [[long long int n = 1;
  30.        int i;
  31.        for (i = 0; ; i++)
  32.  {
  33.    long long int m = n << i;
  34.    if (m >> i != n)
  35.      return 1;
  36.    if (LLONG_MAX / 2 < m)
  37.      break;
  38.  }
  39.        return 0;]])],
  40.   [ac_cv_type_long_long_int=yes],
  41.   [ac_cv_type_long_long_int=no],
  42.   [ac_cv_type_long_long_int=yes])],
  43.        [ac_cv_type_long_long_int=no])])
  44.   if test $ac_cv_type_long_long_int = yes; then
  45.     AC_DEFINE([HAVE_LONG_LONG_INT], 1,
  46.       [Define to 1 if the system has the type `long long int'.])
  47.   fi
  48. ])
  49. # Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works.
  50. # This fixes a bug in Autoconf 2.61, but can be removed once we
  51. # assume 2.62 everywhere.
  52. # Note: If the type 'unsigned long long int' exists but is only 32 bits
  53. # large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT
  54. # will not be defined. In this case you can treat 'unsigned long long int'
  55. # like 'unsigned long int'.
  56. AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
  57. [
  58.   AC_CACHE_CHECK([for unsigned long long int],
  59.     [ac_cv_type_unsigned_long_long_int],
  60.     [AC_LINK_IFELSE(
  61.        [_AC_TYPE_LONG_LONG_SNIPPET],
  62.        [ac_cv_type_unsigned_long_long_int=yes],
  63.        [ac_cv_type_unsigned_long_long_int=no])])
  64.   if test $ac_cv_type_unsigned_long_long_int = yes; then
  65.     AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], 1,
  66.       [Define to 1 if the system has the type `unsigned long long int'.])
  67.   fi
  68. ])
  69. # Expands to a C program that can be used to test for simultaneous support
  70. # of 'long long' and 'unsigned long long'. We don't want to say that
  71. # 'long long' is available if 'unsigned long long' is not, or vice versa,
  72. # because too many programs rely on the symmetry between signed and unsigned
  73. # integer types (excluding 'bool').
  74. AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET],
  75. [
  76.   AC_LANG_PROGRAM(
  77.     [[/* Test preprocessor.  */
  78.       #if ! (-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
  79.         error in preprocessor;
  80.       #endif
  81.       #if ! (18446744073709551615ULL <= -1ull)
  82.         error in preprocessor;
  83.       #endif
  84.       /* Test literals.  */
  85.       long long int ll = 9223372036854775807ll;
  86.       long long int nll = -9223372036854775807LL;
  87.       unsigned long long int ull = 18446744073709551615ULL;
  88.       /* Test constant expressions.   */
  89.       typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
  90.      ? 1 : -1)];
  91.       typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
  92.      ? 1 : -1)];
  93.       int i = 63;]],
  94.     [[/* Test availability of runtime routines for shift and division.  */
  95.       long long int llmax = 9223372036854775807ll;
  96.       unsigned long long int ullmax = 18446744073709551615ull;
  97.       return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
  98.       | (llmax / ll) | (llmax % ll)
  99.       | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
  100.       | (ullmax / ull) | (ullmax % ull));]])
  101. ])