From: Zack Weinberg Date: Sun, 10 Jul 2022 16:06:11 +0000 (-0400) Subject: Fix testsuite failures on Darwin (aka macOS). X-Git-Tag: v2.72c~46 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=56b21590f64b85bf69ce6a264975a0f3ef0fb2f9;p=thirdparty%2Fautoconf.git Fix testsuite failures on Darwin (aka macOS). Tests of AC_{CHECK_,}HEADER_STDBOOL were failing on Darwin for two reasons: an m4 quoting bug in tests/local.at causing Darwin sed to throw syntax errors, and an excessively precise interpretation of how C99 and C++11 interact. The latter is worth mentioning in NEWS. * tests/local.at (_AT_DEFINES_CMP_PRUNE): Insert [] before ‘dnl’ in two places to keep it separate from the result of the m4_bpatsubsts operation that immediately precedes it. * lib/autoconf/headers.m4 (AC_CHECK_HEADER_STDBOOL): Allow ‘bool’, ‘true’, and ‘false’ not to be macros, after including stdbool.h, whenever __cplusplus is defined. * NEWS: Document change to AC_{CHECK_,}HEADER_STDBOOL. --- diff --git a/NEWS b/NEWS index a8475707..ef0f5f83 100644 --- a/NEWS +++ b/NEWS @@ -39,6 +39,19 @@ GNU Autoconf NEWS - User visible changes. represent cache file timestamps, thus avoiding some problems where automake incorrectly decides not to regenerate stale caches. +*** AC_HEADER_STDBOOL and AC_CHECK_HEADER_STDBOOL are less picky. + + When compiling C++, a ‘stdbool.h’ that exists, but does nothing, is + acceptable no matter what version of the C++ standard is in use. + + (ISO C++ 2011 says that ‘stdbool.h’ should exist for compatibility + with C, but should *not* define ‘bool’, ‘true’, or ‘false’ as + macros. ISO C++ 1998 doesn’t mention ‘stdbool.h’ at all. Some C++ + compilers implement the 2011 rule in their C++98 mode as well. + ‘bool’, ‘true’, and ‘false’ have been built into the C++ language + since the beginning, so a ‘stdbool.h’ that exists but does nothing + should be fine for all reasonable C++ programs.) + * Noteworthy changes in release 2.71 (2021-01-28) [stable] ** Bug fixes, including: diff --git a/lib/autoconf/headers.m4 b/lib/autoconf/headers.m4 index 8944da41..5cd1f4d5 100644 --- a/lib/autoconf/headers.m4 +++ b/lib/autoconf/headers.m4 @@ -633,8 +633,10 @@ AC_DEFUN([AC_CHECK_HEADER_STDBOOL], bool *pp = &p; /* C 1999 specifies that bool, true, and false are to be - macros, but C++ 2011 and later overrule this. */ - #if __cplusplus < 201103 + macros, but C++ 2011 overrules this. The C++ committee + was codifying existing practice, so we allow them to + not be macros whenever __cplusplus is defined. */ + #ifndef __cplusplus #ifndef bool #error "bool is not defined" #endif diff --git a/tests/local.at b/tests/local.at index 3f348929..f79f57ff 100644 --- a/tests/local.at +++ b/tests/local.at @@ -593,9 +593,9 @@ AT_CMP([at_defines-$1], [at_defines-$2])[]dnl m4_define([_AT_DEFINES_CMP_PRUNE], [m4_bmatch([$1], [^vary:], -[ /@%:@define ]m4_bpatsubsts([$1], [\@/ d ;@%:@@:}@ - /@%:@undef ]m4_bpatsubsts([$1], [\@/ d ;@%:@@:}@ ], [m4_fatal([unrecognized AT_DEFINES_CMP variance token: "$1"])])])