GDB support: add frame annotators and filters
[bpt/guile.git] / m4 / size_max.m4
CommitLineData
9157d901 1# size_max.m4 serial 10
5e69ceb7 2dnl Copyright (C) 2003, 2005-2006, 2008-2014 Free Software Foundation, Inc.
c4b681fd
LC
3dnl This file is free software; the Free Software Foundation
4dnl gives unlimited permission to copy and/or distribute it,
5dnl with or without modifications, as long as this notice is preserved.
6
7dnl From Bruno Haible.
8
9AC_DEFUN([gl_SIZE_MAX],
10[
11 AC_CHECK_HEADERS([stdint.h])
12 dnl First test whether the system already has SIZE_MAX.
13 AC_CACHE_CHECK([for SIZE_MAX], [gl_cv_size_max], [
14 gl_cv_size_max=
15 AC_EGREP_CPP([Found it], [
16#include <limits.h>
17#if HAVE_STDINT_H
18#include <stdint.h>
19#endif
20#ifdef SIZE_MAX
21Found it
22#endif
23], [gl_cv_size_max=yes])
24 if test -z "$gl_cv_size_max"; then
25 dnl Define it ourselves. Here we assume that the type 'size_t' is not wider
26 dnl than the type 'unsigned long'. Try hard to find a definition that can
27 dnl be used in a preprocessor #if, i.e. doesn't contain a cast.
28 AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1],
29 [#include <stddef.h>
30#include <limits.h>], [size_t_bits_minus_1=])
31 AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)],
32 [#include <stddef.h>], [fits_in_uint=])
33 if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then
34 if test $fits_in_uint = 1; then
35 dnl Even though SIZE_MAX fits in an unsigned int, it must be of type
36 dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'.
9157d901
LC
37 AC_COMPILE_IFELSE(
38 [AC_LANG_PROGRAM(
39 [[#include <stddef.h>
40 extern size_t foo;
41 extern unsigned long foo;
42 ]],
43 [[]])],
44 [fits_in_uint=0])
c4b681fd
LC
45 fi
46 dnl We cannot use 'expr' to simplify this expression, because 'expr'
47 dnl works only with 'long' integers in the host environment, while we
48 dnl might be cross-compiling from a 32-bit platform to a 64-bit platform.
49 if test $fits_in_uint = 1; then
50 gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)"
51 else
52 gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)"
53 fi
54 else
55 dnl Shouldn't happen, but who knows...
56 gl_cv_size_max='((size_t)~(size_t)0)'
57 fi
58 fi
59 ])
60 if test "$gl_cv_size_max" != yes; then
61 AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max],
62 [Define as the maximum value of type 'size_t', if the system doesn't define it.])
63 fi
64 dnl Don't redefine SIZE_MAX in config.h if config.h is re-included after
65 dnl <stdint.h>. Remember that the #undef in AH_VERBATIM gets replaced with
66 dnl #define by AC_DEFINE_UNQUOTED.
67 AH_VERBATIM([SIZE_MAX],
68[/* Define as the maximum value of type 'size_t', if the system doesn't define
69 it. */
70#ifndef SIZE_MAX
71# undef SIZE_MAX
72#endif])
73])
74
75dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
76dnl Remove this when we can assume autoconf >= 2.61.
77m4_ifdef([AC_COMPUTE_INT], [], [
78 AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])])
79])