From c32704441d47cc1cbb36367a429814511edb6ffd Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 23 Jan 2020 18:20:57 -0500 Subject: [PATCH] Add configure probe for rl_completion_suppress_quote. I had supposed that all versions of Readline that have filename quoting hooks also have the rl_completion_suppress_quote variable. But it seems OpenBSD managed to find a version someplace that does not, so we'll have to expend a separate configure probe for that. (Light testing suggests that this version also lacks the bugs that make it necessary to frob that variable. Hooray!) Per buildfarm. --- config/programs.m4 | 20 ++++++++++++++++++- configure | 39 +++++++++++++++++++++++++++++++++++++ src/bin/psql/tab-complete.c | 7 ++++--- src/include/pg_config.h.in | 4 ++++ src/tools/msvc/Solution.pm | 1 + 5 files changed, 67 insertions(+), 4 deletions(-) diff --git a/config/programs.m4 b/config/programs.m4 index 68ab82351a..6a118ece24 100644 --- a/config/programs.m4 +++ b/config/programs.m4 @@ -211,7 +211,8 @@ fi # PGAC_READLINE_VARIABLES # ----------------------- -# Readline versions < 2.1 don't have rl_completion_append_character +# Readline versions < 2.1 don't have rl_completion_append_character, +# and some versions lack rl_completion_suppress_quote. # Libedit lacks rl_filename_quote_characters and rl_filename_quoting_function AC_DEFUN([PGAC_READLINE_VARIABLES], @@ -232,6 +233,23 @@ if test x"$pgac_cv_var_rl_completion_append_character" = x"yes"; then AC_DEFINE(HAVE_RL_COMPLETION_APPEND_CHARACTER, 1, [Define to 1 if you have the global variable 'rl_completion_append_character'.]) fi +AC_CACHE_CHECK([for rl_completion_suppress_quote], pgac_cv_var_rl_completion_suppress_quote, +[AC_LINK_IFELSE([AC_LANG_PROGRAM([#include +#if defined(HAVE_READLINE_READLINE_H) +#include +#elif defined(HAVE_EDITLINE_READLINE_H) +#include +#elif defined(HAVE_READLINE_H) +#include +#endif +], +[rl_completion_suppress_quote = 1;])], +[pgac_cv_var_rl_completion_suppress_quote=yes], +[pgac_cv_var_rl_completion_suppress_quote=no])]) +if test x"$pgac_cv_var_rl_completion_suppress_quote" = x"yes"; then +AC_DEFINE(HAVE_RL_COMPLETION_SUPPRESS_QUOTE, 1, + [Define to 1 if you have the global variable 'rl_completion_suppress_quote'.]) +fi AC_CACHE_CHECK([for rl_filename_quote_characters], pgac_cv_var_rl_filename_quote_characters, [AC_LINK_IFELSE([AC_LANG_PROGRAM([#include #if defined(HAVE_READLINE_READLINE_H) diff --git a/configure b/configure index a46ba40104..702adba839 100755 --- a/configure +++ b/configure @@ -16346,6 +16346,45 @@ if test x"$pgac_cv_var_rl_completion_append_character" = x"yes"; then $as_echo "#define HAVE_RL_COMPLETION_APPEND_CHARACTER 1" >>confdefs.h +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_completion_suppress_quote" >&5 +$as_echo_n "checking for rl_completion_suppress_quote... " >&6; } +if ${pgac_cv_var_rl_completion_suppress_quote+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#if defined(HAVE_READLINE_READLINE_H) +#include +#elif defined(HAVE_EDITLINE_READLINE_H) +#include +#elif defined(HAVE_READLINE_H) +#include +#endif + +int +main () +{ +rl_completion_suppress_quote = 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + pgac_cv_var_rl_completion_suppress_quote=yes +else + pgac_cv_var_rl_completion_suppress_quote=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_var_rl_completion_suppress_quote" >&5 +$as_echo "$pgac_cv_var_rl_completion_suppress_quote" >&6; } +if test x"$pgac_cv_var_rl_completion_suppress_quote" = x"yes"; then + +$as_echo "#define HAVE_RL_COMPLETION_SUPPRESS_QUOTE 1" >>confdefs.h + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_filename_quote_characters" >&5 $as_echo_n "checking for rl_filename_quote_characters... " >&6; } diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 0863488243..dc03fbde13 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -4468,11 +4468,10 @@ complete_from_files(const char *text, int state) * anyway. Set rl_completion_suppress_quote to prevent that. If we do * get to quote_file_name(), we'll clear this again. (Yes, this seems * like it's working around Readline bugs.) - * - * (For now, we assume that rl_completion_suppress_quote exists if the - * filename quoting hooks do.) */ +#ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE rl_completion_suppress_quote = 1; +#endif /* If user typed a quote, force quoting (never remove user's quote) */ if (*text == '\'') @@ -4842,7 +4841,9 @@ quote_file_name(char *fname, int match_type, char *quote_pointer) * on its own accord. (This covers some additional cases beyond those * dealt with above.) */ +#ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE rl_completion_suppress_quote = 0; +#endif /* * If user typed a leading quote character other than single quote (i.e., diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index 983d94e3fe..6f485f73cd 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -485,6 +485,10 @@ /* Define to 1 if you have the `rl_completion_matches' function. */ #undef HAVE_RL_COMPLETION_MATCHES +/* Define to 1 if you have the global variable 'rl_completion_suppress_quote'. + */ +#undef HAVE_RL_COMPLETION_SUPPRESS_QUOTE + /* Define to 1 if you have the `rl_filename_completion_function' function. */ #undef HAVE_RL_FILENAME_COMPLETION_FUNCTION diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm index cc4e238318..90de058320 100644 --- a/src/tools/msvc/Solution.pm +++ b/src/tools/msvc/Solution.pm @@ -332,6 +332,7 @@ sub GenerateFiles HAVE_RINT => 1, HAVE_RL_COMPLETION_APPEND_CHARACTER => undef, HAVE_RL_COMPLETION_MATCHES => undef, + HAVE_RL_COMPLETION_SUPPRESS_QUOTE => undef, HAVE_RL_FILENAME_COMPLETION_FUNCTION => undef, HAVE_RL_FILENAME_QUOTE_CHARACTERS => undef, HAVE_RL_FILENAME_QUOTING_FUNCTION => undef,