external/postgresql/0001-Assume-that-stdbool.h-conforms-to-the-C-standard.patch.1 | 429 ++++++++++ external/postgresql/UnpackedTarball_postgresql.mk | 1 2 files changed, 430 insertions(+)
New commits: commit ea0b06415b35ff68959c8fb24355f2c15ad63e64 Author: Stephan Bergmann <stephan.bergm...@allotropia.de> AuthorDate: Mon Nov 25 18:12:39 2024 +0100 Commit: Michael Stahl <michael.st...@allotropia.de> CommitDate: Tue Nov 26 11:25:34 2024 +0100 external/postgresql: Include configure fix for C23 stdbool.h ...by backporting upstream <https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=bc5a4dfcf7390145dc3ba3c1c18c5ce561b778cd> "Assume that <stdbool.h> conforms to the C standard." to our REL_14_15 version. GCC 15 trunk defaults to C23 now, so started to fail with > In file included from fls.c:49: > ../../src/include/c.h:419:23: error: two or more data types in declaration specifiers > 419 | typedef unsigned char bool; > | ^~~~ > ../../src/include/c.h:419:1: warning: useless type name in empty declaration > 419 | typedef unsigned char bool; > | ^~~~~~~ > make: *** [<builtin>: fls.o] Error 1 > make: Leaving directory 'workdir/UnpackedTarball/postgresql/src/port' (Removing HAVE__BOOL and HAVE_STDBOOL_H also from src/tools/msvc/Solution.pm is necessary to avoid failures like > "C:/cygwin64/home/tdf/jenkins/workspace/gerrit_windows/workdir/UnpackedTarball/opensslpps\openssl.exe" version 2>&1unused defines: HAVE_STDBOOL_H HAVE__BOOL at /home/tdf/jenkins/workspace/gerrit_windows/workdir/UnpackedTarball/postgresql/src/tools/msvc/Mkvcbuild.pm line 870. > make[1]: *** [C:/cygwin64/home/tdf/jenkins/workspace/gerrit_windows/external/postgresql/ExternalProject_postgresql.mk:27: C:/cygwin64/home/tdf/jenkins/workspace/gerrit_windows/workdir/ExternalProject/postgresql/build] Error 1 in MSVC builds.) Change-Id: I1f6bd0d613ae4d6ce70feaaf67aaf95496eeff87 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177280 Reviewed-by: Michael Stahl <michael.st...@allotropia.de> Tested-by: Jenkins diff --git a/external/postgresql/0001-Assume-that-stdbool.h-conforms-to-the-C-standard.patch.1 b/external/postgresql/0001-Assume-that-stdbool.h-conforms-to-the-C-standard.patch.1 new file mode 100644 index 000000000000..73c6461033cc --- /dev/null +++ b/external/postgresql/0001-Assume-that-stdbool.h-conforms-to-the-C-standard.patch.1 @@ -0,0 +1,429 @@ +From d5fb5a35816df670d329600e44fe22617b578415 Mon Sep 17 00:00:00 2001 +From: Thomas Munro <tmu...@postgresql.org> +Date: Mon, 25 Nov 2024 13:11:28 +1300 +Subject: Assume that <stdbool.h> conforms to the C standard. + +Previously we checked "for <stdbool.h> that conforms to C99" using +autoconf's AC_HEADER_STDBOOL macro. We've required C99 since PostgreSQL +12, so the test was redundant, and under C23 it was broken: autoconf +2.69's implementation doesn't understand C23's new empty header (the +macros it's looking for went away, replaced by language keywords). +Later autoconf versions fixed that, but let's just remove the +anachronistic test. + +HAVE_STDBOOL_H and HAVE__BOOL will no longer be defined, but they +weren't directly tested in core or likely extensions (except in 11, see +below). PG_USE_STDBOOL (or USE_STDBOOL in 11 and 12) is still defined +when sizeof(bool) is 1, which should be true on all modern systems. +Otherwise we define our own bool type and values of size 1, which would +fail to compile under C23 as revealed by the broken test. (We'll +probably clean that dead code up in master, but here we want a minimal +back-patchable change.) + +This came to our attention when GCC 15 recently started using using C23 +by default and failed to compile the replacement code, as reported by +Sam James and build farm animal alligator. + +Back-patch to all supported releases, and then two older versions that +also know about <stdbool.h>, per the recently-out-of-support policy[1]. +12 requires C99 so it's much like the supported releases, but 11 only +assumes C89 so it now uses AC_CHECK_HEADERS instead of the overly picky +AC_HEADER_STDBOOL. (I could find no discussion of which historical +systems had <stdbool.h> but failed the conformance test; if they ever +existed, they surely aren't relevant to that policy's goals.) + +[1] https://wiki.postgresql.org/wiki/Committing_checklist#Policies + +Reported-by: Sam James <s...@gentoo.org> +Reviewed-by: Peter Eisentraut <pe...@eisentraut.org> (master version) +Reviewed-by: Tom Lane <t...@sss.pgh.pa.us> (approach) +Discussion: https://www.postgresql.org/message-id/flat/87o72eo9iu.fsf%40gentoo.org +(cherry picked from commit bc5a4dfcf7390145dc3ba3c1c18c5ce561b778cd) +Conflicts: + configure + meson.build + src/include/pg_config.h.in + src/tools/msvc/Solution.pm +--- + configure | 182 +++++++++---------------------------- + configure.ac | 13 +-- + src/include/c.h | 2 +- + src/include/pg_config.h.in | 6 -- + src/tools/msvc/Solution.pm | 2 - + 5 files changed, 48 insertions(+), 157 deletions(-) + +diff --git a/configure b/configure +index 7e6030e9e1..7a5bdeddbd 100755 +--- a/configure ++++ b/configure +@@ -2085,116 +2085,116 @@ $as_echo "$ac_res" >&6; } + + } # ac_fn_c_check_func + +-# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +-# ------------------------------------------- +-# Tests whether TYPE exists after having included INCLUDES, setting cache +-# variable VAR accordingly. +-ac_fn_c_check_type () ++# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES ++# ---------------------------------------------------- ++# Tries to find if the field MEMBER exists in type AGGR, after including ++# INCLUDES, setting cache variable VAR accordingly. ++ac_fn_c_check_member () + { + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +-$as_echo_n "checking for $2... " >&6; } +-if eval \${$3+:} false; then : ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 ++$as_echo_n "checking for $2.$3... " >&6; } ++if eval \${$4+:} false; then : + $as_echo_n "(cached) " >&6 + else +- eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ +-$4 ++$5 + int + main () + { +-if (sizeof ($2)) +- return 0; ++static $2 ac_aggr; ++if (ac_aggr.$3) ++return 0; + ; + return 0; + } + _ACEOF + if ac_fn_c_try_compile "$LINENO"; then : ++ eval "$4=yes" ++else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ +-$4 ++$5 + int + main () + { +-if (sizeof (($2))) +- return 0; ++static $2 ac_aggr; ++if (sizeof ac_aggr.$3) ++return 0; + ; + return 0; + } + _ACEOF + if ac_fn_c_try_compile "$LINENO"; then : +- ++ eval "$4=yes" + else +- eval "$3=yes" ++ eval "$4=no" + fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-eval ac_res=\$$3 ++eval ac_res=\$$4 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 + $as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +-} # ac_fn_c_check_type ++} # ac_fn_c_check_member + +-# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES +-# ---------------------------------------------------- +-# Tries to find if the field MEMBER exists in type AGGR, after including +-# INCLUDES, setting cache variable VAR accordingly. +-ac_fn_c_check_member () ++# ac_fn_c_check_type LINENO TYPE VAR INCLUDES ++# ------------------------------------------- ++# Tests whether TYPE exists after having included INCLUDES, setting cache ++# variable VAR accordingly. ++ac_fn_c_check_type () + { + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 +-$as_echo_n "checking for $2.$3... " >&6; } +-if eval \${$4+:} false; then : ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 ++$as_echo_n "checking for $2... " >&6; } ++if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 + else ++ eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ +-$5 ++$4 + int + main () + { +-static $2 ac_aggr; +-if (ac_aggr.$3) +-return 0; ++if (sizeof ($2)) ++ return 0; + ; + return 0; + } + _ACEOF + if ac_fn_c_try_compile "$LINENO"; then : +- eval "$4=yes" +-else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ +-$5 ++$4 + int + main () + { +-static $2 ac_aggr; +-if (sizeof ac_aggr.$3) +-return 0; ++if (sizeof (($2))) ++ return 0; + ; + return 0; + } + _ACEOF + if ac_fn_c_try_compile "$LINENO"; then : +- eval "$4=yes" ++ + else +- eval "$4=no" ++ eval "$3=yes" + fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-eval ac_res=\$$4 ++eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 + $as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +-} # ac_fn_c_check_member ++} # ac_fn_c_check_type + + # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES + # -------------------------------------------- +@@ -13746,100 +13746,6 @@ fi + ## Header files + ## + +-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +-$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } +-if ${ac_cv_header_stdbool_h+:} false; then : +- $as_echo_n "(cached) " >&6 +-else +- cat confdefs.h - <<_ACEOF >conftest.$ac_ext +-/* end confdefs.h. */ +- +- #include <stdbool.h> +- #ifndef bool +- "error: bool is not defined" +- #endif +- #ifndef false +- "error: false is not defined" +- #endif +- #if false +- "error: false is not 0" +- #endif +- #ifndef true +- "error: true is not defined" +- #endif +- #if true != 1 +- "error: true is not 1" +- #endif +- #ifndef __bool_true_false_are_defined +- "error: __bool_true_false_are_defined is not defined" +- #endif +- +- struct s { _Bool s: 1; _Bool t; } s; +- +- char a[true == 1 ? 1 : -1]; +- char b[false == 0 ? 1 : -1]; +- char c[__bool_true_false_are_defined == 1 ? 1 : -1]; +- char d[(bool) 0.5 == true ? 1 : -1]; +- /* See body of main program for 'e'. */ +- char f[(_Bool) 0.0 == false ? 1 : -1]; +- char g[true]; +- char h[sizeof (_Bool)]; +- char i[sizeof s.t]; +- enum { j = false, k = true, l = false * true, m = true * 256 }; +- /* The following fails for +- HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ +- _Bool n[m]; +- char o[sizeof n == m * sizeof n[0] ? 1 : -1]; +- char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; +- /* Catch a bug in an HP-UX C compiler. See +- http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html +- http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html +- */ +- _Bool q = true; +- _Bool *pq = &q; +- +-int +-main () +-{ +- +- bool e = &s; +- *pq |= q; +- *pq |= ! q; +- /* Refer to every declared value, to avoid compiler optimizations. */ +- return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l +- + !m + !n + !o + !p + !q + !pq); +- +- ; +- return 0; +-} +-_ACEOF +-if ac_fn_c_try_compile "$LINENO"; then : +- ac_cv_header_stdbool_h=yes +-else +- ac_cv_header_stdbool_h=no +-fi +-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +-fi +-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +-$as_echo "$ac_cv_header_stdbool_h" >&6; } +- ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +-if test "x$ac_cv_type__Bool" = xyes; then : +- +-cat >>confdefs.h <<_ACEOF +-#define HAVE__BOOL 1 +-_ACEOF +- +- +-fi +- +- +-if test $ac_cv_header_stdbool_h = yes; then +- +-$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h +- +-fi +- +- + for ac_header in atomic.h copyfile.h execinfo.h getopt.h ifaddrs.h langinfo.h mbarrier.h poll.h sys/epoll.h sys/event.h sys/ipc.h sys/personality.h sys/prctl.h sys/procctl.h sys/pstat.h sys/resource.h sys/select.h sys/sem.h sys/shm.h sys/signalfd.h sys/sockio.h sys/tas.h sys/uio.h sys/un.h termios.h ucred.h wctype.h + do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +@@ -15711,9 +15617,7 @@ $as_echo_n "checking size of bool... " >&6; } + if ${ac_cv_sizeof_bool+:} false; then : + $as_echo_n "(cached) " >&6 + else +- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (bool))" "ac_cv_sizeof_bool" "#ifdef HAVE_STDBOOL_H +-#include <stdbool.h> +-#endif ++ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (bool))" "ac_cv_sizeof_bool" "#include <stdbool.h> + "; then : + + else +@@ -15739,7 +15643,7 @@ _ACEOF + + + +-if test "$ac_cv_header_stdbool_h" = yes -a "$ac_cv_sizeof_bool" = 1; then ++if test "$ac_cv_sizeof_bool" = 1; then + + $as_echo "#define PG_USE_STDBOOL 1" >>confdefs.h + +diff --git a/configure.ac b/configure.ac +index 7a75d6e37c..5484c910f6 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1418,8 +1418,6 @@ AC_SUBST(UUID_LIBS) + ## Header files + ## + +-AC_HEADER_STDBOOL +- + AC_CHECK_HEADERS(m4_normalize([ + atomic.h + copyfile.h +@@ -1734,14 +1732,11 @@ if test "$ac_cv_sizeof_off_t" -lt 8 -a "$segsize" != "1"; then + AC_MSG_ERROR([Large file support is not enabled. Segment size cannot be larger than 1GB.]) + fi + +-AC_CHECK_SIZEOF([bool], [], +-[#ifdef HAVE_STDBOOL_H +-#include <stdbool.h> +-#endif]) ++AC_CHECK_SIZEOF([bool], [], [#include <stdbool.h>]) + +-dnl We use <stdbool.h> if we have it and it declares type bool as having +-dnl size 1. Otherwise, c.h will fall back to declaring bool as unsigned char. +-if test "$ac_cv_header_stdbool_h" = yes -a "$ac_cv_sizeof_bool" = 1; then ++dnl We use <stdbool.h> if bool has size 1 after including it. Otherwise, c.h ++dnl will fall back to declaring bool as unsigned char. ++if test "$ac_cv_sizeof_bool" = 1; then + AC_DEFINE([PG_USE_STDBOOL], 1, + [Define to 1 to use <stdbool.h> to define type bool.]) + fi +diff --git a/src/include/c.h b/src/include/c.h +index dd2e3b0f3e..cc19c23fb6 100644 +--- a/src/include/c.h ++++ b/src/include/c.h +@@ -398,7 +398,7 @@ typedef void (*pg_funcptr_t) (void); + * bool + * Boolean value, either true or false. + * +- * We use stdbool.h if available and its bool has size 1. That's useful for ++ * We use stdbool.h if bool has size 1 after including it. That's useful for + * better compiler and debugger output and for compatibility with third-party + * libraries. But PostgreSQL currently cannot deal with bool of other sizes; + * there are static assertions around the code to prevent that. +diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in +index 99e3731813..d9ef9a41bf 100644 +--- a/src/include/pg_config.h.in ++++ b/src/include/pg_config.h.in +@@ -517,9 +517,6 @@ + /* Define to 1 if you have the `SSL_CTX_set_num_tickets' function. */ + #undef HAVE_SSL_CTX_SET_NUM_TICKETS + +-/* Define to 1 if stdbool.h conforms to C99. */ +-#undef HAVE_STDBOOL_H +- + /* Define to 1 if you have the <stdint.h> header file. */ + #undef HAVE_STDINT_H + +@@ -730,9 +727,6 @@ + /* Define to 1 if the assembler supports X86_64's POPCNTQ instruction. */ + #undef HAVE_X86_64_POPCNTQ + +-/* Define to 1 if the system has the type `_Bool'. */ +-#undef HAVE__BOOL +- + /* Define to 1 if your compiler understands __builtin_bswap16. */ + #undef HAVE__BUILTIN_BSWAP16 + +diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm +index 07cc7b7ba2..f0ce2ac804 100644 +--- a/src/tools/msvc/Solution.pm ++++ b/src/tools/msvc/Solution.pm +@@ -365,7 +365,6 @@ sub GenerateFiles + HAVE_SPINLOCKS => 1, + HAVE_SSL_CTX_SET_NUM_TICKETS => undef, + HAVE_SRANDOM => undef, +- HAVE_STDBOOL_H => 1, + HAVE_STDINT_H => 1, + HAVE_STDLIB_H => 1, + HAVE_STRCHRNUL => undef, +@@ -436,7 +435,6 @@ sub GenerateFiles + HAVE_X509_GET_SIGNATURE_NID => 1, + HAVE_X509_GET_SIGNATURE_INFO => undef, + HAVE_X86_64_POPCNTQ => undef, +- HAVE__BOOL => undef, + HAVE__BUILTIN_BSWAP16 => undef, + HAVE__BUILTIN_BSWAP32 => undef, + HAVE__BUILTIN_BSWAP64 => undef, +-- +2.47.0 + diff --git a/external/postgresql/UnpackedTarball_postgresql.mk b/external/postgresql/UnpackedTarball_postgresql.mk index 11fb603ef34f..44528b78d26f 100644 --- a/external/postgresql/UnpackedTarball_postgresql.mk +++ b/external/postgresql/UnpackedTarball_postgresql.mk @@ -17,6 +17,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,postgresql, \ external/postgresql/windows.patch.0 \ external/postgresql/postgresql.exit.patch.0 \ external/postgresql/postgres-msvc-build.patch.1 \ + external/postgresql/0001-Assume-that-stdbool.h-conforms-to-the-C-standard.patch.1 \ $(if $(filter WNT_AARCH64,$(OS)_$(CPUNAME)), external/postgresql/arm64.patch.1) \ ))