~ubuntu-branches/ubuntu/quantal/gnutls26/quantal-security

« back to all changes in this revision

Viewing changes to gl/m4/stdbool.m4

  • Committer: Bazaar Package Importer
  • Author(s): Steve Langasek
  • Date: 2011-05-20 13:07:18 UTC
  • mfrom: (12.1.11 sid)
  • Revision ID: james.westby@ubuntu.com-20110520130718-db41dybbanzfvlji
Tags: 2.10.5-1ubuntu1
* Merge from Debian unstable, remaining changes:
  - Fix build failure with --no-add-needed.
  - Build for multiarch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# Check for stdbool.h that conforms to C99.
2
2
 
3
 
dnl Copyright (C) 2002-2006, 2009 Free Software Foundation, Inc.
 
3
dnl Copyright (C) 2002-2006, 2009-2010 Free Software Foundation, Inc.
4
4
dnl This file is free software; the Free Software Foundation
5
5
dnl gives unlimited permission to copy and/or distribute it,
6
6
dnl with or without modifications, as long as this notice is preserved.
38
38
  [AC_CACHE_CHECK([for stdbool.h that conforms to C99],
39
39
     [ac_cv_header_stdbool_h],
40
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])])
 
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
112
   AC_CHECK_TYPES([_Bool])
113
113
   if test $ac_cv_header_stdbool_h = yes; then
114
114
     AC_DEFINE([HAVE_STDBOOL_H], [1], [Define to 1 if stdbool.h conforms to C99.])