# stdbool.m4 serial 3 (gettext-0.12)
dnl Copyright (C) 2001-2003 Free Software Foundation, Inc.
dnl This file is free software, distributed under the terms of the GNU
dnl General Public License.  As a special exception to the GNU General
dnl Public License, this file may be distributed as part of a program
dnl that contains a configuration script generated by Autoconf, under
dnl the same distribution terms as the rest of that program.

dnl From Bruno Haible.
dnl Test whether <stdbool.h> is supported or must be substituted.

AC_DEFUN([gt_STDBOOL_H],
[dnl gcc 2.95.2 has an <stdbool.h> for which both 'true' and 'false' evaluate
dnl to 0 in preprocessor expressions.
dnl HP-UX 11 cc has an <stdbool.h> but the compiler doesn't understand the
dnl type '_Bool' (to which 'bool' expands).
AC_MSG_CHECKING([for stdbool.h])
AC_CACHE_VAL(gt_cv_header_stdbool_h, [
  AC_TRY_COMPILE([#include <stdbool.h>
#if false
int A[-1];
#endif
#define b -1
#if true
#undef b
#define b 1
#endif
int B[b];
bool c;
], [], gt_cv_header_stdbool_h=yes, gt_cv_header_stdbool_h=no)])
AC_MSG_RESULT([$gt_cv_header_stdbool_h])
if test $gt_cv_header_stdbool_h = yes; then
  AC_DEFINE(HAVE_STDBOOL_H, 1,
            [Define if you have a working <stdbool.h> header file.])
  STDBOOL_H=''
else
  STDBOOL_H='stdbool.h'
  AC_MSG_CHECKING([for _Bool type])
  AC_CACHE_VAL(gt_cv_type_Bool, [
    AC_TRY_COMPILE([_Bool x = sizeof (_Bool);], [],
      gt_cv_type_Bool=yes, gt_cv_type_Bool=no)])
  AC_MSG_RESULT([$gt_cv_type_Bool])
  if test $gt_cv_type_Bool = yes; then
    HAVE__BOOL=1
  else
    HAVE__BOOL=0
  fi
  AC_SUBST(HAVE__BOOL)
fi
AC_SUBST(STDBOOL_H)
])
