Blame gettext-runtime/gnulib-m4/stdint.m4

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