From 501939c9c1433c5b95ca19ae752e5881149f61b9 Mon Sep 17 00:00:00 2001 From: Donghee Na Date: Fri, 29 Sep 2023 21:18:18 +0900 Subject: gh-105323: Update readline module to detect apple editline variant (gh-108665) --- Doc/using/configure.rst | 7 ++++--- Modules/readline.c | 4 ++++ configure | 17 +++++++++++++++++ configure.ac | 10 ++++++++++ pyconfig.h.in | 3 +++ 5 files changed, 38 insertions(+), 3 deletions(-) diff --git a/Doc/using/configure.rst b/Doc/using/configure.rst index 9403c19..83b4c7a 100644 --- a/Doc/using/configure.rst +++ b/Doc/using/configure.rst @@ -758,11 +758,12 @@ Libraries options .. versionadded:: 3.3 -.. cmdoption:: --with-readline=editline +.. cmdoption:: --with-readline=readline|editline - Use ``editline`` library for backend of the :mod:`readline` module. + Designate a backend library for the :mod:`readline` module. - Define the ``WITH_EDITLINE`` macro. + * readline: Use readline as the backend. + * editline: Use editline as the backend. .. versionadded:: 3.10 diff --git a/Modules/readline.c b/Modules/readline.c index aeae654..4b47302 100644 --- a/Modules/readline.c +++ b/Modules/readline.c @@ -1018,6 +1018,8 @@ on_hook(PyObject *func) static int #if defined(_RL_FUNCTION_TYPEDEF) on_startup_hook(void) +#elif defined(WITH_APPLE_EDITLINE) +on_startup_hook(const char *Py_UNUSED(text), int Py_UNUSED(state)) #else on_startup_hook(void) #endif @@ -1033,6 +1035,8 @@ on_startup_hook(void) static int #if defined(_RL_FUNCTION_TYPEDEF) on_pre_input_hook(void) +#elif defined(WITH_APPLE_EDITLINE) +on_pre_input_hook(const char *Py_UNUSED(text), int Py_UNUSED(state)) #else on_pre_input_hook(void) #endif diff --git a/configure b/configure index 098def9..0e5f3f6 100755 --- a/configure +++ b/configure @@ -23781,6 +23781,7 @@ fi + # Check whether --with-readline was given. if test ${with_readline+y} then : @@ -23803,6 +23804,22 @@ else $as_nop fi +# gh-105323: Need to handle the macOS editline as an alias of readline. +case $ac_sys_system/$ac_sys_release in #( + Darwin/*) : + ac_fn_c_check_type "$LINENO" "Function" "ac_cv_type_Function" "#include +" +if test "x$ac_cv_type_Function" = xyes +then : + printf "%s\n" "#define WITH_APPLE_EDITLINE 1" >>confdefs.h + +fi + ;; #( + *) : + + ;; +esac + if test "x$with_readline" = xreadline then : diff --git a/configure.ac b/configure.ac index 3e6cbc6..4938681 100644 --- a/configure.ac +++ b/configure.ac @@ -5832,6 +5832,7 @@ dnl library (tinfo ncursesw ncurses termcap). We now assume that libreadline dnl or readline.pc provide correct linker information. AH_TEMPLATE([WITH_EDITLINE], [Define to build the readline module against libedit.]) +AH_TEMPLATE([WITH_APPLE_EDITLINE], [Define to build the readline module against Apple BSD editline.]) AC_ARG_WITH( [readline], @@ -5848,6 +5849,15 @@ AC_ARG_WITH( [with_readline=readline] ) +# gh-105323: Need to handle the macOS editline as an alias of readline. +AS_CASE([$ac_sys_system/$ac_sys_release], + [Darwin/*], [AC_CHECK_TYPE([Function], + [AC_DEFINE([WITH_APPLE_EDITLINE])], + [], + [@%:@include ])], + [] +) + AS_VAR_IF([with_readline], [readline], [ PKG_CHECK_MODULES([LIBREADLINE], [readline], [ LIBREADLINE=readline diff --git a/pyconfig.h.in b/pyconfig.h.in index 86c72cc..c2c75c9 100644 --- a/pyconfig.h.in +++ b/pyconfig.h.in @@ -1788,6 +1788,9 @@ /* Define if WINDOW in curses.h offers a field _flags. */ #undef WINDOW_HAS_FLAGS +/* Define to build the readline module against Apple BSD editline. */ +#undef WITH_APPLE_EDITLINE + /* Define if you want build the _decimal module using a coroutine-local rather than a thread-local context */ #undef WITH_DECIMAL_CONTEXTVAR -- cgit v0.12