From: "ntkme (Natsuki Natsume) via ruby-core" Date: 2025-05-16T22:18:02+00:00 Subject: [ruby-core:122158] [Ruby Bug#21340] Bump autoconf version to properly handle C23 bool/stdbool defines Issue #21340 has been updated by ntkme (Natsuki Natsume). google-protobuf is also failing to compile native extension on windows ruby head with msys2 gcc 15. ``` In file included from D:/rubyinstaller-head-x64/include/ruby-3.5.0+1/ruby/defines.h:74, from D:/rubyinstaller-head-x64/include/ruby-3.5.0+1/ruby/ruby.h:25, from D:/rubyinstaller-head-x64/include/ruby-3.5.0+1/ruby.h:38, from protobuf.h:13, from protobuf.c:8: D:/a/_temp/msys64/ucrt64/include/stralign.h: In function 'ua_CharUpperW': D:/rubyinstaller-head-x64/include/ruby-3.5.0+1/ruby/backward/2/bool.h:31:15: error: 'true' undeclared (first use in this function) 31 | # define TRUE true | ^~~~ ``` ---------------------------------------- Bug #21340: Bump autoconf version to properly handle C23 bool/stdbool defines https://bugs.ruby-lang.org/issues/21340#change-113308 * Author: christo (Chris Alberti) * Status: Open * ruby -v: 3.4.3, 3.5.0, any built with GCC 15 (so C23) * Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN ---------------------------------------- Right now if I install a recent release using rbenv or asdf, or manually download the latest release 3.4.3 or the preview 3.5.0, the included `./configure` seems to have been generated by an old version of autoconf. After running `./configure`, I end up with a `config.h` containing `HAVE__BOOL = 1`, but _not_ containing `HAVE_STD_BOOL_H = 1`. If I grab the source from github (latest, or 3.4.3 tag) and run autoconf myself (I'm currently on 2.72), I get a config.h with both `HAVE__BOOL = 1` and `HAVE_STD_BOOL_H = 1` defined. This ends up meaning that in the official releases, Ruby's internal/stdbool.h skips using and moves on to defining bool/true/false itself. This is not valid as of C23 (which is now default in GCC 15). On my end I found this because I was seeing build failures in the geoip2_compat gem related to issues with the bool type definition on GCC 15. I submitted a patch to the gem's repo for a workaround (include before ruby.h), but this might come back to bite other native extension gem compiles as well. It looks like autoconf was patched to fix the HAVE_STD_BOOL_H define for C23 in [this commit](https://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=6dcecb780a69bd208088d666b299e92aa7ae7e80;hp=f6657256a37da44c987c04bf9cd75575dfca3b60). I can tell that the ./configure included in the official ruby releases was created with an older version of autoconf because I still see the line: ``` Check for stdbool.h that conforms to C99 ``` rather than the updated version (which appears in my ./configure created with autoconf 2.72) ``` Check for stdbool.h that conforms to C99 or later ``` I'd happily submit a PR if the setup around packaging the official releases is public and someone can point me to it! I wasn't able to find it on a quick search. ---Files-------------------------------- config.h_GCC14 (14.7 KB) config.h_GCC15 (14.7 KB) -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/