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) \
 ))
 

Reply via email to