summaryrefslogtreecommitdiff
path: root/configure.in
diff options
context:
space:
mode:
authorThomas Munro2024-11-27 02:43:18 +0000
committerThomas Munro2024-11-27 03:31:41 +0000
commit0c7171b32e6407c9ed65a444d0a104d0770d957d (patch)
treeda7933bd70f6eb5d5603e5e02bf7989f29b7909a /configure.in
parent1c417311692a15aca0c295e1570e93b6f84ae82a (diff)
If a C23 compiler is detected, try asking for C17.REL9_2_STABLE
Branches before 16 can't be compiled with a C23 compiler (see deprecation warnings silenced by commit f9a56e72, and non-back-patchable changes made in 16 by commit 1c27d16e). Test __STDC_VERSION__, and if it's above C17 then try appending -std=gnu17. The test is done with the user's CFLAGS, so an acceptable language version can also be configured manually that way. This is done in branches 15 and older, back to 9.2, per policy of keeping them buildable with modern tools. Discussion: https://postgr.es/m/87o72eo9iu.fsf%40gentoo.org
Diffstat (limited to 'configure.in')
-rw-r--r--configure.in20
1 files changed, 20 insertions, 0 deletions
diff --git a/configure.in b/configure.in
index 93d62944db6..f08f78d20da 100644
--- a/configure.in
+++ b/configure.in
@@ -407,6 +407,26 @@ else
fi
fi
+# We use C constructs that became invalid in C23. Check if the compiler
+# reports a standard higher than C17, with the flags selected above (so the
+# user can control the language level explicitly to avoid the gcc/clang-only
+# fallback logic below if preferred).
+AC_MSG_CHECKING([whether $CC reports a C standard higher than ISO C17])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [@%:@if __STDC_VERSION__ > 201710L
+choke me
+@%:@endif])], [POSTC17=no], [POSTC17=yes])
+AC_MSG_RESULT(${POSTC17})
+
+# If a too recent standard was detected with the user's CFLAGS, try asking for
+# C17 with GNU extensions explicitly.
+if test "$POSTC17" = yes; then
+ old_CFLAGS="$CFLAGS"
+ PGAC_PROG_CC_CFLAGS_OPT([-std=gnu17])
+ if test "$CFLAGS" = "$old_CFLAGS"; then
+ AC_MSG_ERROR([cannot proceed])
+ fi
+fi
+
# Some versions of GCC support some additional useful warning flags.
# Check whether they are supported, and add them to CFLAGS if so.
# ICC pretends to be GCC but it's lying; it doesn't support these flags,