Mercurial > hg-old > index.cgi
comparison m4/stdbool.m4 @ 272:d5392bb5da3c 2.5
Added generated files
author | lost |
---|---|
date | Sun, 16 Aug 2009 17:16:49 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
271:3b793ba7a6c6 | 272:d5392bb5da3c |
---|---|
1 # Check for stdbool.h that conforms to C99. | |
2 | |
3 dnl Copyright (C) 2002-2006 Free Software Foundation, Inc. | |
4 dnl This file is free software; the Free Software Foundation | |
5 dnl gives unlimited permission to copy and/or distribute it, | |
6 dnl with or without modifications, as long as this notice is preserved. | |
7 | |
8 # Prepare for substituting <stdbool.h> if it is not supported. | |
9 | |
10 AC_DEFUN([AM_STDBOOL_H], | |
11 [ | |
12 AC_REQUIRE([AC_HEADER_STDBOOL]) | |
13 | |
14 # Define two additional variables used in the Makefile substitution. | |
15 | |
16 if test "$ac_cv_header_stdbool_h" = yes; then | |
17 STDBOOL_H='' | |
18 else | |
19 STDBOOL_H='stdbool.h' | |
20 fi | |
21 AC_SUBST([STDBOOL_H]) | |
22 | |
23 if test "$ac_cv_type__Bool" = yes; then | |
24 HAVE__BOOL=1 | |
25 else | |
26 HAVE__BOOL=0 | |
27 fi | |
28 AC_SUBST([HAVE__BOOL]) | |
29 ]) | |
30 | |
31 # AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future. | |
32 AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H]) | |
33 | |
34 # This macro is only needed in autoconf <= 2.59. Newer versions of autoconf | |
35 # have this macro built-in. | |
36 | |
37 AC_DEFUN([AC_HEADER_STDBOOL], | |
38 [AC_CACHE_CHECK([for stdbool.h that conforms to C99], | |
39 [ac_cv_header_stdbool_h], | |
40 [AC_TRY_COMPILE( | |
41 [ | |
42 #include <stdbool.h> | |
43 #ifndef bool | |
44 "error: bool is not defined" | |
45 #endif | |
46 #ifndef false | |
47 "error: false is not defined" | |
48 #endif | |
49 #if false | |
50 "error: false is not 0" | |
51 #endif | |
52 #ifndef true | |
53 "error: true is not defined" | |
54 #endif | |
55 #if true != 1 | |
56 "error: true is not 1" | |
57 #endif | |
58 #ifndef __bool_true_false_are_defined | |
59 "error: __bool_true_false_are_defined is not defined" | |
60 #endif | |
61 | |
62 struct s { _Bool s: 1; _Bool t; } s; | |
63 | |
64 char a[true == 1 ? 1 : -1]; | |
65 char b[false == 0 ? 1 : -1]; | |
66 char c[__bool_true_false_are_defined == 1 ? 1 : -1]; | |
67 char d[(bool) 0.5 == true ? 1 : -1]; | |
68 bool e = &s; | |
69 char f[(_Bool) 0.0 == false ? 1 : -1]; | |
70 char g[true]; | |
71 char h[sizeof (_Bool)]; | |
72 char i[sizeof s.t]; | |
73 enum { j = false, k = true, l = false * true, m = true * 256 }; | |
74 _Bool n[m]; | |
75 char o[sizeof n == m * sizeof n[0] ? 1 : -1]; | |
76 char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; | |
77 #if defined __xlc__ || defined __GNUC__ | |
78 /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0 | |
79 reported by James Lemley on 2005-10-05; see | |
80 http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html | |
81 This test is not quite right, since xlc is allowed to | |
82 reject this program, as the initializer for xlcbug is | |
83 not one of the forms that C requires support for. | |
84 However, doing the test right would require a run-time | |
85 test, and that would make cross-compilation harder. | |
86 Let us hope that IBM fixes the xlc bug, and also adds | |
87 support for this kind of constant expression. In the | |
88 meantime, this test will reject xlc, which is OK, since | |
89 our stdbool.h substitute should suffice. We also test | |
90 this with GCC, where it should work, to detect more | |
91 quickly whether someone messes up the test in the | |
92 future. */ | |
93 char digs[] = "0123456789"; | |
94 int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1); | |
95 #endif | |
96 /* Catch a bug in an HP-UX C compiler. See | |
97 http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html | |
98 http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html | |
99 */ | |
100 _Bool q = true; | |
101 _Bool *pq = &q; | |
102 ], | |
103 [ | |
104 *pq |= q; | |
105 *pq |= ! q; | |
106 /* Refer to every declared value, to avoid compiler optimizations. */ | |
107 return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l | |
108 + !m + !n + !o + !p + !q + !pq); | |
109 ], | |
110 [ac_cv_header_stdbool_h=yes], | |
111 [ac_cv_header_stdbool_h=no])]) | |
112 AC_CHECK_TYPES([_Bool]) | |
113 if test $ac_cv_header_stdbool_h = yes; then | |
114 AC_DEFINE(HAVE_STDBOOL_H, 1, [Define to 1 if stdbool.h conforms to C99.]) | |
115 fi]) |