diff -ur a/configure.ac b/configure.ac --- a/configure.ac 2000-12-08 01:45:45.000000000 +0100 +++ b/configure.ac 2013-11-15 13:37:36.490520853 +0100 @@ -182,29 +182,36 @@ [ --with-readline-library=DIR lib spec to readline (e.g. '-L/usr/local/lib -lreadline')], LIBS="$LIBS $withval", - AC_CHECK_LIB(readline, rl_callback_read_char, , - AC_MSG_RESULT([ - Your readline version does not support readline's alternate interface. - Please upgrade to readline >= 2.2 and retry. - ]) - exit + AC_SEARCH_LIBS(rl_callback_read_char, readline, , + AC_MSG_RESULT([ + Your readline version does not support readline's alternate interface. + Please upgrade to readline >= 2.2 and retry. + ]) + exit ) ) -# check for readline's (macro.c) private variable -# _rl_executing_macro. +# check for readline's rl_executing_macro +# (could be macro.c's private variable _rl_executing_macro). -AC_MSG_CHECKING([for _rl_executing_macro in -lreadline]) -AC_TRY_LINK(,[ +AC_CHECK_DECL(rl_executing_macro +, AC_DEFINE(EXECUTING_MACRO_NAME, rl_executing_macro, + [ Define the name of the executing macro variable in libreadline. ]) +, AC_MSG_CHECKING([for _rl_executing_macro in -lreadline]) + AC_TRY_LINK(,[ extern char* _rl_executing_macro; _rl_executing_macro = (char*) 0; -], - AC_MSG_RESULT(yes); + ] + , AC_MSG_RESULT(yes) AC_DEFINE(EXECUTING_MACRO_HACK, 1, - [ Define if _rl_executing_macro is resolved in libreadline. ]), - AC_MSG_RESULT(no)) + [ Define if EXECUTING_MACRO_NAME is resolved in libreadline. ]) + AC_DEFINE(EXECUTING_MACRO_NAME, _rl_executing_macro, + [ Define the name of the executing macro variable in libreadline. ]) + , AC_MSG_RESULT(no)) +, [AC_INCLUDES_DEFAULT +#include "$READLINE_INCLUDE_DIR/readline.h"]) # check for readline's rl_cleanup_after_signal diff -ur a/tclreadline.c b/tclreadline.c --- a/tclreadline.c 2000-09-20 19:44:34.000000000 +0200 +++ b/tclreadline.c 2013-11-15 11:09:42.269771129 +0100 @@ -41,7 +41,7 @@ * We need it here to decide, if we should read more * characters from a macro. Dirty, but it should work. */ -extern char* _rl_executing_macro; +extern char* EXECUTING_MACRO_NAME; #endif #include "tclreadline.h" @@ -249,14 +249,14 @@ tclrl_state = LINE_PENDING; while (!TclReadlineLineComplete()) { -#ifdef EXECUTING_MACRO_HACK +#ifdef EXECUTING_MACRO_NAME /** * check first, if more characters are * available from _rl_executing_macro, * because Tcl_DoOneEvent() will (naturally) * not detect this `event'. */ - if (_rl_executing_macro) + if (EXECUTING_MACRO_NAME) TclReadlineReadHandler((ClientData) NULL, TCL_READABLE); else #endif @@ -468,17 +468,17 @@ TclReadlineReadHandler(ClientData clientData, int mask) { if (mask & TCL_READABLE) { -#ifdef EXECUTING_MACRO_HACK +#ifdef EXECUTING_MACRO_NAME do { #endif rl_callback_read_char(); -#ifdef EXECUTING_MACRO_HACK +#ifdef EXECUTING_MACRO_NAME /** * check, if we're inside a macro and * if so, read all macro characters * until the next eol. */ - } while (_rl_executing_macro && !TclReadlineLineComplete()); + } while (EXECUTING_MACRO_NAME && !TclReadlineLineComplete()); #endif } } @@ -517,12 +517,12 @@ Tcl_AppendResult(tclrl_interp, expansion, (char*) NULL); -#ifdef EXECUTING_MACRO_HACK +#ifdef EXECUTING_MACRO_NAME /** * don't stuff macro lines * into readline's history. */ - if(!_rl_executing_macro) { + if(!EXECUTING_MACRO_NAME) { #endif /** * don't stuff empty lines @@ -537,7 +537,7 @@ if (tclrl_last_line) free(tclrl_last_line); tclrl_last_line = strdup(expansion); -#ifdef EXECUTING_MACRO_HACK +#ifdef EXECUTING_MACRO_NAME } #endif /**