Blame gl/m4/stdint.m4

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