1 | # Check for bool that conforms to C2023.
|
---|
2 |
|
---|
3 | dnl Copyright 2022 Free Software Foundation, Inc.
|
---|
4 | dnl This file is free software; the Free Software Foundation
|
---|
5 | dnl gives unlimited permission to copy and/or distribute it,
|
---|
6 | dnl with or without modifications, as long as this notice is preserved.
|
---|
7 |
|
---|
8 | AC_DEFUN([gl_C_BOOL],
|
---|
9 | [
|
---|
10 | AC_CACHE_CHECK([for bool, true, false], [gl_cv_c_bool],
|
---|
11 | [AC_COMPILE_IFELSE(
|
---|
12 | [AC_LANG_SOURCE([[
|
---|
13 | #if true == false
|
---|
14 | #error "true == false"
|
---|
15 | #endif
|
---|
16 | extern bool b;
|
---|
17 | bool b = true == false;]])],
|
---|
18 | [gl_cv_c_bool=yes],
|
---|
19 | [gl_cv_c_bool=no])])
|
---|
20 | if test "$gl_cv_c_bool" = yes; then
|
---|
21 | AC_DEFINE([HAVE_C_BOOL], [1],
|
---|
22 | [Define to 1 if bool, true and false work as per C2023.])
|
---|
23 | fi
|
---|
24 |
|
---|
25 | AC_CHECK_HEADERS_ONCE([stdbool.h])
|
---|
26 |
|
---|
27 | dnl The "zz" puts this toward config.h's end, to avoid potential
|
---|
28 | dnl collisions with other definitions.
|
---|
29 | dnl If 'bool', 'true' and 'false' do not work, arrange for them to work.
|
---|
30 | dnl In C, this means including <stdbool.h> if it is not already included.
|
---|
31 | dnl However, if the preprocessor mistakenly treats 'true' as 0,
|
---|
32 | dnl define it to a bool expression equal to 1; this is needed in
|
---|
33 | dnl Sun C++ 5.11 (Oracle Solaris Studio 12.2, 2010) and older.
|
---|
34 | AH_VERBATIM([zzbool],
|
---|
35 | [#ifndef HAVE_C_BOOL
|
---|
36 | # if !defined __cplusplus && !defined __bool_true_false_are_defined
|
---|
37 | # if HAVE_STDBOOL_H
|
---|
38 | # include <stdbool.h>
|
---|
39 | # else
|
---|
40 | # if defined __SUNPRO_C
|
---|
41 | # error "<stdbool.h> is not usable with this configuration. To make it usable, add -D_STDC_C99= to $CC."
|
---|
42 | # else
|
---|
43 | # error "<stdbool.h> does not exist on this platform. Use gnulib module 'stdbool-c99' instead of gnulib module 'stdbool'."
|
---|
44 | # endif
|
---|
45 | # endif
|
---|
46 | # endif
|
---|
47 | # if !true
|
---|
48 | # define true (!false)
|
---|
49 | # endif
|
---|
50 | #endif])
|
---|
51 | ])
|
---|