]> Savannah Git Hosting - gnulib.git/commitdiff
stdbool: Don't #include a gnulib-generated stdbool.h from config.h.
authorBruno Haible <bruno@clisp.org>
Sat, 24 Sep 2022 21:42:44 +0000 (23:42 +0200)
committerBruno Haible <bruno@clisp.org>
Sat, 24 Sep 2022 22:46:37 +0000 (00:46 +0200)
* m4/c-bool.m4 (gl_C_BOOL): Check for stdbool.h and for _Bool. If
stdbool.h does not exist, don't #include <stdbool.h> but instead put the
substitute code into config.h.

ChangeLog
m4/c-bool.m4
modules/stdbool

index 76287c50229a3a723121a34a9fdebc535fa15f1b..1c54eabb49e3d4a6b42e083a246c6ffe0da1a99b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2022-09-24  Bruno Haible  <bruno@clisp.org>
+
+       stdbool: Don't #include a gnulib-generated stdbool.h from config.h.
+       * m4/c-bool.m4 (gl_C_BOOL): Check for stdbool.h and for _Bool. If
+       stdbool.h does not exist, don't #include <stdbool.h> but instead put the
+       substitute code into config.h.
+
 2022-09-24  Bruno Haible  <bruno@clisp.org>
 
        stdalign: Don't #include a gnulib-generated stdalign.h from config.h.
index 67c2cf26215c2fba53039ae6d50e90e166ab9582..129981d2f7e709d6e9e38aa3a6804d74ff7cd6a8 100644 (file)
@@ -22,6 +22,10 @@ AC_DEFUN([gl_C_BOOL],
       [Define to 1 if bool, true and false work as per C2023.])
   fi
 
+  AC_CHECK_HEADERS_ONCE([stdbool.h])
+  AC_REQUIRE([AC_CHECK_HEADER_STDBOOL])
+  AC_DEFINE_UNQUOTED([HAVE__BOOL],[$HAVE__BOOL])
+
   dnl The "zz" puts this toward config.h's end, to avoid potential
   dnl collisions with other definitions.
   dnl If 'bool', 'true' and 'false' do not work, arrange for them to work.
@@ -32,7 +36,43 @@ AC_DEFUN([gl_C_BOOL],
   AH_VERBATIM([zzbool],
 [#ifndef HAVE_C_BOOL
 # if !defined __cplusplus && !defined __bool_true_false_are_defined
-#  include <stdbool.h>
+#  if HAVE_STDBOOL_H
+#   include <stdbool.h>
+#  else
+    /* Substitute.  Keep consistent with gnulib/lib/stdbool.in.h.  */
+#   ifndef _GL_STDBOOL_H
+#    define _GL_STDBOOL_H
+#    ifdef __cplusplus
+#     if !defined _MSC_VER
+#      define _Bool bool
+#      define bool bool
+#     endif
+#    else
+#     if !defined __GNUC__
+#      define _Bool signed char
+#     else
+#      if !HAVE__BOOL
+typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool;
+#      endif
+#     endif
+#     define bool _Bool
+#    endif
+#    ifdef __cplusplus
+#     if !defined _MSC_VER
+#      define false false
+#      define true true
+#     endif
+#     if defined __SUNPRO_CC && true != 1
+#      undef true
+#      define true (!false)
+#     endif
+#    else
+#     define false 0
+#     define true 1
+#    endif
+#    define __bool_true_false_are_defined 1
+#   endif /* _GL_STDBOOL_H */
+#  endif
 # endif
 # if !true
 #  define true (!false)
index 2e771a23369385cf4378d8e18302cc4023561bdb..664df5e0f8f00aa18c9e7d1d53627bfd98c8b49d 100644 (file)
@@ -3,6 +3,7 @@ A bool that is like C23.
 
 Files:
 m4/c-bool.m4
+m4/stdbool.m4
 
 Depends-on:
 c99