Blame m4/stdint.m4

Packit 709fb3
# stdint.m4 serial 50
Packit 709fb3
dnl Copyright (C) 2001-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
dnl From Paul Eggert and Bruno Haible.
Packit 709fb3
dnl Test whether <stdint.h> is supported or must be substituted.
Packit 709fb3
Packit 709fb3
AC_DEFUN_ONCE([gl_STDINT_H],
Packit 709fb3
[
Packit 709fb3
  AC_PREREQ([2.59])dnl
Packit 709fb3
Packit 709fb3
  AC_REQUIRE([gl_LIMITS_H])
Packit 709fb3
  AC_REQUIRE([gt_TYPE_WINT_T])
Packit 709fb3
Packit 709fb3
  dnl Check for long long int and unsigned long long int.
Packit 709fb3
  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
Packit 709fb3
  if test $ac_cv_type_long_long_int = yes; then
Packit 709fb3
    HAVE_LONG_LONG_INT=1
Packit 709fb3
  else
Packit 709fb3
    HAVE_LONG_LONG_INT=0
Packit 709fb3
  fi
Packit 709fb3
  AC_SUBST([HAVE_LONG_LONG_INT])
Packit 709fb3
  AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
Packit 709fb3
  if test $ac_cv_type_unsigned_long_long_int = yes; then
Packit 709fb3
    HAVE_UNSIGNED_LONG_LONG_INT=1
Packit 709fb3
  else
Packit 709fb3
    HAVE_UNSIGNED_LONG_LONG_INT=0
Packit 709fb3
  fi
Packit 709fb3
  AC_SUBST([HAVE_UNSIGNED_LONG_LONG_INT])
Packit 709fb3
Packit 709fb3
  dnl Check for <wchar.h>, in the same way as gl_WCHAR_H does.
Packit 709fb3
  AC_CHECK_HEADERS_ONCE([wchar.h])
Packit 709fb3
  if test $ac_cv_header_wchar_h = yes; then
Packit 709fb3
    HAVE_WCHAR_H=1
Packit 709fb3
  else
Packit 709fb3
    HAVE_WCHAR_H=0
Packit 709fb3
  fi
Packit 709fb3
  AC_SUBST([HAVE_WCHAR_H])
Packit 709fb3
Packit 709fb3
  dnl Check for <inttypes.h>.
Packit 709fb3
  dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_inttypes_h.
Packit 709fb3
  if test $ac_cv_header_inttypes_h = yes; then
Packit 709fb3
    HAVE_INTTYPES_H=1
Packit 709fb3
  else
Packit 709fb3
    HAVE_INTTYPES_H=0
Packit 709fb3
  fi
Packit 709fb3
  AC_SUBST([HAVE_INTTYPES_H])
Packit 709fb3
Packit 709fb3
  dnl Check for <sys/types.h>.
Packit 709fb3
  dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_sys_types_h.
Packit 709fb3
  if test $ac_cv_header_sys_types_h = yes; then
Packit 709fb3
    HAVE_SYS_TYPES_H=1
Packit 709fb3
  else
Packit 709fb3
    HAVE_SYS_TYPES_H=0
Packit 709fb3
  fi
Packit 709fb3
  AC_SUBST([HAVE_SYS_TYPES_H])
Packit 709fb3
Packit 709fb3
  gl_CHECK_NEXT_HEADERS([stdint.h])
Packit 709fb3
  if test $ac_cv_header_stdint_h = yes; then
Packit 709fb3
    HAVE_STDINT_H=1
Packit 709fb3
  else
Packit 709fb3
    HAVE_STDINT_H=0
Packit 709fb3
  fi
Packit 709fb3
  AC_SUBST([HAVE_STDINT_H])
Packit 709fb3
Packit 709fb3
  dnl Now see whether we need a substitute <stdint.h>.
Packit 709fb3
  if test $ac_cv_header_stdint_h = yes; then
Packit 709fb3
    AC_CACHE_CHECK([whether stdint.h conforms to C99],
Packit 709fb3
      [gl_cv_header_working_stdint_h],
Packit 709fb3
      [gl_cv_header_working_stdint_h=no
Packit 709fb3
       AC_COMPILE_IFELSE([
Packit 709fb3
         AC_LANG_PROGRAM([[
Packit 709fb3
#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
Packit 709fb3
#define __STDC_CONSTANT_MACROS 1
Packit 709fb3
#define __STDC_LIMIT_MACROS 1
Packit 709fb3
#include <stdint.h>
Packit 709fb3
/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>.  */
Packit 709fb3
#if !(defined WCHAR_MIN && defined WCHAR_MAX)
Packit 709fb3
#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>"
Packit 709fb3
#endif
Packit 709fb3
]
Packit 709fb3
gl_STDINT_INCLUDES
Packit 709fb3
[
Packit 709fb3
#ifdef INT8_MAX
Packit 709fb3
int8_t a1 = INT8_MAX;
Packit 709fb3
int8_t a1min = INT8_MIN;
Packit 709fb3
#endif
Packit 709fb3
#ifdef INT16_MAX
Packit 709fb3
int16_t a2 = INT16_MAX;
Packit 709fb3
int16_t a2min = INT16_MIN;
Packit 709fb3
#endif
Packit 709fb3
#ifdef INT32_MAX
Packit 709fb3
int32_t a3 = INT32_MAX;
Packit 709fb3
int32_t a3min = INT32_MIN;
Packit 709fb3
#endif
Packit 709fb3
#ifdef INT64_MAX
Packit 709fb3
int64_t a4 = INT64_MAX;
Packit 709fb3
int64_t a4min = INT64_MIN;
Packit 709fb3
#endif
Packit 709fb3
#ifdef UINT8_MAX
Packit 709fb3
uint8_t b1 = UINT8_MAX;
Packit 709fb3
#else
Packit 709fb3
typedef int b1[(unsigned char) -1 != 255 ? 1 : -1];
Packit 709fb3
#endif
Packit 709fb3
#ifdef UINT16_MAX
Packit 709fb3
uint16_t b2 = UINT16_MAX;
Packit 709fb3
#endif
Packit 709fb3
#ifdef UINT32_MAX
Packit 709fb3
uint32_t b3 = UINT32_MAX;
Packit 709fb3
#endif
Packit 709fb3
#ifdef UINT64_MAX
Packit 709fb3
uint64_t b4 = UINT64_MAX;
Packit 709fb3
#endif
Packit 709fb3
int_least8_t c1 = INT8_C (0x7f);
Packit 709fb3
int_least8_t c1max = INT_LEAST8_MAX;
Packit 709fb3
int_least8_t c1min = INT_LEAST8_MIN;
Packit 709fb3
int_least16_t c2 = INT16_C (0x7fff);
Packit 709fb3
int_least16_t c2max = INT_LEAST16_MAX;
Packit 709fb3
int_least16_t c2min = INT_LEAST16_MIN;
Packit 709fb3
int_least32_t c3 = INT32_C (0x7fffffff);
Packit 709fb3
int_least32_t c3max = INT_LEAST32_MAX;
Packit 709fb3
int_least32_t c3min = INT_LEAST32_MIN;
Packit 709fb3
int_least64_t c4 = INT64_C (0x7fffffffffffffff);
Packit 709fb3
int_least64_t c4max = INT_LEAST64_MAX;
Packit 709fb3
int_least64_t c4min = INT_LEAST64_MIN;
Packit 709fb3
uint_least8_t d1 = UINT8_C (0xff);
Packit 709fb3
uint_least8_t d1max = UINT_LEAST8_MAX;
Packit 709fb3
uint_least16_t d2 = UINT16_C (0xffff);
Packit 709fb3
uint_least16_t d2max = UINT_LEAST16_MAX;
Packit 709fb3
uint_least32_t d3 = UINT32_C (0xffffffff);
Packit 709fb3
uint_least32_t d3max = UINT_LEAST32_MAX;
Packit 709fb3
uint_least64_t d4 = UINT64_C (0xffffffffffffffff);
Packit 709fb3
uint_least64_t d4max = UINT_LEAST64_MAX;
Packit 709fb3
int_fast8_t e1 = INT_FAST8_MAX;
Packit 709fb3
int_fast8_t e1min = INT_FAST8_MIN;
Packit 709fb3
int_fast16_t e2 = INT_FAST16_MAX;
Packit 709fb3
int_fast16_t e2min = INT_FAST16_MIN;
Packit 709fb3
int_fast32_t e3 = INT_FAST32_MAX;
Packit 709fb3
int_fast32_t e3min = INT_FAST32_MIN;
Packit 709fb3
int_fast64_t e4 = INT_FAST64_MAX;
Packit 709fb3
int_fast64_t e4min = INT_FAST64_MIN;
Packit 709fb3
uint_fast8_t f1 = UINT_FAST8_MAX;
Packit 709fb3
uint_fast16_t f2 = UINT_FAST16_MAX;
Packit 709fb3
uint_fast32_t f3 = UINT_FAST32_MAX;
Packit 709fb3
uint_fast64_t f4 = UINT_FAST64_MAX;
Packit 709fb3
#ifdef INTPTR_MAX
Packit 709fb3
intptr_t g = INTPTR_MAX;
Packit 709fb3
intptr_t gmin = INTPTR_MIN;
Packit 709fb3
#endif
Packit 709fb3
#ifdef UINTPTR_MAX
Packit 709fb3
uintptr_t h = UINTPTR_MAX;
Packit 709fb3
#endif
Packit 709fb3
intmax_t i = INTMAX_MAX;
Packit 709fb3
uintmax_t j = UINTMAX_MAX;
Packit 709fb3
Packit 709fb3
/* Check that SIZE_MAX has the correct type, if possible.  */
Packit 709fb3
#if 201112 <= __STDC_VERSION__
Packit 709fb3
int k = _Generic (SIZE_MAX, size_t: 0);
Packit 709fb3
#elif (2 <= __GNUC__ || defined __IBM__TYPEOF__ \
Packit 709fb3
       || (0x5110 <= __SUNPRO_C && !__STDC__))
Packit 709fb3
extern size_t k;
Packit 709fb3
extern __typeof__ (SIZE_MAX) k;
Packit 709fb3
#endif
Packit 709fb3
Packit 709fb3
#include <limits.h> /* for CHAR_BIT */
Packit 709fb3
#define TYPE_MINIMUM(t) \
Packit 709fb3
  ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t)))
Packit 709fb3
#define TYPE_MAXIMUM(t) \
Packit 709fb3
  ((t) ((t) 0 < (t) -1 \
Packit 709fb3
        ? (t) -1 \
Packit 709fb3
        : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
Packit 709fb3
struct s {
Packit 709fb3
  int check_PTRDIFF:
Packit 709fb3
      PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t)
Packit 709fb3
      && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t)
Packit 709fb3
      ? 1 : -1;
Packit 709fb3
  /* Detect bug in FreeBSD 6.0 / ia64.  */
Packit 709fb3
  int check_SIG_ATOMIC:
Packit 709fb3
      SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t)
Packit 709fb3
      && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t)
Packit 709fb3
      ? 1 : -1;
Packit 709fb3
  int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1;
Packit 709fb3
  int check_WCHAR:
Packit 709fb3
      WCHAR_MIN == TYPE_MINIMUM (wchar_t)
Packit 709fb3
      && WCHAR_MAX == TYPE_MAXIMUM (wchar_t)
Packit 709fb3
      ? 1 : -1;
Packit 709fb3
  /* Detect bug in mingw.  */
Packit 709fb3
  int check_WINT:
Packit 709fb3
      WINT_MIN == TYPE_MINIMUM (wint_t)
Packit 709fb3
      && WINT_MAX == TYPE_MAXIMUM (wint_t)
Packit 709fb3
      ? 1 : -1;
Packit 709fb3
Packit 709fb3
  /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others.  */
Packit 709fb3
  int check_UINT8_C:
Packit 709fb3
        (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1;
Packit 709fb3
  int check_UINT16_C:
Packit 709fb3
        (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1;
Packit 709fb3
Packit 709fb3
  /* Detect bugs in OpenBSD 3.9 stdint.h.  */
Packit 709fb3
#ifdef UINT8_MAX
Packit 709fb3
  int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1;
Packit 709fb3
#endif
Packit 709fb3
#ifdef UINT16_MAX
Packit 709fb3
  int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1;
Packit 709fb3
#endif
Packit 709fb3
#ifdef UINT32_MAX
Packit 709fb3
  int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1;
Packit 709fb3
#endif
Packit 709fb3
#ifdef UINT64_MAX
Packit 709fb3
  int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1;
Packit 709fb3
#endif
Packit 709fb3
  int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1;
Packit 709fb3
  int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1;
Packit 709fb3
  int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1;
Packit 709fb3
  int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1;
Packit 709fb3
  int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1;
Packit 709fb3
  int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1;
Packit 709fb3
  int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1;
Packit 709fb3
  int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1;
Packit 709fb3
  int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1;
Packit 709fb3
  int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1;
Packit 709fb3
  int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1;
Packit 709fb3
};
Packit 709fb3
         ]])],
Packit 709fb3
         [dnl Determine whether the various *_MIN, *_MAX macros are usable
Packit 709fb3
          dnl in preprocessor expression. We could do it by compiling a test
Packit 709fb3
          dnl program for each of these macros. It is faster to run a program
Packit 709fb3
          dnl that inspects the macro expansion.
Packit 709fb3
          dnl This detects a bug on HP-UX 11.23/ia64.
Packit 709fb3
          AC_RUN_IFELSE([
Packit 709fb3
            AC_LANG_PROGRAM([[
Packit 709fb3
#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
Packit 709fb3
#define __STDC_CONSTANT_MACROS 1
Packit 709fb3
#define __STDC_LIMIT_MACROS 1
Packit 709fb3
#include <stdint.h>
Packit 709fb3
]
Packit 709fb3
gl_STDINT_INCLUDES
Packit 709fb3
[
Packit 709fb3
#include <stdio.h>
Packit 709fb3
#include <string.h>
Packit 709fb3
#define MVAL(macro) MVAL1(macro)
Packit 709fb3
#define MVAL1(expression) #expression
Packit 709fb3
static const char *macro_values[] =
Packit 709fb3
  {
Packit 709fb3
#ifdef INT8_MAX
Packit 709fb3
    MVAL (INT8_MAX),
Packit 709fb3
#endif
Packit 709fb3
#ifdef INT16_MAX
Packit 709fb3
    MVAL (INT16_MAX),
Packit 709fb3
#endif
Packit 709fb3
#ifdef INT32_MAX
Packit 709fb3
    MVAL (INT32_MAX),
Packit 709fb3
#endif
Packit 709fb3
#ifdef INT64_MAX
Packit 709fb3
    MVAL (INT64_MAX),
Packit 709fb3
#endif
Packit 709fb3
#ifdef UINT8_MAX
Packit 709fb3
    MVAL (UINT8_MAX),
Packit 709fb3
#endif
Packit 709fb3
#ifdef UINT16_MAX
Packit 709fb3
    MVAL (UINT16_MAX),
Packit 709fb3
#endif
Packit 709fb3
#ifdef UINT32_MAX
Packit 709fb3
    MVAL (UINT32_MAX),
Packit 709fb3
#endif
Packit 709fb3
#ifdef UINT64_MAX
Packit 709fb3
    MVAL (UINT64_MAX),
Packit 709fb3
#endif
Packit 709fb3
    NULL
Packit 709fb3
  };
Packit 709fb3
]], [[
Packit 709fb3
  const char **mv;
Packit 709fb3
  for (mv = macro_values; *mv != NULL; mv++)
Packit 709fb3
    {
Packit 709fb3
      const char *value = *mv;
Packit 709fb3
      /* Test whether it looks like a cast expression.  */
Packit 709fb3
      if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0
Packit 709fb3
          || strncmp (value, "((unsigned short)"/*)*/, 17) == 0
Packit 709fb3
          || strncmp (value, "((unsigned char)"/*)*/, 16) == 0
Packit 709fb3
          || strncmp (value, "((int)"/*)*/, 6) == 0
Packit 709fb3
          || strncmp (value, "((signed short)"/*)*/, 15) == 0
Packit 709fb3
          || strncmp (value, "((signed char)"/*)*/, 14) == 0)
Packit 709fb3
        return mv - macro_values + 1;
Packit 709fb3
    }
Packit 709fb3
  return 0;
Packit 709fb3
]])],
Packit 709fb3
              [gl_cv_header_working_stdint_h=yes],
Packit 709fb3
              [],
Packit 709fb3
              [dnl When cross-compiling, assume it works.
Packit 709fb3
               gl_cv_header_working_stdint_h=yes
Packit 709fb3
              ])
Packit 709fb3
         ])
Packit 709fb3
      ])
Packit 709fb3
  fi
Packit 709fb3
Packit 709fb3
  HAVE_C99_STDINT_H=0
Packit 709fb3
  HAVE_SYS_BITYPES_H=0
Packit 709fb3
  HAVE_SYS_INTTYPES_H=0
Packit 709fb3
  STDINT_H=stdint.h
Packit 709fb3
  if test "$gl_cv_header_working_stdint_h" = yes; then
Packit 709fb3
    HAVE_C99_STDINT_H=1
Packit 709fb3
    dnl Now see whether the system <stdint.h> works without
Packit 709fb3
    dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined.
Packit 709fb3
    AC_CACHE_CHECK([whether stdint.h predates C++11],
Packit 709fb3
      [gl_cv_header_stdint_predates_cxx11_h],
Packit 709fb3
      [gl_cv_header_stdint_predates_cxx11_h=yes
Packit 709fb3
       AC_COMPILE_IFELSE([
Packit 709fb3
         AC_LANG_PROGRAM([[
Packit 709fb3
#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
Packit 709fb3
#include <stdint.h>
Packit 709fb3
]
Packit 709fb3
gl_STDINT_INCLUDES
Packit 709fb3
[
Packit 709fb3
intmax_t im = INTMAX_MAX;
Packit 709fb3
int32_t i32 = INT32_C (0x7fffffff);
Packit 709fb3
         ]])],
Packit 709fb3
         [gl_cv_header_stdint_predates_cxx11_h=no])])
Packit 709fb3
Packit 709fb3
    if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then
Packit 709fb3
      AC_DEFINE([__STDC_CONSTANT_MACROS], [1],
Packit 709fb3
                [Define to 1 if the system <stdint.h> predates C++11.])
Packit 709fb3
      AC_DEFINE([__STDC_LIMIT_MACROS], [1],
Packit 709fb3
                [Define to 1 if the system <stdint.h> predates C++11.])
Packit 709fb3
    fi
Packit 709fb3
    AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.],
Packit 709fb3
      [gl_cv_header_stdint_width],
Packit 709fb3
      [gl_cv_header_stdint_width=no
Packit 709fb3
       AC_COMPILE_IFELSE(
Packit 709fb3
         [AC_LANG_PROGRAM([[
Packit 709fb3
            /* Work if build is not clean.  */
Packit 709fb3
            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1
Packit 709fb3
            #ifndef __STDC_WANT_IEC_60559_BFP_EXT__
Packit 709fb3
             #define __STDC_WANT_IEC_60559_BFP_EXT__ 1
Packit 709fb3
            #endif
Packit 709fb3
            #include <stdint.h>
Packit 709fb3
            ]gl_STDINT_INCLUDES[
Packit 709fb3
            int iw = UINTMAX_WIDTH;
Packit 709fb3
            ]])],
Packit 709fb3
         [gl_cv_header_stdint_width=yes])])
Packit 709fb3
    if test "$gl_cv_header_stdint_width" = yes; then
Packit 709fb3
      STDINT_H=
Packit 709fb3
    fi
Packit 709fb3
  else
Packit 709fb3
    dnl Check for <sys/inttypes.h>, and for
Packit 709fb3
    dnl <sys/bitypes.h> (used in Linux libc4 >= 4.6.7 and libc5).
Packit 709fb3
    AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h])
Packit 709fb3
    if test $ac_cv_header_sys_inttypes_h = yes; then
Packit 709fb3
      HAVE_SYS_INTTYPES_H=1
Packit 709fb3
    fi
Packit 709fb3
    if test $ac_cv_header_sys_bitypes_h = yes; then
Packit 709fb3
      HAVE_SYS_BITYPES_H=1
Packit 709fb3
    fi
Packit 709fb3
    gl_STDINT_TYPE_PROPERTIES
Packit 709fb3
  fi
Packit 709fb3
Packit 709fb3
  dnl The substitute stdint.h needs the substitute limit.h's _GL_INTEGER_WIDTH.
Packit 709fb3
  LIMITS_H=limits.h
Packit 709fb3
  AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"])
Packit 709fb3
Packit 709fb3
  AC_SUBST([HAVE_C99_STDINT_H])
Packit 709fb3
  AC_SUBST([HAVE_SYS_BITYPES_H])
Packit 709fb3
  AC_SUBST([HAVE_SYS_INTTYPES_H])
Packit 709fb3
  AC_SUBST([STDINT_H])
Packit 709fb3
  AM_CONDITIONAL([GL_GENERATE_STDINT_H], [test -n "$STDINT_H"])
Packit 709fb3
])
Packit 709fb3
Packit 709fb3
dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES)
Packit 709fb3
dnl Determine the size of each of the given types in bits.
Packit 709fb3
AC_DEFUN([gl_STDINT_BITSIZEOF],
Packit 709fb3
[
Packit 709fb3
  dnl Use a shell loop, to avoid bloating configure, and
Packit 709fb3
  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
Packit 709fb3
  dnl   config.h.in,
Packit 709fb3
  dnl - extra AC_SUBST calls, so that the right substitutions are made.
Packit 709fb3
  m4_foreach_w([gltype], [$1],
Packit 709fb3
    [AH_TEMPLATE([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]),
Packit 709fb3
       [Define to the number of bits in type ']gltype['.])])
Packit 709fb3
  for gltype in $1 ; do
Packit 709fb3
    AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}],
Packit 709fb3
      [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT],
Packit 709fb3
         [$2
Packit 709fb3
#include <limits.h>], [result=unknown])
Packit 709fb3
       eval gl_cv_bitsizeof_${gltype}=\$result
Packit 709fb3
      ])
Packit 709fb3
    eval result=\$gl_cv_bitsizeof_${gltype}
Packit 709fb3
    if test $result = unknown; then
Packit 709fb3
      dnl Use a nonempty default, because some compilers, such as IRIX 5 cc,
Packit 709fb3
      dnl do a syntax check even on unused #if conditions and give an error
Packit 709fb3
      dnl on valid C code like this:
Packit 709fb3
      dnl   #if 0
Packit 709fb3
      dnl   # if  > 32
Packit 709fb3
      dnl   # endif
Packit 709fb3
      dnl   #endif
Packit 709fb3
      result=0
Packit 709fb3
    fi
Packit 709fb3
    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
Packit 709fb3
    AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result])
Packit 709fb3
    eval BITSIZEOF_${GLTYPE}=\$result
Packit 709fb3
  done
Packit 709fb3
  m4_foreach_w([gltype], [$1],
Packit 709fb3
    [AC_SUBST([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))])
Packit 709fb3
])
Packit 709fb3
Packit 709fb3
dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES)
Packit 709fb3
dnl Determine the signedness of each of the given types.
Packit 709fb3
dnl Define HAVE_SIGNED_TYPE if type is signed.
Packit 709fb3
AC_DEFUN([gl_CHECK_TYPES_SIGNED],
Packit 709fb3
[
Packit 709fb3
  dnl Use a shell loop, to avoid bloating configure, and
Packit 709fb3
  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
Packit 709fb3
  dnl   config.h.in,
Packit 709fb3
  dnl - extra AC_SUBST calls, so that the right substitutions are made.
Packit 709fb3
  m4_foreach_w([gltype], [$1],
Packit 709fb3
    [AH_TEMPLATE([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]),
Packit 709fb3
       [Define to 1 if ']gltype[' is a signed integer type.])])
Packit 709fb3
  for gltype in $1 ; do
Packit 709fb3
    AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed],
Packit 709fb3
      [AC_COMPILE_IFELSE(
Packit 709fb3
         [AC_LANG_PROGRAM([$2[
Packit 709fb3
            int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])],
Packit 709fb3
         result=yes, result=no)
Packit 709fb3
       eval gl_cv_type_${gltype}_signed=\$result
Packit 709fb3
      ])
Packit 709fb3
    eval result=\$gl_cv_type_${gltype}_signed
Packit 709fb3
    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
Packit 709fb3
    if test "$result" = yes; then
Packit 709fb3
      AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1])
Packit 709fb3
      eval HAVE_SIGNED_${GLTYPE}=1
Packit 709fb3
    else
Packit 709fb3
      eval HAVE_SIGNED_${GLTYPE}=0
Packit 709fb3
    fi
Packit 709fb3
  done
Packit 709fb3
  m4_foreach_w([gltype], [$1],
Packit 709fb3
    [AC_SUBST([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))])
Packit 709fb3
])
Packit 709fb3
Packit 709fb3
dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES)
Packit 709fb3
dnl Determine the suffix to use for integer constants of the given types.
Packit 709fb3
dnl Define t_SUFFIX for each such type.
Packit 709fb3
AC_DEFUN([gl_INTEGER_TYPE_SUFFIX],
Packit 709fb3
[
Packit 709fb3
  dnl Use a shell loop, to avoid bloating configure, and
Packit 709fb3
  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
Packit 709fb3
  dnl   config.h.in,
Packit 709fb3
  dnl - extra AC_SUBST calls, so that the right substitutions are made.
Packit 709fb3
  m4_foreach_w([gltype], [$1],
Packit 709fb3
    [AH_TEMPLATE(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX],
Packit 709fb3
       [Define to l, ll, u, ul, ull, etc., as suitable for
Packit 709fb3
        constants of type ']gltype['.])])
Packit 709fb3
  for gltype in $1 ; do
Packit 709fb3
    AC_CACHE_CHECK([for $gltype integer literal suffix],
Packit 709fb3
      [gl_cv_type_${gltype}_suffix],
Packit 709fb3
      [eval gl_cv_type_${gltype}_suffix=no
Packit 709fb3
       eval result=\$gl_cv_type_${gltype}_signed
Packit 709fb3
       if test "$result" = yes; then
Packit 709fb3
         glsufu=
Packit 709fb3
       else
Packit 709fb3
         glsufu=u
Packit 709fb3
       fi
Packit 709fb3
       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
Packit 709fb3
         case $glsuf in
Packit 709fb3
           '')  gltype1='int';;
Packit 709fb3
           l)   gltype1='long int';;
Packit 709fb3
           ll)  gltype1='long long int';;
Packit 709fb3
           i64) gltype1='__int64';;
Packit 709fb3
           u)   gltype1='unsigned int';;
Packit 709fb3
           ul)  gltype1='unsigned long int';;
Packit 709fb3
           ull) gltype1='unsigned long long int';;
Packit 709fb3
           ui64)gltype1='unsigned __int64';;
Packit 709fb3
         esac
Packit 709fb3
         AC_COMPILE_IFELSE(
Packit 709fb3
           [AC_LANG_PROGRAM([$2[
Packit 709fb3
              extern $gltype foo;
Packit 709fb3
              extern $gltype1 foo;]])],
Packit 709fb3
           [eval gl_cv_type_${gltype}_suffix=\$glsuf])
Packit 709fb3
         eval result=\$gl_cv_type_${gltype}_suffix
Packit 709fb3
         test "$result" != no && break
Packit 709fb3
       done])
Packit 709fb3
    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
Packit 709fb3
    eval result=\$gl_cv_type_${gltype}_suffix
Packit 709fb3
    test "$result" = no && result=
Packit 709fb3
    eval ${GLTYPE}_SUFFIX=\$result
Packit 709fb3
    AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result])
Packit 709fb3
  done
Packit 709fb3
  m4_foreach_w([gltype], [$1],
Packit 709fb3
    [AC_SUBST(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])])
Packit 709fb3
])
Packit 709fb3
Packit 709fb3
dnl gl_STDINT_INCLUDES
Packit 709fb3
AC_DEFUN([gl_STDINT_INCLUDES],
Packit 709fb3
[[
Packit 709fb3
  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
Packit 709fb3
     included before <wchar.h>.  */
Packit 709fb3
  #include <stddef.h>
Packit 709fb3
  #include <signal.h>
Packit 709fb3
  #if HAVE_WCHAR_H
Packit 709fb3
  # include <stdio.h>
Packit 709fb3
  # include <time.h>
Packit 709fb3
  # include <wchar.h>
Packit 709fb3
  #endif
Packit 709fb3
]])
Packit 709fb3
Packit 709fb3
dnl gl_STDINT_TYPE_PROPERTIES
Packit 709fb3
dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t
Packit 709fb3
dnl of interest to stdint.in.h.
Packit 709fb3
AC_DEFUN([gl_STDINT_TYPE_PROPERTIES],
Packit 709fb3
[
Packit 709fb3
  AC_REQUIRE([gl_MULTIARCH])
Packit 709fb3
  if test $APPLE_UNIVERSAL_BUILD = 0; then
Packit 709fb3
    gl_STDINT_BITSIZEOF([ptrdiff_t size_t],
Packit 709fb3
      [gl_STDINT_INCLUDES])
Packit 709fb3
  fi
Packit 709fb3
  gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t],
Packit 709fb3
    [gl_STDINT_INCLUDES])
Packit 709fb3
  gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t],
Packit 709fb3
    [gl_STDINT_INCLUDES])
Packit 709fb3
  gl_cv_type_ptrdiff_t_signed=yes
Packit 709fb3
  gl_cv_type_size_t_signed=no
Packit 709fb3
  if test $APPLE_UNIVERSAL_BUILD = 0; then
Packit 709fb3
    gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t],
Packit 709fb3
      [gl_STDINT_INCLUDES])
Packit 709fb3
  fi
Packit 709fb3
  gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t],
Packit 709fb3
    [gl_STDINT_INCLUDES])
Packit 709fb3
Packit 709fb3
  dnl If wint_t is smaller than 'int', it cannot satisfy the ISO C 99
Packit 709fb3
  dnl requirement that wint_t is "unchanged by default argument promotions".
Packit 709fb3
  dnl In this case gnulib's <wchar.h> and <wctype.h> override wint_t.
Packit 709fb3
  dnl Set the variable BITSIZEOF_WINT_T accordingly.
Packit 709fb3
  if test $GNULIB_OVERRIDES_WINT_T = 1; then
Packit 709fb3
    BITSIZEOF_WINT_T=32
Packit 709fb3
  fi
Packit 709fb3
])
Packit 709fb3
Packit 709fb3
dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
Packit 709fb3
dnl Remove this when we can assume autoconf >= 2.61.
Packit 709fb3
m4_ifdef([AC_COMPUTE_INT], [], [
Packit 709fb3
  AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])])
Packit 709fb3
])