114 lines
3.6 KiB
Diff
114 lines
3.6 KiB
Diff
From 41480c0bacf8f354610825856b5c66b8516da607 Mon Sep 17 00:00:00 2001
|
|
From: Jon Olav Hauglid <jon.hauglid@oracle.com>
|
|
Date: Fri, 1 Jul 2016 09:00:16 +0200
|
|
Subject: [PATCH] Bug#23708332: -DWITH_EDITLINE=SYSTEM BREAKS WITH
|
|
LIBEDIT-20160618-3.1
|
|
|
|
Add CMake check for the new editline completion API
|
|
and based on the result, use already existing code
|
|
for it in the mysql client.
|
|
|
|
Change-Id: I8a9a721de24eef6359d3285cffd9745a8894ea4b
|
|
---
|
|
client/mysql.cc | 8 ++++----
|
|
cmake/readline.cmake | 22 +++++++++++++++++++---
|
|
config.h.cmake | 1 +
|
|
3 files changed, 24 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/client/mysql.cc b/client/mysql.cc
|
|
index 94c3227..46147e9 100644
|
|
--- a/client/mysql.cc
|
|
+++ b/client/mysql.cc
|
|
@@ -2816,7 +2816,7 @@ C_MODE_END
|
|
if not.
|
|
*/
|
|
|
|
-#if defined(USE_NEW_READLINE_INTERFACE)
|
|
+#if defined(USE_NEW_EDITLINE_INTERFACE)
|
|
static int fake_magic_space(int, int);
|
|
extern "C" char *no_completion(const char*,int)
|
|
#elif defined(USE_LIBEDIT_INTERFACE)
|
|
@@ -2845,7 +2845,7 @@ static int not_in_history(const char *line)
|
|
}
|
|
|
|
|
|
-#if defined(USE_NEW_READLINE_INTERFACE)
|
|
+#if defined(USE_NEW_EDITLINE_INTERFACE)
|
|
static int fake_magic_space(int, int)
|
|
#else
|
|
static int fake_magic_space(const char *, int)
|
|
@@ -2862,7 +2862,7 @@ static void initialize_readline (char *name)
|
|
rl_readline_name = name;
|
|
|
|
/* Tell the completer that we want a crack first. */
|
|
-#if defined(USE_NEW_READLINE_INTERFACE)
|
|
+#if defined(USE_NEW_EDITLINE_INTERFACE)
|
|
rl_attempted_completion_function= (rl_completion_func_t*)&new_mysql_completion;
|
|
rl_completion_entry_function= (rl_compentry_func_t*)&no_completion;
|
|
|
|
@@ -2890,7 +2890,7 @@ static char **new_mysql_completion(const char *text,
|
|
int end MY_ATTRIBUTE((unused)))
|
|
{
|
|
if (!status.batch && !quick)
|
|
-#if defined(USE_NEW_READLINE_INTERFACE)
|
|
+#if defined(USE_NEW_EDITLINE_INTERFACE)
|
|
return rl_completion_matches(text, new_command_generator);
|
|
#else
|
|
return completion_matches((char *)text, (CPFunction *)new_command_generator);
|
|
diff --git a/cmake/readline.cmake b/cmake/readline.cmake
|
|
index 00ecc53..8aed8cb 100644
|
|
--- a/cmake/readline.cmake
|
|
+++ b/cmake/readline.cmake
|
|
@@ -1,4 +1,4 @@
|
|
-# Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
|
|
+# Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved.
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
@@ -158,12 +158,28 @@ MACRO (FIND_SYSTEM_EDITLINE)
|
|
completion_matches(0,0);
|
|
return res;
|
|
}"
|
|
- EDITLINE_HAVE_COMPLETION)
|
|
+ EDITLINE_HAVE_COMPLETION_INT)
|
|
|
|
- IF(EDITLINE_HAVE_COMPLETION)
|
|
+ CHECK_CXX_SOURCE_COMPILES("
|
|
+ #include <stdio.h>
|
|
+ #include <readline.h>
|
|
+ int main(int argc, char **argv)
|
|
+ {
|
|
+ typedef char* MYFunction(const char*, int);
|
|
+ MYFunction* myf= rl_completion_entry_function;
|
|
+ char *res= (myf)(NULL, 0);
|
|
+ completion_matches(0,0);
|
|
+ return res != NULL;
|
|
+ }"
|
|
+ EDITLINE_HAVE_COMPLETION_CHAR)
|
|
+
|
|
+ IF(EDITLINE_HAVE_COMPLETION_INT OR EDITLINE_HAVE_COMPLETION_CHAR)
|
|
SET(HAVE_HIST_ENTRY ${EDITLINE_HAVE_HIST_ENTRY})
|
|
SET(USE_LIBEDIT_INTERFACE 1)
|
|
SET(EDITLINE_FOUND 1)
|
|
+ IF(EDITLINE_HAVE_COMPLETION_CHAR)
|
|
+ SET(USE_NEW_EDITLINE_INTERFACE 1)
|
|
+ ENDIF()
|
|
ENDIF()
|
|
ENDIF()
|
|
ENDMACRO()
|
|
diff --git a/config.h.cmake b/config.h.cmake
|
|
index f0a11c4..388442c 100644
|
|
--- a/config.h.cmake
|
|
+++ b/config.h.cmake
|
|
@@ -276,6 +276,7 @@
|
|
#cmakedefine HAVE_NCURSES_H 1
|
|
#cmakedefine USE_LIBEDIT_INTERFACE 1
|
|
#cmakedefine HAVE_HIST_ENTRY 1
|
|
+#cmakedefine USE_NEW_EDITLINE_INTERFACE 1
|
|
|
|
/*
|
|
* Libedit
|
|
--
|
|
2.7.4
|
|
|