mysql/community-mysql-5.7.13-libedit.patch
2016-07-13 19:52:17 +02:00

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