- commit 2220f7458ef90829eacc457167a28aeba75ca1bc
- Author: Sebastian Kemper <sebastian_ml@gmx.net>
- Date: Sun Dec 9 21:19:24 2018 +0100
-
- cmake: support new libedit interface
-
- libedit changed it's interface a while ago. MariaDB's cmake file doesn't
- recognize the new interface, the compile test fails:
-
- /mariadb-10.2.19/CMakeFiles/CMakeTmp/src.cxx: In function 'int main(int, char**)':
- /mariadb-10.2.19/CMakeFiles/CMakeTmp/src.cxx:6:47: error: invalid conversion from 'char*' to 'int' [-fpermissive]
- int res= (*rl_completion_entry_function)(0,0);
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
-
- Fix this by adding a detection for the new interface as well.
-
- In client/mysql.cc the ifdefs for the new readline interface are
- extended to also check for the new libedit interface. They work the same
- way.
-
- Run-tested on a MIPS machine.
-
- Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
-
- --- a/client/mysql.cc
- +++ b/client/mysql.cc
- @@ -2578,7 +2578,7 @@ C_MODE_END
- if not.
- */
-
- -#if defined(USE_NEW_READLINE_INTERFACE)
- +#if defined(USE_NEW_READLINE_INTERFACE) || defined(USE_NEW_LIBEDIT_INTERFACE)
- static int fake_magic_space(int, int);
- extern "C" char *no_completion(const char*,int)
- #elif defined(USE_LIBEDIT_INTERFACE)
- @@ -2660,7 +2660,7 @@ static int not_in_history(const char *li
- }
-
-
- -#if defined(USE_NEW_READLINE_INTERFACE)
- +#if defined(USE_NEW_READLINE_INTERFACE) || defined(USE_NEW_LIBEDIT_INTERFACE)
- static int fake_magic_space(int, int)
- #else
- static int fake_magic_space(const char *, int)
- @@ -2677,7 +2677,7 @@ static void initialize_readline (char *n
- rl_readline_name = name;
-
- /* Tell the completer that we want a crack first. */
- -#if defined(USE_NEW_READLINE_INTERFACE)
- +#if defined(USE_NEW_READLINE_INTERFACE) || defined(USE_NEW_LIBEDIT_INTERFACE)
- rl_attempted_completion_function= (rl_completion_func_t*)&new_mysql_completion;
- rl_completion_entry_function= (rl_compentry_func_t*)&no_completion;
-
- @@ -2707,7 +2707,7 @@ static char **new_mysql_completion(const
- int end __attribute__((unused)))
- {
- if (!status.batch && !quick)
- -#if defined(USE_NEW_READLINE_INTERFACE)
- +#if defined(USE_NEW_READLINE_INTERFACE) || defined(USE_NEW_LIBEDIT_INTERFACE)
- return rl_completion_matches(text, new_command_generator);
- #else
- return completion_matches((char *)text, (CPFunction *)new_command_generator);
- --- a/cmake/readline.cmake
- +++ b/cmake/readline.cmake
- @@ -160,8 +160,20 @@ MACRO (MYSQL_FIND_SYSTEM_LIBEDIT)
- int res= (*rl_completion_entry_function)(0,0);
- completion_matches(0,0);
- }"
- - LIBEDIT_INTERFACE)
- - SET(USE_LIBEDIT_INTERFACE ${LIBEDIT_INTERFACE})
- + LIBEDIT_HAVE_COMPLETION_INT)
- +
- + CHECK_CXX_SOURCE_COMPILES("
- + #include <stdio.h>
- + #include <readline.h>
- + int main(int argc, char **argv)
- + {
- + char res= *(*rl_completion_entry_function)(0,0);
- + completion_matches(0,0);
- + }"
- + LIBEDIT_HAVE_COMPLETION_CHAR)
- + IF(LIBEDIT_HAVE_COMPLETION_INT OR LIBEDIT_HAVE_COMPLETION_CHAR)
- + SET(USE_LIBEDIT_INTERFACE 1)
- + ENDIF()
- ENDIF()
- ENDMACRO()
-
- @@ -187,6 +199,7 @@ MACRO (MYSQL_CHECK_READLINE)
- IF(USE_LIBEDIT_INTERFACE)
- SET(MY_READLINE_INCLUDE_DIR ${LIBEDIT_INCLUDE_DIR})
- SET(MY_READLINE_LIBRARY ${LIBEDIT_LIBRARY} ${CURSES_LIBRARY})
- + SET(USE_NEW_LIBEDIT_INTERFACE ${LIBEDIT_HAVE_COMPLETION_CHAR})
- ELSE()
- MYSQL_USE_BUNDLED_READLINE()
- ENDIF()
- --- a/config.h.cmake
- +++ b/config.h.cmake
- @@ -113,6 +113,7 @@
- /* Readline */
- #cmakedefine HAVE_HIST_ENTRY 1
- #cmakedefine USE_LIBEDIT_INTERFACE 1
- +#cmakedefine USE_NEW_LIBEDIT_INTERFACE 1
- #cmakedefine USE_NEW_READLINE_INTERFACE 1
-
- #cmakedefine FIONREAD_IN_SYS_IOCTL 1
|