I very much like the idea of having a macro like this, but I worry about the fact that it creates a file stdbool.h. Suppose that file is left around from a previous build: won't that possibly screw up the next build if it doesn't want stdbool.h? Surely the output file should be removed before the test is run; it should also be removed if config.status is run.
Also, the shell var STDBOOL_H doesn't seem right: shouldn't it have a reserved prefix? And I don't see how it's propagated from configure to config.status. There also seem to be some m4 quoting issues, as usual.... Some minor quibbles. Please replace: #ifdef __BEOS__ # undef false # undef true #endif with: #ifdef false # undef false #endif #ifdef true # undef true #endif so that the code is not BeOS-specific. The following code seems pretty verbose: #if false int A[-1]; #endif #define b -1 #if true #undef b #define b 1 #endif int B[b]; and also it doesn't check that bool is defined and is a valid type. Wouldn't the following be shorter and clearer? bool a1[false || !true ? -1 : 1]; #if !defined false || !true || !defined bool int a2[-1]; #endif The documentation is a little unclear and its indexing isn't right. Here's a suggested rewrite: @defmac AC_HEADER_STDBOOL (@var{directory}) @acindex HEADER_STDBOOL If @file{stdbool.h} does not work correctly, create a file @file{@var{directory}/stdbool.h} (default @file{./stdbool.h}) that does work. This macro invokes @code{AC_CONFIG_COMMANDS} so it is an instantiating macro; see @ref{Configuration Actions}. @end defmac