From d1e22ba7db9d8668c486eb77999bbbbdca8b09d3 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Wed, 26 Nov 2014 14:35:12 -0600 Subject: [PATCH] only support append_history if readline has it --- Lib/test/test_readline.py | 2 ++ Modules/readline.c | 4 ++++ configure | 43 +++++++++++++++++++++++++++++++++++++++ configure.ac | 4 ++++ pyconfig.h.in | 3 +++ 5 files changed, 56 insertions(+) diff --git a/Lib/test/test_readline.py b/Lib/test/test_readline.py index e5be02eb802..804887afadc 100644 --- a/Lib/test/test_readline.py +++ b/Lib/test/test_readline.py @@ -43,6 +43,8 @@ class TestHistoryManipulation (unittest.TestCase): self.assertEqual(readline.get_current_history_length(), 1) + @unittest.skipUnless(hasattr(readline, "append_history"), + "append_history not available") def test_write_read_append(self): hfile = tempfile.NamedTemporaryFile(delete=False) hfile.close() diff --git a/Modules/readline.c b/Modules/readline.c index b5a0eba50bc..7e0282c5789 100644 --- a/Modules/readline.c +++ b/Modules/readline.c @@ -237,6 +237,7 @@ Save a readline history file.\n\ The default filename is ~/.history."); +#ifdef HAVE_RL_APPEND_HISTORY /* Exported function to save part of a readline history file */ static PyObject * @@ -270,6 +271,7 @@ PyDoc_STRVAR(doc_append_history_file, "append_history_file(nelements[, filename]) -> None\n\ Append the last nelements of the history list to file.\n\ The default filename is ~/.history."); +#endif /* Set history length */ @@ -782,7 +784,9 @@ static struct PyMethodDef readline_methods[] = METH_VARARGS, doc_read_history_file}, {"write_history_file", write_history_file, METH_VARARGS, doc_write_history_file}, +#ifdef HAVE_RL_APPEND_HISTORY {"append_history_file", append_history_file, +#endif METH_VARARGS, doc_append_history_file}, {"get_history_item", get_history_item, METH_VARARGS, doc_get_history_item}, diff --git a/configure b/configure index 4247a78f608..44a74778d10 100755 --- a/configure +++ b/configure @@ -14529,6 +14529,49 @@ rm -f conftest* fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for append_history in -lreadline" >&5 +$as_echo_n "checking for append_history in -lreadline... " >&6; } +if ${ac_cv_lib_readline_append_history+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lreadline $READLINE_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char append_history (); +int +main () +{ +return append_history (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_readline_append_history=yes +else + ac_cv_lib_readline_append_history=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_readline_append_history" >&5 +$as_echo "$ac_cv_lib_readline_append_history" >&6; } +if test "x$ac_cv_lib_readline_append_history" = xyes; then : + +$as_echo "#define HAVE_RL_APPEND_HISTORY 1" >>confdefs.h + +fi + + # End of readline checks: restore LIBS LIBS=$LIBS_no_readline diff --git a/configure.ac b/configure.ac index 05dc0e69c52..c12622bbb99 100644 --- a/configure.ac +++ b/configure.ac @@ -4308,6 +4308,10 @@ then [Define if you can turn off readline's signal handling.]), ) fi +AC_CHECK_LIB(readline, append_history, + AC_DEFINE(HAVE_RL_APPEND_HISTORY, 1, + [Define if readline supports append_history]), ,$READLINE_LIBS) + # End of readline checks: restore LIBS LIBS=$LIBS_no_readline diff --git a/pyconfig.h.in b/pyconfig.h.in index e469f6abe91..9ebea5db29e 100644 --- a/pyconfig.h.in +++ b/pyconfig.h.in @@ -690,6 +690,9 @@ /* Define to 1 if you have the `renameat' function. */ #undef HAVE_RENAMEAT +/* Define if readline supports append_history */ +#undef HAVE_RL_APPEND_HISTORY + /* Define if you have readline 2.1 */ #undef HAVE_RL_CALLBACK