Annotation of embedaddon/libiconv/srcm4/stdbool.m4, revision 1.1

1.1     ! misho       1: # Check for stdbool.h that conforms to C99.
        !             2: 
        !             3: dnl Copyright (C) 2002-2006, 2009 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])

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>