diff --git a/config/programs.m4 b/config/programs.m4 index 490ec9fe9f5..7b55c2664a6 100644 --- a/config/programs.m4 +++ b/config/programs.m4 @@ -59,57 +59,16 @@ AC_SUBST(BISONFLAGS) # PGAC_PATH_FLEX # -------------- # Look for Flex, set the output variable FLEX to its path if found. -# Reject versions before 2.5.35 (the earliest version in the buildfarm -# as of 2022). Also find Flex if its installed under `lex', but do not -# accept other Lex programs. AC_DEFUN([PGAC_PATH_FLEX], -[AC_CACHE_CHECK([for flex], pgac_cv_path_flex, -[# Let the user override the test -if test -n "$FLEX"; then - pgac_cv_path_flex=$FLEX -else - pgac_save_IFS=$IFS - IFS=$PATH_SEPARATOR - for pgac_dir in $PATH; do - IFS=$pgac_save_IFS - if test -z "$pgac_dir" || test x"$pgac_dir" = x"."; then - pgac_dir=`pwd` - fi - for pgac_prog in flex lex; do - pgac_candidate="$pgac_dir/$pgac_prog" - if test -f "$pgac_candidate" \ - && $pgac_candidate --version /dev/null 2>&1 - then - echo '%%' > conftest.l - if $pgac_candidate -t conftest.l 2>/dev/null | grep FLEX_SCANNER >/dev/null 2>&1; then - pgac_flex_version=`$pgac_candidate --version 2>/dev/null` - if echo "$pgac_flex_version" | sed ['s/[.a-z]/ /g'] | $AWK '{ if ([$]1 == 2 && ([$]2 > 5 || ([$]2 == 5 && [$]3 >= 35))) exit 0; else exit 1;}' - then - pgac_cv_path_flex=$pgac_candidate - break 2 - else - AC_MSG_ERROR([ -*** The installed version of Flex, $pgac_candidate, is too old to use with PostgreSQL. -*** Flex version 2.5.35 or later is required, but this is $pgac_flex_version.]) - fi - fi - fi - done - done - rm -f conftest.l lex.yy.c - : ${pgac_cv_path_flex=no} -fi -])[]dnl AC_CACHE_CHECK - -if test x"$pgac_cv_path_flex" = x"no"; then +[PGAC_PATH_PROGS(FLEX, flex) +if test -z "$FLEX"; then AC_MSG_ERROR([flex not found]) -else - FLEX=$pgac_cv_path_flex - pgac_flex_version=`$FLEX --version 2>/dev/null` - AC_MSG_NOTICE([using $pgac_flex_version]) fi +pgac_flex_version=`$FLEX --version 2>/dev/null` +AC_MSG_NOTICE([using $pgac_flex_version]) + AC_SUBST(FLEX) AC_SUBST(FLEXFLAGS) ])# PGAC_PATH_FLEX diff --git a/configure b/configure index a0b5e10ca39..ceeef9b0915 100755 --- a/configure +++ b/configure @@ -9931,59 +9931,68 @@ if test -z "$BISON"; then fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for flex" >&5 -$as_echo_n "checking for flex... " >&6; } -if ${pgac_cv_path_flex+:} false; then : +if test -z "$FLEX"; then + for ac_prog in flex +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_FLEX+:} false; then : $as_echo_n "(cached) " >&6 else - # Let the user override the test -if test -n "$FLEX"; then - pgac_cv_path_flex=$FLEX -else - pgac_save_IFS=$IFS - IFS=$PATH_SEPARATOR - for pgac_dir in $PATH; do - IFS=$pgac_save_IFS - if test -z "$pgac_dir" || test x"$pgac_dir" = x"."; then - pgac_dir=`pwd` - fi - for pgac_prog in flex lex; do - pgac_candidate="$pgac_dir/$pgac_prog" - if test -f "$pgac_candidate" \ - && $pgac_candidate --version /dev/null 2>&1 - then - echo '%%' > conftest.l - if $pgac_candidate -t conftest.l 2>/dev/null | grep FLEX_SCANNER >/dev/null 2>&1; then - pgac_flex_version=`$pgac_candidate --version 2>/dev/null` - if echo "$pgac_flex_version" | sed 's/[.a-z]/ /g' | $AWK '{ if ($1 == 2 && ($2 > 5 || ($2 == 5 && $3 >= 35))) exit 0; else exit 1;}' - then - pgac_cv_path_flex=$pgac_candidate - break 2 - else - as_fn_error $? " -*** The installed version of Flex, $pgac_candidate, is too old to use with PostgreSQL. -*** Flex version 2.5.35 or later is required, but this is $pgac_flex_version." "$LINENO" 5 - fi - fi - fi - done + case $FLEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_FLEX="$FLEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_FLEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done - rm -f conftest.l lex.yy.c - : ${pgac_cv_path_flex=no} +IFS=$as_save_IFS + + ;; +esac +fi +FLEX=$ac_cv_path_FLEX +if test -n "$FLEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FLEX" >&5 +$as_echo "$FLEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_path_flex" >&5 -$as_echo "$pgac_cv_path_flex" >&6; } -if test x"$pgac_cv_path_flex" = x"no"; then - as_fn_error $? "flex not found" "$LINENO" 5 + + test -n "$FLEX" && break +done + else - FLEX=$pgac_cv_path_flex - pgac_flex_version=`$FLEX --version 2>/dev/null` - { $as_echo "$as_me:${as_lineno-$LINENO}: using $pgac_flex_version" >&5 -$as_echo "$as_me: using $pgac_flex_version" >&6;} + # Report the value of FLEX in configure's output in all cases. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FLEX" >&5 +$as_echo_n "checking for FLEX... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FLEX" >&5 +$as_echo "$FLEX" >&6; } fi +if test -z "$FLEX"; then + as_fn_error $? "flex not found" "$LINENO" 5 +fi + +pgac_flex_version=`$FLEX --version 2>/dev/null` +{ $as_echo "$as_me:${as_lineno-$LINENO}: using $pgac_flex_version" >&5 +$as_echo "$as_me: using $pgac_flex_version" >&6;} + diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml index ebdb5b3bc2d..271615e4a65 100644 --- a/doc/src/sgml/installation.sgml +++ b/doc/src/sgml/installation.sgml @@ -100,10 +100,10 @@ yacc - Flex 2.5.35 or later and - Bison 2.3 or later are required. Other - lex and yacc - programs cannot be used. + Flex and Bison are + required. Other lex and + yacc programs cannot be used. + Bison needs to be at least version 2.3. @@ -3811,10 +3811,8 @@ make: *** [postgres] Error 1 Flex - Bison and Flex are - required. Only Bison versions 2.3 and later - will work. Flex must be version 2.5.35 or later. - Binaries can be downloaded from Bison and + Flex can be downloaded from . diff --git a/meson.build b/meson.build index cfd654d2916..32fc89f3a4b 100644 --- a/meson.build +++ b/meson.build @@ -334,7 +334,7 @@ endif # External programs perl = find_program(get_option('PERL'), required: true, native: true) python = find_program(get_option('PYTHON'), required: true, native: true) -flex = find_program(get_option('FLEX'), native: true, version: '>= 2.5.35') +flex = find_program(get_option('FLEX'), native: true) bison = find_program(get_option('BISON'), native: true, version: '>= 2.3') sed = find_program(get_option('SED'), 'sed', native: true, required: false) prove = find_program(get_option('PROVE'), native: true, required: false) diff --git a/src/backend/utils/misc/guc-file.l b/src/backend/utils/misc/guc-file.l index c0ecb8b2ce2..11a1e2a3f9f 100644 --- a/src/backend/utils/misc/guc-file.l +++ b/src/backend/utils/misc/guc-file.l @@ -302,7 +302,7 @@ record_config_file_error(const char *errmsg, /* * Flex fatal errors bring us here. Stash the error message and jump back to * ParseConfigFp(). Assume all msg arguments point to string constants; this - * holds for flex 2.5.35 (earliest we support). Otherwise, we would need to + * holds for all currently known flex versions. Otherwise, we would need to * copy the message. * * We return "int" since this takes the place of calls to fprintf().