diff options
Diffstat (limited to 'gl/m4/stdint.m4')
-rw-r--r-- | gl/m4/stdint.m4 | 72 |
1 files changed, 70 insertions, 2 deletions
diff --git a/gl/m4/stdint.m4 b/gl/m4/stdint.m4 index b4194c8a..a2e8bdd6 100644 --- a/gl/m4/stdint.m4 +++ b/gl/m4/stdint.m4 | |||
@@ -1,4 +1,4 @@ | |||
1 | # stdint.m4 serial 33 | 1 | # stdint.m4 serial 34 |
2 | dnl Copyright (C) 2001-2009 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2001-2009 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
@@ -201,7 +201,75 @@ struct s { | |||
201 | int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; | 201 | int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; |
202 | }; | 202 | }; |
203 | ]])], | 203 | ]])], |
204 | [gl_cv_header_working_stdint_h=yes])]) | 204 | [dnl Determine whether the various *_MIN, *_MAX macros are usable |
205 | dnl in preprocessor expression. We could do it by compiling a test | ||
206 | dnl program for each of these macros. It is faster to run a program | ||
207 | dnl that inspects the macro expansion. | ||
208 | dnl This detects a bug on HP-UX 11.23/ia64. | ||
209 | AC_RUN_IFELSE([ | ||
210 | AC_LANG_PROGRAM([[ | ||
211 | #define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ | ||
212 | #define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ | ||
213 | #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ | ||
214 | #include <stdint.h> | ||
215 | ] | ||
216 | gl_STDINT_INCLUDES | ||
217 | [ | ||
218 | #include <stdio.h> | ||
219 | #include <string.h> | ||
220 | #define MVAL(macro) MVAL1(macro) | ||
221 | #define MVAL1(expression) #expression | ||
222 | static const char *macro_values[] = | ||
223 | { | ||
224 | #ifdef INT8_MAX | ||
225 | MVAL (INT8_MAX), | ||
226 | #endif | ||
227 | #ifdef INT16_MAX | ||
228 | MVAL (INT16_MAX), | ||
229 | #endif | ||
230 | #ifdef INT32_MAX | ||
231 | MVAL (INT32_MAX), | ||
232 | #endif | ||
233 | #ifdef INT64_MAX | ||
234 | MVAL (INT64_MAX), | ||
235 | #endif | ||
236 | #ifdef UINT8_MAX | ||
237 | MVAL (UINT8_MAX), | ||
238 | #endif | ||
239 | #ifdef UINT16_MAX | ||
240 | MVAL (UINT16_MAX), | ||
241 | #endif | ||
242 | #ifdef UINT32_MAX | ||
243 | MVAL (UINT32_MAX), | ||
244 | #endif | ||
245 | #ifdef UINT64_MAX | ||
246 | MVAL (UINT64_MAX), | ||
247 | #endif | ||
248 | NULL | ||
249 | }; | ||
250 | ]], [[ | ||
251 | const char **mv; | ||
252 | for (mv = macro_values; *mv != NULL; mv++) | ||
253 | { | ||
254 | const char *value = *mv; | ||
255 | /* Test whether it looks like a cast expression. */ | ||
256 | if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 | ||
257 | || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 | ||
258 | || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 | ||
259 | || strncmp (value, "((int)"/*)*/, 6) == 0 | ||
260 | || strncmp (value, "((signed short)"/*)*/, 15) == 0 | ||
261 | || strncmp (value, "((signed char)"/*)*/, 14) == 0) | ||
262 | return 1; | ||
263 | } | ||
264 | return 0; | ||
265 | ]])], | ||
266 | [gl_cv_header_working_stdint_h=yes], | ||
267 | [], | ||
268 | [dnl When cross-compiling, assume it works. | ||
269 | gl_cv_header_working_stdint_h=yes | ||
270 | ]) | ||
271 | ]) | ||
272 | ]) | ||
205 | fi | 273 | fi |
206 | if test "$gl_cv_header_working_stdint_h" = yes; then | 274 | if test "$gl_cv_header_working_stdint_h" = yes; then |
207 | STDINT_H= | 275 | STDINT_H= |