mirror of
git://git.sv.gnu.org/autoconf
synced 2024-11-21 01:01:48 +08:00
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.
This commit is contained in:
parent
db7205a864
commit
56b21590f6
13
NEWS
13
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:
|
||||
|
@ -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
|
||||
|
@ -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], [\<vary:], [])dnl
|
||||
[ /@%:@define ]m4_bpatsubsts([$1], [\<vary:], [])[]dnl
|
||||
[@<:@ @{:@@:>@/ d ;@%:@@:}@
|
||||
/@%:@undef ]m4_bpatsubsts([$1], [\<vary:], [])dnl
|
||||
/@%:@undef ]m4_bpatsubsts([$1], [\<vary:], [])[]dnl
|
||||
[@<:@ @{:@@:>@/ d ;@%:@@:}@
|
||||
],
|
||||
[m4_fatal([unrecognized AT_DEFINES_CMP variance token: "$1"])])])
|
||||
|
Loading…
Reference in New Issue
Block a user