From: hawk Date: Sat, 19 Jan 2008 16:43:50 +0000 (+0000) Subject: - fix for compilation with TCL 8.5, taken from X-Git-Tag: auto/th/expect-5_43_0-2~2 X-Git-Url: http://git.pld-linux.org/?p=packages%2Fexpect.git;a=commitdiff_plain;h=7507d456a7994cf1deb02919b18f3fe5aec1f355 - fix for compilation with TCL 8.5, taken from http://wiki.linuxfromscratch.org/lfs/ticket/2126 Changed files: expect-tcl85.patch -> 1.1 --- diff --git a/expect-tcl85.patch b/expect-tcl85.patch new file mode 100644 index 0000000..bdee084 --- /dev/null +++ b/expect-tcl85.patch @@ -0,0 +1,105 @@ +diff -ur expect-5.43.orig/exp_command.c expect-5.43/exp_command.c +--- expect-5.43.orig/exp_command.c 2004-08-20 19:18:01.000000000 +0200 ++++ expect-5.43/exp_command.c 2008-01-19 17:40:20.000000000 +0100 +@@ -2265,6 +2265,8 @@ + /*NOTREACHED*/ + } + ++static struct exp_cmd_data cmd_data[]; ++ + /*ARGSUSED*/ + static int + Exp_CloseObjCmd(clientData, interp, objc, objv) +@@ -2311,12 +2313,23 @@ + /* Historical note: we used "close" long before there was a */ + /* Tcl builtin by the same name. */ + ++ /* The code that registered this function as the handler for */ ++ /* the "close" command stored away the old handler in the */ ++ /* exp_cmd_data for the "close" command. */ ++ ++ struct exp_cmd_data *cmd_ptr; + Tcl_CmdInfo info; ++ ++ for(cmd_ptr = &cmd_data[0]; cmd_ptr->name; cmd_ptr++) { ++ if(strncmp(cmd_ptr->name, "close", 5) == 0) ++ break; ++ } ++ + Tcl_ResetResult(interp); + if (0 == Tcl_GetCommandInfo(interp,"close",&info)) { + info.clientData = 0; + } +- return(Tcl_CloseObjCmd(info.clientData,interp,objc_orig,objv_orig)); ++ return(cmd_ptr->old_objProc(info.clientData,interp,objc_orig,objv_orig)); + } + + if (chanName) { +@@ -2961,7 +2974,10 @@ + /* if successful (i.e., TCL_RETURN is returned) */ + /* modify the result, so that we will handle it specially */ + +- int result = Tcl_ReturnObjCmd(clientData,interp,objc,objv); ++ Tcl_CmdInfo info; ++ Tcl_GetCommandInfo(interp, "return", &info); ++ ++ int result = info.objProc(clientData,interp,objc,objv); + if (result == TCL_RETURN) + result = EXP_TCL_RETURN; + return result; +@@ -3062,8 +3078,7 @@ + + for (;c->name;c++) { + /* if already defined, don't redefine */ +- if ((c->flags & EXP_REDEFINE) || +- !(Tcl_FindHashEntry(&globalNsPtr->cmdTable,c->name) || ++ if (!(Tcl_FindHashEntry(&globalNsPtr->cmdTable,c->name) || + Tcl_FindHashEntry(&currNsPtr->cmdTable,c->name))) { + if (c->objproc) + Tcl_CreateObjCommand(interp,c->name, +@@ -3072,6 +3087,21 @@ + Tcl_CreateCommand(interp,c->name,c->proc, + c->data,exp_deleteProc); + } ++ else if (c->flags & EXP_REDEFINE) { /* unless the REDEFINE flag is present */ ++ Tcl_CmdInfo info; ++ ++ if (Tcl_GetCommandInfo(interp, c->name, &info)) { ++ c->old_proc = info.proc; ++ c->old_objProc = info.objProc; ++ } ++ ++ if (c->objproc) ++ Tcl_CreateObjCommand(interp,c->name, ++ c->objproc,c->data,exp_deleteObjProc); ++ else ++ Tcl_CreateCommand(interp,c->name,c->proc, ++ c->data,exp_deleteProc); ++ } + if (!(c->name[0] == 'e' && + c->name[1] == 'x' && + c->name[2] == 'p') +diff -ur expect-5.43.orig/exp_command.h expect-5.43/exp_command.h +--- expect-5.43.orig/exp_command.h 2004-07-30 17:35:28.000000000 +0200 ++++ expect-5.43/exp_command.h 2008-01-19 17:40:20.000000000 +0100 +@@ -295,6 +295,8 @@ + Tcl_CmdProc *proc; + ClientData data; + int flags; ++ Tcl_CmdProc *old_proc; /* these store the procedure for the old command, */ ++ Tcl_ObjCmdProc *old_objProc; /* if any */ + }; + + EXTERN void exp_create_commands _ANSI_ARGS_((Tcl_Interp *, +diff -ur expect-5.43.orig/exp_inter.c expect-5.43/exp_inter.c +--- expect-5.43.orig/exp_inter.c 2004-08-18 04:03:00.000000000 +0200 ++++ expect-5.43/exp_inter.c 2008-01-19 17:40:01.000000000 +0100 +@@ -35,7 +35,7 @@ + + #include + +-#include "tcl.h" ++#include "tclInt.h" + #include "string.h" + + #include "exp_tty_in.h"