include $(PKGROOT)/Include
PKG_NAME = expect
-PKG_VER = 5.44.1.15
+PKG_VER = 5.43
PKG_REL = 0
PKG_MAINTAINER =
control another program and interact with it.
endef
-PKG_TARBALL = $(THISAPP).tar.gz
-
-QUALITY_AGENT_WHITELIST_RPATH = /usr/lib
+PKG_TARBALL = $(THISAPP).0.tar.gz
CONFIGURE_OPTIONS = \
--mandir=/usr/share/man \
--with-tcl=/usr/lib \
--with-tclinclude=/usr/include/ \
--with-x=no \
- --without-tk
-
-define STAGE_CONFIGURE_CMDS
- # Disable stubs
- cd $(DIR_APP) && sed -e "s/tclstub/tcl/g" -i Makefile
-endef
+ --enable-shared
define STAGE_TEST
cd $(DIR_APP) && make test
endef
-define STAGE_INSTALL_CMDS
+define STAGE_INSTALL
+ cd $(DIR_APP) && make install INSTALL_ROOT=$(BUILDROOT)
+
# remove cryptdir/decryptdir, as Linux has no crypt command
rm -f $(BUILDROOT)/usr/bin/{cryptdir,decryptdir}
rm -f $(BUILDROOT)/usr/share/man1/{cryptdir,decryptdir}.1*
--- /dev/null
+diff -up expect-5.43/configure.in.lib-spec expect-5.43/configure.in
+--- expect-5.43/configure.in.lib-spec 2005-02-08 02:45:06.000000000 +0100
++++ expect-5.43/configure.in 2008-09-25 12:23:26.000000000 +0200
+@@ -1141,7 +1141,7 @@ if test $ac_cv_sys_long_file_names = no;
+ fi
+
+ EXP_BUILD_LIB_SPEC="-L`pwd` -lexpect${EXP_LIB_VERSION}${DBGX}"
+-EXP_LIB_SPEC="-L\${INSTALL_ROOT}\${exec_prefix}/lib -lexpect${EXP_LIB_VERSION}${DBGX}"
++EXP_LIB_SPEC="-L\${libdir}/../.. -lexpect${EXP_LIB_VERSION}${DBGX}"
+ EXP_UNSHARED_LIB_FILE=libexpect${EXP_LIB_VERSION}${DBGX}.a
+
+ # The TCL_SHARED_LIB_SUFFIX macro below relies on the DBGX macro,
--- /dev/null
+diff -up expect-5.43/Makefile.in.libdir expect-5.43/Makefile.in
+--- expect-5.43/Makefile.in.libdir 2004-05-07 20:10:30.000000000 +0200
++++ expect-5.43/Makefile.in 2008-09-25 12:24:08.000000000 +0200
+@@ -317,7 +317,7 @@ EXP_AND_TK_LIBS = $(LDFLAGS) @EXP_AND_TK
+ CFLAGS_INT = $(MH_CFLAGS) $(CPPFLAGS) $(XCFLAGS)
+
+ LIB_INSTALL_DIR = $(tcl_libdir)
+-LIB_RUNTIME_DIR = $(tcl_libdir)
++LIB_RUNTIME_DIR = $(subst $(INSTALL_ROOT),,$(tcl_libdir))
+ # I don't understand why Tcl splits these up, but it does. LIB_RUNTIME_DIR
+ # can appear as part of the LD_SEARCH_FLAGS inherited by configure.
+
--- /dev/null
+diff -Nur expect-5.43_old/configure expect-5.43_new/configure
+--- expect-5.43_old/configure 2010-03-10 10:11:41.000000000 +0100
++++ expect-5.43_new/configure 2010-03-10 10:12:01.000000000 +0100
+@@ -9,7 +9,7 @@
+
+ # Defaults:
+ ac_help=
+-ac_default_prefix=/usr/local
++ac_default_prefix=/usr
+ # Any additions from configure.in:
+ ac_help="$ac_help
+ --enable-threads build with threads (not supported)"
--- /dev/null
+Submitted By: LFS Book <lfs-book@linuxfromscratch.org>
+Date: 2003-10-05
+Initial Package Version: 5.38
+Origin: Redhat RPM (Patch by HJ Lu)
+Description: NA
+diff -uNr expect-5.38.orig/exp_chan.c expect-5.38/exp_chan.c
+--- expect-5.38.orig/exp_chan.c 2002-02-12 13:00:55.000000000 +1100
++++ expect-5.38/exp_chan.c 2003-03-01 10:36:18.000000000 +1100
+@@ -519,6 +519,7 @@
+ esPtr->buffer = Tcl_NewStringObj("",0);
+ Tcl_IncrRefCount(esPtr->buffer);
+ esPtr->umsize = exp_default_match_max;
++ esPtr->umsize_changed = exp_default_match_max_changed;
+ /* this will reallocate object with an appropriate sized buffer */
+ expAdjust(esPtr);
+
+diff -uNr expect-5.38.orig/exp_command.h expect-5.38/exp_command.h
+--- expect-5.38.orig/exp_command.h 2002-04-08 08:57:20.000000000 +1000
++++ expect-5.38/exp_command.h 2003-03-01 10:36:18.000000000 +1100
+@@ -25,6 +25,7 @@
+ EXTERN char * exp_get_var _ANSI_ARGS_((Tcl_Interp *,char *));
+
+ EXTERN int exp_default_match_max;
++EXTERN int exp_default_match_max_changed;
+ EXTERN int exp_default_parity;
+ EXTERN int exp_default_rm_nulls;
+
+@@ -97,6 +98,7 @@
+ int msize; /* # of bytes that buffer can hold (max) */
+ int umsize; /* # of bytes (min) that is guaranteed to match */
+ /* this comes from match_max command */
++ int umsize_changed; /* is umsize changed by user? */
+ int printed; /* # of bytes written to stdout (if logging on) */
+ /* but not actually returned via a match yet */
+ int echoed; /* additional # of bytes (beyond "printed" above) */
+diff -uNr expect-5.38.orig/expect.c expect-5.38/expect.c
+--- expect-5.38.orig/expect.c 2002-04-08 09:00:33.000000000 +1000
++++ expect-5.38/expect.c 2003-03-01 10:36:18.000000000 +1100
+@@ -41,8 +41,17 @@
+ #include "tcldbg.h"
+ #endif
+
++/* The initial length is 2000. We increment it by 2000. The maximum
++ is 8MB (0x800000). */
++#define EXP_MATCH_MAX 2000
++#define EXP_MATCH_INC 2000
++#define EXP_MATCH_STEP_LIMIT 0x700000
++#define EXP_MATCH_LIMIT 0x800000
++#define EXP_MATCH_LIMIT_QUOTE "0x800000"
++
+ /* initial length of strings that we can guarantee patterns can match */
+-int exp_default_match_max = 2000;
++int exp_default_match_max = EXP_MATCH_MAX;
++int exp_default_match_max_changed = 0;
+ #define INIT_EXPECT_TIMEOUT_LIT "10" /* seconds */
+ #define INIT_EXPECT_TIMEOUT 10 /* seconds */
+ int exp_default_parity = TRUE;
+@@ -1618,6 +1627,76 @@
+ return newsize;
+ }
+
++/* returns # of bytes until we see a newline at the end or EOF. */
++/*ARGSUSED*/
++static int
++expReadNewLine(interp,esPtr,save_flags) /* INTL */
++Tcl_Interp *interp;
++ExpState *esPtr;
++int save_flags;
++{
++ int size;
++ int exp_size;
++ int full_size;
++ int count;
++ char *str;
++
++ count = 0;
++ for (;;) {
++ exp_size = expSizeGet(esPtr);
++
++ /* When we reach the limit, we will only read one char at a
++ time. */
++ if (esPtr->umsize >= EXP_MATCH_STEP_LIMIT)
++ size = TCL_UTF_MAX;
++ else
++ size = exp_size;
++
++ if (exp_size + TCL_UTF_MAX >= esPtr->msize) {
++ if (esPtr->umsize >= EXP_MATCH_LIMIT) {
++ expDiagLogU("WARNING: interact buffer is full. probably your program\r\n");
++ expDiagLogU("is not interactive or has a very long output line. The\r\n");
++ expDiagLogU("current limit is " EXP_MATCH_LIMIT_QUOTE ".\r\n");
++ expDiagLogU("Dumping first half of buffer in order to continue\r\n");
++ expDiagLogU("Recommend you enlarge the buffer.\r\n");
++ exp_buffer_shuffle(interp,esPtr,save_flags,EXPECT_OUT,"expect");
++ return count;
++ }
++ else {
++ esPtr->umsize += EXP_MATCH_INC;
++ expAdjust(esPtr);
++ }
++ }
++
++ full_size = esPtr->msize - (size / TCL_UTF_MAX);
++ size = Tcl_ReadChars(esPtr->channel,
++ esPtr->buffer,
++ full_size,
++ 1 /* append */);
++ if (size > 0) {
++ count += size;
++ /* We try again if there are more to read and we haven't
++ seen a newline at the end. */
++ if (size == full_size) {
++ str = Tcl_GetStringFromObj(esPtr->buffer, &size);
++ if (str[size - 1] != '\n')
++ continue;
++ }
++ }
++ else {
++ /* It is even trickier. We got an error from read. We have
++ to recover from it. Let's make sure the size of
++ buffer is correct. It can be corrupted. */
++ str = Tcl_GetString(esPtr->buffer);
++ Tcl_SetObjLength(esPtr->buffer, strlen(str));
++ }
++
++ break;
++ }
++
++ return count;
++}
++
+ /* returns # of bytes read or (non-positive) error of form EXP_XXX */
+ /* returns 0 for end of file */
+ /* If timeout is non-zero, set an alarm before doing the read, else assume */
+@@ -1632,6 +1711,8 @@
+ {
+ int cc = EXP_TIMEOUT;
+ int size = expSizeGet(esPtr);
++ int full_size;
++ int count;
+
+ if (size + TCL_UTF_MAX >= esPtr->msize)
+ exp_buffer_shuffle(interp,esPtr,save_flags,EXPECT_OUT,"expect");
+@@ -1648,11 +1729,43 @@
+ }
+ #endif
+
+-
++ /* FIXME: If we ask less than what is available in the tcl buffer
++ when tcl has seen EOF, we will throw away the remaining data
++ since the next read will get EOF. Since expect is line-oriented,
++ we exand our buffer to get EOF or the next newline at the end of
++ the input buffer. I don't know if it is the right fix. H.J. */
++ count = 0;
++ full_size = esPtr->msize - (size / TCL_UTF_MAX);
+ cc = Tcl_ReadChars(esPtr->channel,
+- esPtr->buffer,
+- esPtr->msize - (size / TCL_UTF_MAX),
+- 1 /* append */);
++ esPtr->buffer,
++ full_size,
++ 1 /* append */);
++ if (cc > 0) {
++ count += cc;
++ /* It gets very tricky. There are more to read. We will expand
++ our buffer and get EOF or a newline at the end unless the
++ buffer length has been changed. */
++ if (cc == full_size) {
++ char *str;
++ str = Tcl_GetStringFromObj(esPtr->buffer, &size);
++ if (str[size - 1] != '\n') {
++ if (esPtr->umsize_changed) {
++ char buf[20]; /* big enough for 64bit int in hex. */
++ snprintf(buf,sizeof(buf),"0x%x", esPtr->umsize);
++ expDiagLogU("WARNING: interact buffer is not large enough to hold\r\n");
++ expDiagLogU("all output. probably your program is not interactive or\r\n");
++ expDiagLogU("has a very long output line. The current limit is ");
++ expDiagLogU(buf);
++ expDiagLogU(".\r\n");
++ }
++ else {
++ cc = expReadNewLine(interp,esPtr,save_flags);
++ if (cc > 0)
++ count += cc;
++ }
++ }
++ }
++ }
+ i_read_errno = errno;
+
+ #ifdef SIMPLE_EVENT
+@@ -1673,7 +1786,7 @@
+ }
+ }
+ #endif
+- return cc;
++ return count > 0 ? count : cc;
+ }
+
+ /*
+@@ -2746,8 +2859,14 @@
+ return(TCL_ERROR);
+ }
+
+- if (Default) exp_default_match_max = size;
+- else esPtr->umsize = size;
++ if (Default) {
++ exp_default_match_max = size;
++ exp_default_match_max_changed = 1;
++ }
++ else {
++ esPtr->umsize = size;
++ esPtr->umsize_changed = 1;
++ }
+
+ return(TCL_OK);
+ }
--- /dev/null
+Submitted By: DJ Lucas <dj_AT_linuxfromscratch_DOT_org>
+Date: 2008-09-28
+Initial Package Version: 5.43
+Upstream status: Not Submitted
+Origin: LFS ticket 2126 (http://wiki.linuxfromscratch.org/lfs/ticket/2126)
+ Bryan Kadzban <bryan@kadzban.is-a-geek.net>
+Description: Removes references to functions that Tcl 8.5 no longer exposes
+ and correct other minor build problems WRT TCL-8.5.x.
+
+diff -Naur expect-5.43-orig/Dbg.c expect-5.43/Dbg.c
+--- expect-5.43-orig/Dbg.c 2002-03-22 22:11:54.000000000 -0600
++++ expect-5.43/Dbg.c 2008-08-24 01:30:15.000000000 -0500
+@@ -9,7 +9,7 @@
+ */
+
+ #include <stdio.h>
+-
++#include "expect_cf.h"
+ #include "tcldbgcf.h"
+ #if 0
+ /* tclInt.h drags in stdlib. By claiming no-stdlib, force it to drag in */
+diff -Naur expect-5.43-orig/exp_inter.c expect-5.43/exp_inter.c
+--- expect-5.43-orig/exp_inter.c 2004-08-17 21:03:00.000000000 -0500
++++ expect-5.43/exp_inter.c 2008-08-24 01:28:59.000000000 -0500
+@@ -36,6 +36,7 @@
+ #include <ctype.h>
+
+ #include "tcl.h"
++#include "tclInt.h"
+ #include "string.h"
+
+ #include "exp_tty_in.h"
+diff -Naur expect-5.43/exp_command.c expect-5.43-patched/exp_command.c
+--- expect-5.43/exp_command.c 2004-08-20 13:18:01.000000000 -0400
++++ expect-5.43-patched/exp_command.c 2008-01-12 11:42:45.000000000 -0500
+@@ -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 -Naur expect-5.43/exp_command.h expect-5.43-patched/exp_command.h
+--- expect-5.43/exp_command.h 2008-01-12 11:44:11.000000000 -0500
++++ expect-5.43-patched/exp_command.h 2008-01-12 11:26:05.000000000 -0500
+@@ -297,6 +297,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 *,
+++ /dev/null
-Submitted By: Matt Burgess <matthew_at_linuxfromscratch_dot_org>
-Date: 2010-06-20
-Initial Package Version: 5.44.1.15
-Upstream Status: Submitted
-Origin: Gilles Espinasse
-Description: Allows the compilation of expectk to be disabled by
- passing --with-tk=no to the configure script.
-
-diff -Naur expect-5.44.1.15.orig/INSTALL expect-5.44.1.15/INSTALL
---- expect-5.44.1.15.orig/INSTALL 2010-03-11 19:06:30.000000000 +0000
-+++ expect-5.44.1.15/INSTALL 2010-06-19 21:17:43.000000000 +0000
-@@ -152,6 +152,7 @@
-
- --with-tk=... Specifies the directory containing Tk's
- configure file (tkConfig.sh).
-+ --with-tk=no disable Tk usage in expect
-
- --with-tkinclude=... Specifies the directory containing Tk's
- private include files (such as tkInt.h)
-diff -Naur expect-5.44.1.15.orig/Makefile.in expect-5.44.1.15/Makefile.in
---- expect-5.44.1.15.orig/Makefile.in 2010-03-11 19:06:30.000000000 +0000
-+++ expect-5.44.1.15/Makefile.in 2010-06-19 21:09:39.000000000 +0000
-@@ -103,7 +103,10 @@
- PKG_STUB_LIB_FILE = @PKG_STUB_LIB_FILE@
-
- lib_BINARIES = $(PKG_LIB_FILE)
--bin_BINARIES = expect expectk
-+bin_BINARIES = expect
-+ifneq ($(TK_BIN_DIR),)
-+ bin_BINARIES += expectk
-+endif
- BINARIES = $(lib_BINARIES) $(bin_BINARIES)
-
- SHELL = @SHELL@
-diff -Naur expect-5.44.1.15.orig/configure expect-5.44.1.15/configure
---- expect-5.44.1.15.orig/configure 2010-03-11 19:06:30.000000000 +0000
-+++ expect-5.44.1.15/configure 2010-06-19 21:27:51.000000000 +0000
-@@ -1754,6 +1754,12 @@
- withval="$with_tk"
- with_tkconfig=${withval}
- fi;
-+
-+ if test x"${with_tkconfig}" = x"no" ; then
-+ echo "$as_me:$LINENO: result: Tk is disabled by --with-tk=no" >&5
-+echo "${ECHO_T}Tk is disabled by --with-tk=no" >&6
-+ unset TK_BIN_DIR
-+ else
- echo "$as_me:$LINENO: checking for Tk configuration" >&5
- echo $ECHO_N "checking for Tk configuration... $ECHO_C" >&6
- if test "${ac_cv_c_tkconfig+set}" = set; then
-@@ -1873,6 +1879,7 @@
- echo "$as_me:$LINENO: result: found ${TK_BIN_DIR}/tkConfig.sh" >&5
- echo "${ECHO_T}found ${TK_BIN_DIR}/tkConfig.sh" >&6
- fi
-+ fi
- fi
-
-
-@@ -6458,6 +6465,11 @@
- echo "${ECHO_T}Using srcdir found in tclConfig.sh: ${TCL_SRC_DIR}" >&6
-
-
-+ if test x"${with_tkconfig}" = x"no" ; then
-+ TK_INCLUDES=""
-+
-+ else
-+
- echo "$as_me:$LINENO: checking for Tk public headers" >&5
- echo $ECHO_N "checking for Tk public headers... $ECHO_C" >&6
-
-@@ -6556,6 +6568,7 @@
- echo "$as_me:$LINENO: result: ${INCLUDE_DIR_NATIVE}" >&5
- echo "${ECHO_T}${INCLUDE_DIR_NATIVE}" >&6
- fi
-+ fi
-
-
- #--------------------------------------------------------------------
-diff -Naur expect-5.44.1.15.orig/tclconfig/tcl.m4 expect-5.44.1.15/tclconfig/tcl.m4
---- expect-5.44.1.15.orig/tclconfig/tcl.m4 2010-03-11 19:06:30.000000000 +0000
-+++ expect-5.44.1.15/tclconfig/tcl.m4 2010-06-19 21:17:02.000000000 +0000
-@@ -181,10 +181,12 @@
- #
- # Adds the following arguments to configure:
- # --with-tk=...
-+# --with-tk=no disable Tk is disabled
- #
- # Defines the following vars:
- # TK_BIN_DIR Full path to the directory containing
- # the tkConfig.sh file
-+# Empty if Tk is disabled
- #------------------------------------------------------------------------
-
- AC_DEFUN(TEA_PATH_TKCONFIG, [
-@@ -201,6 +203,11 @@
- AC_HELP_STRING([--with-tk],
- [directory containing tk configuration (tkConfig.sh)]),
- with_tkconfig=${withval})
-+
-+ if test x"${with_tkconfig}" = x"no" ; then
-+ AC_MSG_RESULT([Tk is disabled by --with-tk=no])
-+ unset TK_BIN_DIR
-+ else
- AC_MSG_CHECKING([for Tk configuration])
- AC_CACHE_VAL(ac_cv_c_tkconfig,[
-
-@@ -309,6 +316,7 @@
- TK_BIN_DIR=${ac_cv_c_tkconfig}
- AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh])
- fi
-+ fi
- fi
- ])
-
-@@ -3528,6 +3536,11 @@
- #------------------------------------------------------------------------
-
- AC_DEFUN(TEA_PUBLIC_TK_HEADERS, [
-+ if test x"${with_tkconfig}" = x"no" ; then
-+ TK_INCLUDES=""
-+ AC_SUBST(TK_INCLUDES)
-+ else
-+
- AC_MSG_CHECKING([for Tk public headers])
-
- AC_ARG_WITH(tkinclude, [ --with-tkinclude directory containing the public Tk header files.], with_tkinclude=${withval})
-@@ -3608,6 +3621,7 @@
- fi
- AC_MSG_RESULT([${INCLUDE_DIR_NATIVE}])
- fi
-+ fi
- ])
-
- #------------------------------------------------------------------------