This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Probe for <stdbool.h>, and if found use it in handy.h
authorNicholas Clark <nick@ccl4.org>
Wed, 14 Sep 2011 12:03:31 +0000 (14:03 +0200)
committerH.Merijn Brand <h.m.brand@xs4all.nl>
Fri, 16 Sep 2011 11:32:37 +0000 (13:32 +0200)
This means that the core uses the compiler's bool type if one exists.
This avoids potential problems of clashes between perl's own implementation
of bool and the compiler's bool type, which otherwise occur when one
attempts to include headers which in turn include <stdbool.h>.

Signed-off-by: H.Merijn Brand <h.m.brand@xs4all.nl>
19 files changed:
Configure
Cross/config.sh-arm-linux
Porting/Glossary
Porting/config.sh
Porting/config_H
config_h.SH
epoc/config.sh
handy.h
plan9/config_sh.sample
symbian/config.sh
uconfig.h
uconfig.sh
uconfig64.sh
win32/config.ce
win32/config.gc
win32/config.gc64
win32/config.gc64nox
win32/config.vc
win32/config.vc64

index 74450a9..d9cdd03 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -926,6 +926,7 @@ i_pwd=''
 i_sfio=''
 i_shadow=''
 i_socks=''
+i_stdbool=''
 i_stddef=''
 i_stdlib=''
 i_string=''
@@ -21764,6 +21765,10 @@ set i_termio; eval $setvar
 val=$val2; set i_sgtty; eval $setvar
 val=$val3; set i_termios; eval $setvar
 
+: see if stdbool is available
+set stdbool.h i_stdbool
+eval $inhdr
+
 : see if stddef is available
 set stddef.h i_stddef
 eval $inhdr
@@ -23051,6 +23056,7 @@ i_sgtty='$i_sgtty'
 i_shadow='$i_shadow'
 i_socks='$i_socks'
 i_stdarg='$i_stdarg'
+i_stdbool='$i_stdbool'
 i_stddef='$i_stddef'
 i_stdlib='$i_stdlib'
 i_string='$i_string'
index acbc403..fe81fd9 100644 (file)
@@ -676,6 +676,7 @@ i_sgtty='undef'
 i_shadow='define'
 i_socks='undef'
 i_stdarg='define'
+i_stdbool='undef'
 i_stddef='define'
 i_stdlib='define'
 i_string='define'
index 9134dfa..ceed6a5 100644 (file)
@@ -3164,6 +3164,11 @@ i_stdarg (i_varhdr.U):
        indicates to the C program that <stdarg.h> exists and should
        be included.
 
+i_stdbool (i_stdbool.U):
+       This variable conditionally defines the I_STDBOOL symbol, which
+       indicates to the C program that <stdbool.h> exists and should
+       be included.
+
 i_stddef (i_stddef.U):
        This variable conditionally defines the I_STDDEF symbol, which
        indicates to the C program that <stddef.h> exists and should
index eb9db2a..d66b9f4 100644 (file)
@@ -693,6 +693,7 @@ i_sgtty='undef'
 i_shadow='define'
 i_socks='undef'
 i_stdarg='define'
+i_stdbool='undef'
 i_stddef='define'
 i_stdlib='define'
 i_string='define'
index 190ea8e..6ad9bc9 100644 (file)
  */
 /*#define      I_SFIO          / **/
 
+/* I_STDBOOL:
+ *     This symbol, if defined, indicates that <stdbool.h> exists and should
+ *     be included.
+ */
+/*#define I_STDBOOL    / **/
+
 /* I_STDDEF:
  *     This symbol, if defined, indicates that <stddef.h> exists and should
  *     be included.
index 96748fa..f11612b 100755 (executable)
@@ -742,6 +742,12 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
  */
 #$i_sfio       I_SFIO          /**/
 
+/* I_STDBOOL:
+ *     This symbol, if defined, indicates that <stdbool.h> exists and should
+ *     be included.
+ */
+#$i_stdbool I_STDBOOL  /**/
+
 /* I_STDDEF:
  *     This symbol, if defined, indicates that <stddef.h> exists and should
  *     be included.
index faabef5..a971d13 100644 (file)
@@ -620,6 +620,7 @@ i_sgtty='undef'
 i_shadow='undef'
 i_socks='undef'
 i_stdarg='define'
+i_stdbool='undef'
 i_stddef='define'
 i_stdlib='define'
 i_string='define'
diff --git a/handy.h b/handy.h
index b75eafb..5e30512 100644 (file)
--- a/handy.h
+++ b/handy.h
@@ -70,10 +70,13 @@ Null SV pointer. (No longer available when C<PERL_CORE> is defined.)
 #define MUTABLE_IO(p)  ((IO *)MUTABLE_PTR(p))
 #define MUTABLE_SV(p)  ((SV *)MUTABLE_PTR(p))
 
-/* XXX Configure ought to have a test for a boolean type, if I can
-   just figure out all the headers such a test needs.
-   Andy Dougherty      August 1996
-*/
+#ifdef I_STDBOOL
+#  include <stdbool.h>
+#  ifndef HAS_BOOL
+#    define HAS_BOOL 1
+#  endif
+#endif
+
 /* bool is built-in for g++-2.6.3 and later, which might be used
    for extensions.  <_G_config.h> defines _G_HAVE_BOOL, but we can't
    be sure _G_config.h will be included before this file.  _G_config.h
index 98daaa6..a5e793f 100644 (file)
@@ -670,6 +670,7 @@ i_sgtty='undef'
 i_shadow='undef'
 i_socks='undef'
 i_stdarg='define'
+i_stdbool='undef'
 i_stddef='define'
 i_stdlib='define'
 i_string='define'
index 2e531ae..0641b63 100644 (file)
@@ -597,6 +597,7 @@ i_sgtty='undef'
 i_shadow='undef'
 i_socks='undef'
 i_stdarg='define'
+i_stdbool='undef'
 i_stddef='undef'
 i_stdlib='define'
 i_string='define'
index a745017..4d0b3f2 100644 (file)
--- a/uconfig.h
+++ b/uconfig.h
  */
 /*#define      I_SFIO          / **/
 
+/* I_STDBOOL:
+ *     This symbol, if defined, indicates that <stdbool.h> exists and should
+ *     be included.
+ */
+/*#define I_STDBOOL    / **/
+
 /* I_STDDEF:
  *     This symbol, if defined, indicates that <stddef.h> exists and should
  *     be included.
 #endif
 
 /* Generated from:
- * 31a462b40046313b877734092b49f853190d949d609c56fc0f03085f3aedc382 config_h.SH
- * 9ea5c7e8b0b32c76caab5a89a371b8cdce6efcf690a5a74962b9b856fab49fed uconfig.sh
+ * e73735b63cc1e7874e6402c8348f594458a1f16be24703d0e14ba9516f2b20df config_h.SH
+ * 572c1e5ebb7563dcf5fa02c1ff0b1ca588d8aab1d52e0ffed24245c95dc7a137 uconfig.sh
  * ex: set ro: */
index 1798d0d..0f047ae 100644 (file)
@@ -584,6 +584,7 @@ i_sgtty='undef'
 i_shadow='undef'
 i_socks='undef'
 i_stdarg='define'
+i_stdbool='undef'
 i_stddef='define'
 i_stdlib='define'
 i_string='define'
index 3878431..7d94741 100644 (file)
@@ -585,6 +585,7 @@ i_sgtty='undef'
 i_shadow='undef'
 i_socks='undef'
 i_stdarg='define'
+i_stdbool='undef'
 i_stddef='define'
 i_stdlib='define'
 i_string='define'
index 47eeb71..4f76437 100644 (file)
@@ -657,6 +657,7 @@ i_sgtty='undef'
 i_shadow='undef'
 i_socks='undef'
 i_stdarg='define'
+i_stdbool='undef'
 i_stddef='define'
 i_stdlib='define'
 i_string='define'
index c49a27b..8c00871 100644 (file)
@@ -665,6 +665,7 @@ i_sgtty='undef'
 i_shadow='undef'
 i_socks='undef'
 i_stdarg='define'
+i_stdbool='undef'
 i_stddef='define'
 i_stdlib='define'
 i_string='define'
index 52185f0..d225638 100644 (file)
@@ -666,6 +666,7 @@ i_sgtty='undef'
 i_shadow='undef'
 i_socks='undef'
 i_stdarg='define'
+i_stdbool='undef'
 i_stddef='define'
 i_stdlib='define'
 i_string='define'
index 9a797a1..4ad66fa 100644 (file)
@@ -666,6 +666,7 @@ i_sgtty='undef'
 i_shadow='undef'
 i_socks='undef'
 i_stdarg='define'
+i_stdbool='undef'
 i_stddef='define'
 i_stdlib='define'
 i_string='define'
index 3495a23..74ae275 100644 (file)
@@ -665,6 +665,7 @@ i_sgtty='undef'
 i_shadow='undef'
 i_socks='undef'
 i_stdarg='define'
+i_stdbool='undef'
 i_stddef='define'
 i_stdlib='define'
 i_string='define'
index c9b1cb7..ac5e61e 100644 (file)
@@ -665,6 +665,7 @@ i_sgtty='undef'
 i_shadow='undef'
 i_socks='undef'
 i_stdarg='define'
+i_stdbool='undef'
 i_stddef='define'
 i_stdlib='define'
 i_string='define'