
Issue #21340 has been updated by alanwu (Alan Wu). Status changed from Open to Closed Backport changed from 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN to 3.2: WONTFIX, 3.3: REQUIRED, 3.4: REQUIRED Thanks! commit:2297afda7ff3926c51fea700dfbf0f0eb4fea1e5 should also work for the 3.3 branch since it also requires VC 2015. #19982 ---------------------------------------- Bug #21340: Bump autoconf version to properly handle C23 bool/stdbool defines https://bugs.ruby-lang.org/issues/21340#change-113383 * Author: christo (Chris Alberti) * Status: Closed * ruby -v: 3.4.3, 3.5.0, any built with GCC 15 (so C23) * Backport: 3.2: WONTFIX, 3.3: REQUIRED, 3.4: REQUIRED ---------------------------------------- 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 <stdbool.h> 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 <stdbool.h> 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=6dcecb780...). 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/