mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-01 08:17:38 +00:00
f6fb2b9e1f
C23 is adding the C++ keywords bool, true, and false; prefer them to <stdbool.h> if they are available. * admin/merge-gnulib (GNULIB_MODULES): Add stdbool, which emulates C23 on pre-C23 platforms. (AVOIDED_MODULES): Remove stdbool; Gnulib has renamed this module to stdbool-c99 and nobody uses it so it does not need to be avoided. * m4/c-bool.m4: New file, from Gnulib stdbool module. * lib-src/seccomp-filter.c, src/conf_post.h, src/dynlib.h: * src/emacs-module.c, src/nsterm.m, src/systhread.h: * test/src/emacs-module-resources/mod-test.c: Use the C23 style and use bool without including <stdbool.h>. The Gnulib stdbool module causes config.h to include stdbool.h on pre-C23 platforms. * src/emacs-module.h.in: Don’t include <stdbool.h> if C23 or later, or if it has already been included.
52 lines
1.7 KiB
Plaintext
52 lines
1.7 KiB
Plaintext
# Check for bool that conforms to C2023.
|
|
|
|
dnl Copyright 2022 Free Software Foundation, Inc.
|
|
dnl This file is free software; the Free Software Foundation
|
|
dnl gives unlimited permission to copy and/or distribute it,
|
|
dnl with or without modifications, as long as this notice is preserved.
|
|
|
|
AC_DEFUN([gl_C_BOOL],
|
|
[
|
|
AC_CACHE_CHECK([for bool, true, false], [gl_cv_c_bool],
|
|
[AC_COMPILE_IFELSE(
|
|
[AC_LANG_SOURCE([[
|
|
#if true == false
|
|
#error "true == false"
|
|
#endif
|
|
extern bool b;
|
|
bool b = true == false;]])],
|
|
[gl_cv_c_bool=yes],
|
|
[gl_cv_c_bool=no])])
|
|
if test "$gl_cv_c_bool" = yes; then
|
|
AC_DEFINE([HAVE_C_BOOL], [1],
|
|
[Define to 1 if bool, true and false work as per C2023.])
|
|
fi
|
|
|
|
AC_CHECK_HEADERS_ONCE([stdbool.h])
|
|
|
|
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.
|
|
dnl In C, this means including <stdbool.h> if it is not already included.
|
|
dnl However, if the preprocessor mistakenly treats 'true' as 0,
|
|
dnl define it to a bool expression equal to 1; this is needed in
|
|
dnl Sun C++ 5.11 (Oracle Solaris Studio 12.2, 2010) and older.
|
|
AH_VERBATIM([zzbool],
|
|
[#ifndef HAVE_C_BOOL
|
|
# if !defined __cplusplus && !defined __bool_true_false_are_defined
|
|
# if HAVE_STDBOOL_H
|
|
# include <stdbool.h>
|
|
# else
|
|
# if defined __SUNPRO_C
|
|
# error "<stdbool.h> is not usable with this configuration. To make it usable, add -D_STDC_C99= to $CC."
|
|
# else
|
|
# error "<stdbool.h> does not exist on this platform. Use gnulib module 'stdbool-c99' instead of gnulib module 'stdbool'."
|
|
# endif
|
|
# endif
|
|
# endif
|
|
# if !true
|
|
# define true (!false)
|
|
# endif
|
|
#endif])
|
|
])
|