summaryrefslogtreecommitdiffstats
path: root/gl/m4/stdint.m4
diff options
context:
space:
mode:
Diffstat (limited to 'gl/m4/stdint.m4')
-rw-r--r--gl/m4/stdint.m470
1 files changed, 48 insertions, 22 deletions
diff --git a/gl/m4/stdint.m4 b/gl/m4/stdint.m4
index 1a4b4a6a..bb6c34fe 100644
--- a/gl/m4/stdint.m4
+++ b/gl/m4/stdint.m4
@@ -1,5 +1,5 @@
1# stdint.m4 serial 22 1# stdint.m4 serial 29
2dnl Copyright (C) 2001-2002, 2004-2007 Free Software Foundation, Inc. 2dnl Copyright (C) 2001-2007 Free Software Foundation, Inc.
3dnl This file is free software; the Free Software Foundation 3dnl This file is free software; the Free Software Foundation
4dnl gives unlimited permission to copy and/or distribute it, 4dnl gives unlimited permission to copy and/or distribute it,
5dnl with or without modifications, as long as this notice is preserved. 5dnl with or without modifications, as long as this notice is preserved.
@@ -45,32 +45,32 @@ AC_DEFUN([gl_STDINT_H],
45 fi 45 fi
46 AC_SUBST([HAVE_SYS_TYPES_H]) 46 AC_SUBST([HAVE_SYS_TYPES_H])
47 47
48 dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_stdint_h. 48 gl_CHECK_NEXT_HEADERS([stdint.h])
49 if test $ac_cv_header_stdint_h = yes; then 49 if test $ac_cv_header_stdint_h = yes; then
50 gl_ABSOLUTE_HEADER([stdint.h])
51 ABSOLUTE_STDINT_H=\"$gl_cv_absolute_stdint_h\"
52 HAVE_STDINT_H=1 50 HAVE_STDINT_H=1
53 else 51 else
54 ABSOLUTE_STDINT_H=\"no/such/file/stdint.h\"
55 HAVE_STDINT_H=0 52 HAVE_STDINT_H=0
56 fi 53 fi
57 AC_SUBST([ABSOLUTE_STDINT_H])
58 AC_SUBST([HAVE_STDINT_H]) 54 AC_SUBST([HAVE_STDINT_H])
59 55
60 dnl Now see whether we need a substitute <stdint.h>. Use 56 dnl Now see whether we need a substitute <stdint.h>.
61 dnl ABSOLUTE_STDINT_H, not <stdint.h>, so that it also works during
62 dnl a "config.status --recheck" if a stdint.h has been
63 dnl created in the build directory.
64 if test $ac_cv_header_stdint_h = yes; then 57 if test $ac_cv_header_stdint_h = yes; then
65 AC_CACHE_CHECK([whether stdint.h conforms to C99], 58 AC_CACHE_CHECK([whether stdint.h conforms to C99],
66 [gl_cv_header_working_stdint_h], 59 [gl_cv_header_working_stdint_h],
67 [gl_cv_header_working_stdint_h=no 60 [gl_cv_header_working_stdint_h=no
68 AC_COMPILE_IFELSE([ 61 AC_COMPILE_IFELSE([
69 AC_LANG_PROGRAM([[ 62 AC_LANG_PROGRAM([[
70#include <stddef.h>
71#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ 63#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */
72#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ 64#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */
73#include ABSOLUTE_STDINT_H 65#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
66#include <stdint.h>
67/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>. */
68#if !(defined WCHAR_MIN && defined WCHAR_MAX)
69#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>"
70#endif
71]
72gl_STDINT_INCLUDES
73[
74#ifdef INT8_MAX 74#ifdef INT8_MAX
75int8_t a1 = INT8_MAX; 75int8_t a1 = INT8_MAX;
76int8_t a1min = INT8_MIN; 76int8_t a1min = INT8_MIN;
@@ -142,12 +142,32 @@ uintptr_t h = UINTPTR_MAX;
142#endif 142#endif
143intmax_t i = INTMAX_MAX; 143intmax_t i = INTMAX_MAX;
144uintmax_t j = UINTMAX_MAX; 144uintmax_t j = UINTMAX_MAX;
145
146#include <limits.h> /* for CHAR_BIT */
147#define TYPE_MINIMUM(t) \
148 ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
149#define TYPE_MAXIMUM(t) \
150 ((t) ((t) 0 < (t) -1 ? (t) -1 : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
145struct s { 151struct s {
146 int check_PTRDIFF: PTRDIFF_MIN < 0 && 0 < PTRDIFF_MAX ? 1 : -1; 152 int check_PTRDIFF:
147 int check_SIG_ATOMIC: SIG_ATOMIC_MIN <= 0 && 0 < SIG_ATOMIC_MAX ? 1 : -1; 153 PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t)
148 int check_SIZE: 0 < SIZE_MAX ? 1 : -1; 154 && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t)
149 int check_WCHAR: WCHAR_MIN <= 0 && 0 < WCHAR_MAX ? 1 : -1; 155 ? 1 : -1;
150 int check_WINT: WINT_MIN <= 0 && 0 < WINT_MAX ? 1 : -1; 156 /* Detect bug in FreeBSD 6.0 / ia64. */
157 int check_SIG_ATOMIC:
158 SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t)
159 && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t)
160 ? 1 : -1;
161 int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1;
162 int check_WCHAR:
163 WCHAR_MIN == TYPE_MINIMUM (wchar_t)
164 && WCHAR_MAX == TYPE_MAXIMUM (wchar_t)
165 ? 1 : -1;
166 /* Detect bug in mingw. */
167 int check_WINT:
168 WINT_MIN == TYPE_MINIMUM (wint_t)
169 && WINT_MAX == TYPE_MAXIMUM (wint_t)
170 ? 1 : -1;
151 171
152 /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ 172 /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */
153 int check_UINT8_C: 173 int check_UINT8_C:
@@ -202,6 +222,10 @@ struct s {
202 fi 222 fi
203 AC_SUBST([HAVE_SYS_BITYPES_H]) 223 AC_SUBST([HAVE_SYS_BITYPES_H])
204 224
225 dnl Check for <wchar.h> (missing in Linux uClibc when built without wide
226 dnl character support).
227 AC_CHECK_HEADERS_ONCE([wchar.h])
228
205 gl_STDINT_TYPE_PROPERTIES 229 gl_STDINT_TYPE_PROPERTIES
206 STDINT_H=stdint.h 230 STDINT_H=stdint.h
207 fi 231 fi
@@ -337,14 +361,16 @@ AC_DEFUN([gl_STDINT_INCLUDES],
337 included before <wchar.h>. */ 361 included before <wchar.h>. */
338 #include <stddef.h> 362 #include <stddef.h>
339 #include <signal.h> 363 #include <signal.h>
340 #include <stdio.h> 364 #if HAVE_WCHAR_H
341 #include <time.h> 365 # include <stdio.h>
342 #include <wchar.h> 366 # include <time.h>
367 # include <wchar.h>
368 #endif
343]]) 369]])
344 370
345dnl gl_STDINT_TYPE_PROPERTIES 371dnl gl_STDINT_TYPE_PROPERTIES
346dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t 372dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t
347dnl of interest to stdint_.h. 373dnl of interest to stdint.in.h.
348AC_DEFUN([gl_STDINT_TYPE_PROPERTIES], 374AC_DEFUN([gl_STDINT_TYPE_PROPERTIES],
349[ 375[
350 gl_STDINT_BITSIZEOF([ptrdiff_t sig_atomic_t size_t wchar_t wint_t], 376 gl_STDINT_BITSIZEOF([ptrdiff_t sig_atomic_t size_t wchar_t wint_t],