summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2009-03-01 13:57:40 -0800
committerH. Peter Anvin <hpa@zytor.com>2009-03-01 13:57:40 -0800
commit1fb908c0dbf5bdde4d4aaaf78b48b6520d52de4c (patch)
treef4850a76f97b9bdfa7885f56bba70e2285a045c4
parent16a856cd851858f80b1ef407d77f92df309e5909 (diff)
downloadnasm-1fb908c0dbf5bdde4d4aaaf78b48b6520d52de4c.tar.gz
nasm-1fb908c0dbf5bdde4d4aaaf78b48b6520d52de4c.tar.bz2
nasm-1fb908c0dbf5bdde4d4aaaf78b48b6520d52de4c.zip
autoconf: detect the broken bool in OpenWatcom 1.8
OpenWatcom 1.8 has a C99 mode, which implements _Bool and <stdbool.h>. Unfortunately the implementation is broken, and doesn't let _Bool be implicitly converted to integer (as required by the C99 spec). Detect this case in autoconf.
-rw-r--r--aclocal.m424
-rw-r--r--compiler.h2
-rw-r--r--configure.in1
3 files changed, 26 insertions, 1 deletions
diff --git a/aclocal.m4 b/aclocal.m4
index e25d13d..5159c11 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -13,3 +13,27 @@ AC_DEFUN(PA_ADD_CFLAGS,
AC_MSG_RESULT([no])
CFLAGS="$pa_add_cflags__old_cflags")])
+dnl --------------------------------------------------------------------------
+dnl PA_WORKING_STDBOOL
+dnl
+dnl See if we have a working <stdbool.h> and bool support; in particular,
+dnl OpenWatcom 1.8 has a broken _Bool type that we don't want to use.
+dnl --------------------------------------------------------------------------
+AC_DEFUN(PA_WORKING_BOOL,
+[AC_MSG_CHECKING([if $CC has a working bool type])
+ AC_COMPILE_IFELSE(
+ [
+#ifndef __cplusplus
+#include <stdbool.h>
+#endif
+int foo(bool x, int y)
+{
+ return x+y;
+}
+ ],
+ [AC_MSG_RESULT([yes])
+ AC_DEFINE(HAVE_WORKING_BOOL, 1,
+ [Define to 1 if your compiler has a correct implementation of bool])],
+ [AC_MSG_RESULT([no])])
+])
+
diff --git a/compiler.h b/compiler.h
index 5e7e8c4..2c4cc9d 100644
--- a/compiler.h
+++ b/compiler.h
@@ -78,7 +78,7 @@ int vsnprintf(char *, size_t, const char *, va_list);
#endif
#ifndef __cplusplus /* C++ has false, true, bool as keywords */
-# ifdef HAVE_STDBOOL_H
+# if defined(HAVE_STDBOOL_H) && defined(HAVE_WORKING_BOOL)
# include <stdbool.h>
# else
/* This is sort of dangerous, since casts will behave different than
diff --git a/configure.in b/configure.in
index 0d53653..b47675b 100644
--- a/configure.in
+++ b/configure.in
@@ -97,6 +97,7 @@ AC_C_CONST
AC_C_INLINE
AC_C_RESTRICT
AC_TYPE_SIZE_T
+PA_WORKING_BOOL
AC_C_BIGENDIAN(AC_DEFINE(WORDS_BIGENDIAN),AC_DEFINE(WORDS_LITTLEENDIAN))
AH_TEMPLATE(WORDS_BIGENDIAN,
[Define to 1 if your processor stores words with the most significant