summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2020-01-23 23:20:57 +0000
committerTom Lane2020-01-23 23:20:57 +0000
commitc32704441d47cc1cbb36367a429814511edb6ffd (patch)
treed2944f25fefa4dea8bf39b6d06586c1b243fdce5
parent9a3a75cb81d3b060b8e76001d04c78ab4ce0dcef (diff)
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.
-rw-r--r--config/programs.m420
-rwxr-xr-xconfigure39
-rw-r--r--src/bin/psql/tab-complete.c7
-rw-r--r--src/include/pg_config.h.in4
-rw-r--r--src/tools/msvc/Solution.pm1
5 files changed, 67 insertions, 4 deletions
diff --git a/config/programs.m4 b/config/programs.m4
index 68ab82351ad..6a118ece24e 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 <stdio.h>
+#if defined(HAVE_READLINE_READLINE_H)
+#include <readline/readline.h>
+#elif defined(HAVE_EDITLINE_READLINE_H)
+#include <editline/readline.h>
+#elif defined(HAVE_READLINE_H)
+#include <readline.h>
+#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 <stdio.h>
#if defined(HAVE_READLINE_READLINE_H)
diff --git a/configure b/configure
index a46ba401048..702adba8390 100755
--- a/configure
+++ b/configure
@@ -16347,6 +16347,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 <stdio.h>
+#if defined(HAVE_READLINE_READLINE_H)
+#include <readline/readline.h>
+#elif defined(HAVE_EDITLINE_READLINE_H)
+#include <editline/readline.h>
+#elif defined(HAVE_READLINE_H)
+#include <readline.h>
+#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; }
if ${pgac_cv_var_rl_filename_quote_characters+:} false; then :
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index 08634882432..dc03fbde131 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 983d94e3fe7..6f485f73cd1 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 cc4e2383181..90de0583203 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,