Blame m4/size_max.m4

Packit 575503
# size_max.m4 serial 10
Packit 575503
dnl Copyright (C) 2003, 2005-2006, 2008-2014 Free Software Foundation, Inc.
Packit 575503
dnl This file is free software; the Free Software Foundation
Packit 575503
dnl gives unlimited permission to copy and/or distribute it,
Packit 575503
dnl with or without modifications, as long as this notice is preserved.
Packit 575503
Packit 575503
dnl From Bruno Haible.
Packit 575503
Packit 575503
AC_DEFUN([gl_SIZE_MAX],
Packit 575503
[
Packit 575503
  AC_CHECK_HEADERS([stdint.h])
Packit 575503
  dnl First test whether the system already has SIZE_MAX.
Packit 575503
  AC_CACHE_CHECK([for SIZE_MAX], [gl_cv_size_max], [
Packit 575503
    gl_cv_size_max=
Packit 575503
    AC_EGREP_CPP([Found it], [
Packit 575503
#include <limits.h>
Packit 575503
#if HAVE_STDINT_H
Packit 575503
#include <stdint.h>
Packit 575503
#endif
Packit 575503
#ifdef SIZE_MAX
Packit 575503
Found it
Packit 575503
#endif
Packit 575503
], [gl_cv_size_max=yes])
Packit 575503
    if test -z "$gl_cv_size_max"; then
Packit 575503
      dnl Define it ourselves. Here we assume that the type 'size_t' is not wider
Packit 575503
      dnl than the type 'unsigned long'. Try hard to find a definition that can
Packit 575503
      dnl be used in a preprocessor #if, i.e. doesn't contain a cast.
Packit 575503
      AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1],
Packit 575503
        [#include <stddef.h>
Packit 575503
#include <limits.h>], [size_t_bits_minus_1=])
Packit 575503
      AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)],
Packit 575503
        [#include <stddef.h>], [fits_in_uint=])
Packit 575503
      if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then
Packit 575503
        if test $fits_in_uint = 1; then
Packit 575503
          dnl Even though SIZE_MAX fits in an unsigned int, it must be of type
Packit 575503
          dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'.
Packit 575503
          AC_COMPILE_IFELSE(
Packit 575503
            [AC_LANG_PROGRAM(
Packit 575503
               [[#include <stddef.h>
Packit 575503
                 extern size_t foo;
Packit 575503
                 extern unsigned long foo;
Packit 575503
               ]],
Packit 575503
               [[]])],
Packit 575503
            [fits_in_uint=0])
Packit 575503
        fi
Packit 575503
        dnl We cannot use 'expr' to simplify this expression, because 'expr'
Packit 575503
        dnl works only with 'long' integers in the host environment, while we
Packit 575503
        dnl might be cross-compiling from a 32-bit platform to a 64-bit platform.
Packit 575503
        if test $fits_in_uint = 1; then
Packit 575503
          gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)"
Packit 575503
        else
Packit 575503
          gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)"
Packit 575503
        fi
Packit 575503
      else
Packit 575503
        dnl Shouldn't happen, but who knows...
Packit 575503
        gl_cv_size_max='((size_t)~(size_t)0)'
Packit 575503
      fi
Packit 575503
    fi
Packit 575503
  ])
Packit 575503
  if test "$gl_cv_size_max" != yes; then
Packit 575503
    AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max],
Packit 575503
      [Define as the maximum value of type 'size_t', if the system doesn't define it.])
Packit 575503
  fi
Packit 575503
  dnl Don't redefine SIZE_MAX in config.h if config.h is re-included after
Packit 575503
  dnl <stdint.h>. Remember that the #undef in AH_VERBATIM gets replaced with
Packit 575503
  dnl #define by AC_DEFINE_UNQUOTED.
Packit 575503
  AH_VERBATIM([SIZE_MAX],
Packit 575503
[/* Define as the maximum value of type 'size_t', if the system doesn't define
Packit 575503
   it. */
Packit 575503
#ifndef SIZE_MAX
Packit 575503
# undef SIZE_MAX
Packit 575503
#endif])
Packit 575503
])
Packit 575503
Packit 575503
dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
Packit 575503
dnl Remove this when we can assume autoconf >= 2.61.
Packit 575503
m4_ifdef([AC_COMPUTE_INT], [], [
Packit 575503
  AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])])
Packit 575503
])