mirror of
https://github.com/postgres/postgres.git
synced 2025-10-16 17:07:43 +03:00
Raise C requirement to C11
This changes configure and meson.build to require at least C11,
instead of the previous C99. The installation documentation is
updated accordingly.
configure.ac previously used AC_PROG_CC_C99 to activate C99. But
there is no AC_PROG_CC_C11 in Autoconf 2.69, because it's too
old. (Also, post-2.69, the AC_PROG_CC_Cnn macros were deprecated and
AC_PROG_CC activates the last supported C mode.) We could update the
required Autoconf version, but that might be a separate project that
no one wants to undertake at the moment. Instead, we open-code the
test for C11 using some inspiration from later Autoconf versions. But
instead of writing an elaborate test program, we keep it simple and
just check __STDC_VERSION__, which should be good enough in practice.
In meson.build, we update the existing C99 test to C11, but again we
just check for __STDC_VERSION__.
This also removes the separate option for the conforming preprocessor
on MSVC, added by commit 8fd9bb1d96
, since that is activated
automatically in C11 mode.
Note, we don't use the "official" way to set the C standard in Meson
using the c_std project option, because that is impossible to use
correctly (see <https://github.com/mesonbuild/meson/issues/14717>).
Reviewed-by: David Rowley <dgrowleyml@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/01a69441-af54-4822-891b-ca28e05b215a@eisentraut.org
This commit is contained in:
@@ -71,10 +71,9 @@
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
You need an <acronym>ISO</acronym>/<acronym>ANSI</acronym> C compiler (at least
|
||||
C99-compliant). Recent
|
||||
versions of <productname>GCC</productname> are recommended, but
|
||||
<productname>PostgreSQL</productname> is known to build using a wide variety
|
||||
You need a C compiler that supports at least C11. Recent versions of
|
||||
<productname>GCC</productname> are recommended, but
|
||||
<productname>PostgreSQL</productname> is known to build using a variety
|
||||
of compilers from different vendors.
|
||||
</para>
|
||||
</listitem>
|
||||
|
@@ -907,12 +907,12 @@ BETTER: unrecognized node type: 42
|
||||
<title>C Standard</title>
|
||||
<para>
|
||||
Code in <productname>PostgreSQL</productname> should only rely on language
|
||||
features available in the C99 standard. That means a conforming
|
||||
C99 compiler has to be able to compile postgres, at least aside
|
||||
features available in the C11 standard. That means a conforming
|
||||
C11 compiler has to be able to compile postgres, at least aside
|
||||
from a few platform dependent pieces.
|
||||
</para>
|
||||
<para>
|
||||
A few features included in the C99 standard are, at this time, not
|
||||
A few features included in the C11 standard are, at this time, not
|
||||
permitted to be used in core <productname>PostgreSQL</productname>
|
||||
code. This currently includes variable length arrays, intermingled
|
||||
declarations and code, <literal>//</literal> comments, universal
|
||||
@@ -924,13 +924,11 @@ BETTER: unrecognized node type: 42
|
||||
features can be used, if a fallback is provided.
|
||||
</para>
|
||||
<para>
|
||||
For example <literal>_Static_assert()</literal> and
|
||||
For example <literal>typeof()</literal> and
|
||||
<literal>__builtin_constant_p</literal> are currently used, even though
|
||||
they are from newer revisions of the C standard and a
|
||||
<productname>GCC</productname> extension respectively. If not available
|
||||
we respectively fall back to using a C99 compatible replacement that
|
||||
performs the same checks, but emits rather cryptic messages and do not
|
||||
use <literal>__builtin_constant_p</literal>.
|
||||
we do not use them.
|
||||
</para>
|
||||
</simplesect>
|
||||
|
||||
|
Reference in New Issue
Block a user