From b086a47a270fba133969e78f1fb9e264725d97ae Mon Sep 17 00:00:00 2001 From: John Naylor Date: Tue, 6 Sep 2022 11:41:58 +0700 Subject: [PATCH] Bump minimum version of Bison to 2.3 Since the retirement of some older buildfarm members, the oldest Bison that gets regular testing is 2.3. MacOS ships that version, and will continue doing so for the forseeable future because of Apple's policy regarding GPLv3. While Mac users could use a package manager to install a newer version, there is no compelling reason to force them do so at this time. Reviewed by Andres Freund Discussion: https://www.postgresql.org/message-id/1097762.1662145681@sss.pgh.pa.us --- config/programs.m4 | 8 ++++---- configure | 6 +++--- contrib/cube/cubeparse.y | 5 +---- contrib/seg/segparse.y | 5 +---- doc/src/sgml/install-windows.sgml | 2 +- doc/src/sgml/installation.sgml | 2 +- src/backend/bootstrap/bootparse.y | 5 +---- src/backend/parser/gram.y | 5 +---- src/backend/replication/repl_gram.y | 5 +---- src/backend/replication/syncrep_gram.y | 5 +---- src/backend/utils/adt/jsonpath_gram.y | 5 +---- src/pl/plpgsql/src/pl_gram.y | 5 +---- src/tools/msvc/pgbison.pl | 2 +- 13 files changed, 18 insertions(+), 42 deletions(-) diff --git a/config/programs.m4 b/config/programs.m4 index e7908d8793..bcdfbc3a51 100644 --- a/config/programs.m4 +++ b/config/programs.m4 @@ -22,8 +22,8 @@ fi # PGAC_PATH_BISON # --------------- # Look for Bison, set the output variable BISON to its path if found. -# Reject versions before 1.875 (they have bugs or capacity limits). -# Note we do not accept other implementations of yacc. +# Reject versions before 2.3 (the earliest version in the buildfarm +# as of 2022). Note we do not accept other implementations of yacc. AC_DEFUN([PGAC_PATH_BISON], [PGAC_PATH_PROGS(BISON, bison) @@ -31,11 +31,11 @@ AC_DEFUN([PGAC_PATH_BISON], if test "$BISON"; then pgac_bison_version=`$BISON --version 2>/dev/null | sed q` AC_MSG_NOTICE([using $pgac_bison_version]) - if echo "$pgac_bison_version" | $AWK '{ if ([$]4 < 1.875) exit 0; else exit 1;}' + if echo "$pgac_bison_version" | $AWK '{ if ([$]4 < 2.3) exit 0; else exit 1;}' then AC_MSG_WARN([ *** The installed version of Bison, $BISON, is too old to use with PostgreSQL. -*** Bison version 1.875 or later is required, but this is $pgac_bison_version.]) +*** Bison version 2.3 or later is required, but this is $pgac_bison_version.]) BISON="" fi # Bison >=3.0 issues warnings about %name-prefix="base_yy", instead diff --git a/configure b/configure index a268780c5d..4a725ab205 100755 --- a/configure +++ b/configure @@ -10218,14 +10218,14 @@ if test "$BISON"; then pgac_bison_version=`$BISON --version 2>/dev/null | sed q` { $as_echo "$as_me:${as_lineno-$LINENO}: using $pgac_bison_version" >&5 $as_echo "$as_me: using $pgac_bison_version" >&6;} - if echo "$pgac_bison_version" | $AWK '{ if ($4 < 1.875) exit 0; else exit 1;}' + if echo "$pgac_bison_version" | $AWK '{ if ($4 < 2.3) exit 0; else exit 1;}' then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** The installed version of Bison, $BISON, is too old to use with PostgreSQL. -*** Bison version 1.875 or later is required, but this is $pgac_bison_version." >&5 +*** Bison version 2.3 or later is required, but this is $pgac_bison_version." >&5 $as_echo "$as_me: WARNING: *** The installed version of Bison, $BISON, is too old to use with PostgreSQL. -*** Bison version 1.875 or later is required, but this is $pgac_bison_version." >&2;} +*** Bison version 2.3 or later is required, but this is $pgac_bison_version." >&2;} BISON="" fi # Bison >=3.0 issues warnings about %name-prefix="base_yy", instead diff --git a/contrib/cube/cubeparse.y b/contrib/cube/cubeparse.y index 6cceae8e99..977dcba965 100644 --- a/contrib/cube/cubeparse.y +++ b/contrib/cube/cubeparse.y @@ -15,10 +15,7 @@ /* * Bison doesn't allocate anything that needs to live across parser calls, * so we can easily have it use palloc instead of malloc. This prevents - * memory leaks if we error out during parsing. Note this only works with - * bison >= 2.0. However, in bison 1.875 the default is to use alloca() - * if possible, so there's not really much problem anyhow, at least if - * you're building with gcc. + * memory leaks if we error out during parsing. */ #define YYMALLOC palloc #define YYFREE pfree diff --git a/contrib/seg/segparse.y b/contrib/seg/segparse.y index 637eacd1a6..1d2adbbec8 100644 --- a/contrib/seg/segparse.y +++ b/contrib/seg/segparse.y @@ -13,10 +13,7 @@ /* * Bison doesn't allocate anything that needs to live across parser calls, * so we can easily have it use palloc instead of malloc. This prevents - * memory leaks if we error out during parsing. Note this only works with - * bison >= 2.0. However, in bison 1.875 the default is to use alloca() - * if possible, so there's not really much problem anyhow, at least if - * you're building with gcc. + * memory leaks if we error out during parsing. */ #define YYMALLOC palloc #define YYFREE pfree diff --git a/doc/src/sgml/install-windows.sgml b/doc/src/sgml/install-windows.sgml index 11e153578c..499fd59bf0 100644 --- a/doc/src/sgml/install-windows.sgml +++ b/doc/src/sgml/install-windows.sgml @@ -219,7 +219,7 @@ $ENV{MSBFLAGS}="/m"; Bison and Flex are required to build from Git, but not required when building from a release - file. Only Bison 1.875 or versions 2.2 and later + file. Only Bison versions 2.3 and later will work. Flex must be version 2.5.31 or later. diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml index 70d188e2bc..7f7f8428e1 100644 --- a/doc/src/sgml/installation.sgml +++ b/doc/src/sgml/installation.sgml @@ -315,7 +315,7 @@ su - postgres are needed to build from a Git checkout, or if you changed the actual scanner and parser definition files. If you need them, be sure to get Flex 2.5.31 or later and - Bison 1.875 or later. Other lex + Bison 2.3 or later. Other lex and yacc programs cannot be used. diff --git a/src/backend/bootstrap/bootparse.y b/src/backend/bootstrap/bootparse.y index c45ddde67f..e6d62d81c1 100644 --- a/src/backend/bootstrap/bootparse.y +++ b/src/backend/bootstrap/bootparse.y @@ -36,10 +36,7 @@ /* * Bison doesn't allocate anything that needs to live across parser calls, * so we can easily have it use palloc instead of malloc. This prevents - * memory leaks if we error out during parsing. Note this only works with - * bison >= 2.0. However, in bison 1.875 the default is to use alloca() - * if possible, so there's not really much problem anyhow, at least if - * you're building with gcc. + * memory leaks if we error out during parsing. */ #define YYMALLOC palloc #define YYFREE pfree diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 0492ff9a66..ea33784316 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -103,10 +103,7 @@ /* * Bison doesn't allocate anything that needs to live across parser calls, * so we can easily have it use palloc instead of malloc. This prevents - * memory leaks if we error out during parsing. Note this only works with - * bison >= 2.0. However, in bison 1.875 the default is to use alloca() - * if possible, so there's not really much problem anyhow, at least if - * you're building with gcc. + * memory leaks if we error out during parsing. */ #define YYMALLOC palloc #define YYFREE pfree diff --git a/src/backend/replication/repl_gram.y b/src/backend/replication/repl_gram.y index b343f108d3..8ff6ab362f 100644 --- a/src/backend/replication/repl_gram.y +++ b/src/backend/replication/repl_gram.y @@ -29,10 +29,7 @@ Node *replication_parse_result; /* * Bison doesn't allocate anything that needs to live across parser calls, * so we can easily have it use palloc instead of malloc. This prevents - * memory leaks if we error out during parsing. Note this only works with - * bison >= 2.0. However, in bison 1.875 the default is to use alloca() - * if possible, so there's not really much problem anyhow, at least if - * you're building with gcc. + * memory leaks if we error out during parsing. */ #define YYMALLOC palloc #define YYFREE pfree diff --git a/src/backend/replication/syncrep_gram.y b/src/backend/replication/syncrep_gram.y index 4fc3647da1..c18ddb2e9b 100644 --- a/src/backend/replication/syncrep_gram.y +++ b/src/backend/replication/syncrep_gram.y @@ -26,10 +26,7 @@ static SyncRepConfigData *create_syncrep_config(const char *num_sync, /* * Bison doesn't allocate anything that needs to live across parser calls, * so we can easily have it use palloc instead of malloc. This prevents - * memory leaks if we error out during parsing. Note this only works with - * bison >= 2.0. However, in bison 1.875 the default is to use alloca() - * if possible, so there's not really much problem anyhow, at least if - * you're building with gcc. + * memory leaks if we error out during parsing. */ #define YYMALLOC palloc #define YYFREE pfree diff --git a/src/backend/utils/adt/jsonpath_gram.y b/src/backend/utils/adt/jsonpath_gram.y index 35a79ca965..7e28853a57 100644 --- a/src/backend/utils/adt/jsonpath_gram.y +++ b/src/backend/utils/adt/jsonpath_gram.y @@ -45,10 +45,7 @@ static JsonPathParseItem *makeItemLikeRegex(JsonPathParseItem *expr, /* * Bison doesn't allocate anything that needs to live across parser calls, * so we can easily have it use palloc instead of malloc. This prevents - * memory leaks if we error out during parsing. Note this only works with - * bison >= 2.0. However, in bison 1.875 the default is to use alloca() - * if possible, so there's not really much problem anyhow, at least if - * you're building with gcc. + * memory leaks if we error out during parsing. */ #define YYMALLOC palloc #define YYFREE pfree diff --git a/src/pl/plpgsql/src/pl_gram.y b/src/pl/plpgsql/src/pl_gram.y index 0b8aea9504..f7cf2b4b89 100644 --- a/src/pl/plpgsql/src/pl_gram.y +++ b/src/pl/plpgsql/src/pl_gram.y @@ -39,10 +39,7 @@ /* * Bison doesn't allocate anything that needs to live across parser calls, * so we can easily have it use palloc instead of malloc. This prevents - * memory leaks if we error out during parsing. Note this only works with - * bison >= 2.0. However, in bison 1.875 the default is to use alloca() - * if possible, so there's not really much problem anyhow, at least if - * you're building with gcc. + * memory leaks if we error out during parsing. */ #define YYMALLOC palloc #define YYFREE pfree diff --git a/src/tools/msvc/pgbison.pl b/src/tools/msvc/pgbison.pl index 3974c30d96..60935adbaa 100644 --- a/src/tools/msvc/pgbison.pl +++ b/src/tools/msvc/pgbison.pl @@ -16,7 +16,7 @@ do './src/tools/msvc/buildenv.pl' if -e 'src/tools/msvc/buildenv.pl'; my ($bisonver) = `bison -V`; # grab first line $bisonver = (split(/\s+/, $bisonver))[3]; # grab version number -unless ($bisonver eq '1.875' || $bisonver ge '2.2') +unless ($bisonver ge '2.3') { print "WARNING! Bison install not found, or unsupported Bison version.\n"; print "echo Attempting to build without.\n";