Annotation of embedaddon/libiconv/srcm4/longlong.m4, revision 1.1.1.1

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>