Fix header inclusion order in c.h.
authorThomas Munro <[email protected]>
Thu, 5 Dec 2024 01:27:35 +0000 (14:27 +1300)
committerThomas Munro <[email protected]>
Thu, 5 Dec 2024 01:31:39 +0000 (14:31 +1300)
Commit 962da900a added #include <stdint.h> to postgres_ext.h, which
broke c.h's header ordering rule.

The system headers on some systems would then lock down off_t's size in
private macros, before they'd had a chance to see our definition of
_FILE_OFFSET_BITS (and presumably other things).  This was picked up by
perl's ABI compatibility checks on some 32 bit systems in the build
farm.

Move #include "postgres_ext.h" down below the system header section, and
make the comments clearer (thanks to Tom for the new wording).

Diagnosed-by: Tom Lane <[email protected]>
Discussion: https://postgr.es/m/2397643.1733347237%40sss.pgh.pa.us

src/include/c.h

index 734626e75a830b410e4b492d85aa62f828d286ae..13bb39fdef3e89336b63ebabf7275903cf4b3e62 100644 (file)
 #ifndef C_H
 #define C_H
 
-#include "postgres_ext.h"
-
+/*
+ * These headers must be included before any system headers, because on some
+ * platforms they affect the behavior of the system headers (for example, by
+ * defining _FILE_OFFSET_BITS).
+ */
 #include "pg_config.h"
 #include "pg_config_manual.h"  /* must be after pg_config.h */
-#include "pg_config_os.h"      /* must be before any system header files */
+#include "pg_config_os.h"      /* config from include/port/PORTNAME.h */
 
 /* System header files that should be available everywhere in Postgres */
 #include <inttypes.h>
@@ -76,6 +79,9 @@
 #include <libintl.h>
 #endif
 
+ /* Pull in fundamental symbols that we also expose to applications */
+#include "postgres_ext.h"
+
 /* Define before including zlib.h to add const decorations to zlib API. */
 #ifdef HAVE_LIBZ
 #define ZLIB_CONST