mats@enea.se (Mats Josefsson) (06/13/91)
A few weeks ago I asked if anyone had managed to get the expect
program (and thus also the tcl library) up on a HP9000/800 series
machine running HP-UX 7.0 (we're running 7.02).
Thanks to mcorrigan@ucsd.edu and nick@pluto.bis.com I managed to
get tcl to work correctly. I also got expect to (almost) work.
The only problem I have encountered is running programs that
fiddles with the pty. For instance the passwd and ftp example
programs don't work. I have used it extensively with telnet
with no problems at all.
I got the latest version of tcl from ucbvax.berkeley.edu and expect
from durer.cme.nist.gov. mcorrigan also mentioned some patches to
tcl at ucbvax, but I didn't find any.
To compile expect I used the following defs in the Makefile:
PTY_TYPE= usg
INTERACT_TYPE= select
CFLAGS= -DHPUX -DSYV3
Below are context diffs for the things I had to change to get tcl
running. With these changes it passes all the tests in the distribution.
---- CONTEXT DIFFS FOR TCL ----
RCS file: RCS/Makefile,v
retrieving revision 1.1
rdiff -c -r1.1 Makefile
*** /tmp/,RCSt1a17951 Thu Jun 6 08:40:39 1991
--- Makefile Tue Jun 4 11:20:50 1991
***************
*** 4,11
# For HP-UX systems, use the second, commented-out, form of LIBS below.
#
! LIBS =
! #LIBS = -lBSD
CFLAGS = -g -I. -DTCL_VERSION=\"3.3\"
--- 4,11 -----
# For HP-UX systems, use the second, commented-out, form of LIBS below.
#
! #LIBS =
! LIBS = -lBSD
CFLAGS = -g -I. -DTCL_VERSION=\"3.3\"
***************
*** 12,19
OBJS = tclAssem.o tclBasic.o tclCmdAH.o tclCmdIZ.o tclExpr.o \
tclGlob.o tclHistory.o tclProc.o tclUtil.o
! LIBOBJS = panic.o strerror.o strtol.o strtoul.o strspn.o \
! strpbrk.o strchr.o strstr.o
CSRCS = tclAssem.c tclBasic.c tclCmdAH.c tclCmdIZ.c tclExpr.c \
tclGlob.c tclHistory.c tclProc.c tclUtil.c
--- 12,18 -----
OBJS = tclAssem.o tclBasic.o tclCmdAH.o tclCmdIZ.o tclExpr.o \
tclGlob.o tclHistory.o tclProc.o tclUtil.o
! LIBOBJS = panic.o strtoul.o
CSRCS = tclAssem.c tclBasic.c tclCmdAH.c tclCmdIZ.c tclExpr.c \
tclGlob.c tclHistory.c tclProc.c tclUtil.c
===================================================================
RCS file: RCS/tclCmdAH.c,v
retrieving revision 1.1
rdiff -c -r1.1 tclCmdAH.c
*** /tmp/,RCSt1a17951 Thu Jun 6 08:40:40 1991
--- tclCmdAH.c Fri May 17 08:58:19 1991
***************
*** 425,431
int pid = -1; /* -1 means child process doesn't
* exist (yet). Non-zero gives its
* id (0 only in child). */
! union wait status;
char *cmdName, *execName;
/*
--- 425,431 -----
int pid = -1; /* -1 means child process doesn't
* exist (yet). Non-zero gives its
* id (0 only in child). */
! int status;
char *cmdName, *execName;
/*
***************
*** 633,639
sprintf(interp->result, "command terminated abnormally");
result = TCL_ERROR;
}
! result = status.w_retcode;
}
if (stdIn[0] != -1) {
close(stdIn[0]);
--- 633,639 -----
sprintf(interp->result, "command terminated abnormally");
result = TCL_ERROR;
}
! result = WEXITSTATUS(status);
}
if (stdIn[0] != -1) {
close(stdIn[0]);
===================================================================
RCS file: RCS/tclGlob.c,v
retrieving revision 1.1
rdiff -c -r1.1 tclGlob.c
*** /tmp/,RCSt1a17951 Thu Jun 6 08:40:41 1991
--- tclGlob.c Thu Jun 6 08:39:29 1991
***************
*** 248,253
/*
* If there were any pattern-matching characters, then scan through
* the directory to find all the matching names.
*/
if (gotSpecial) {
--- 248,258 -----
/*
* If there were any pattern-matching characters, then scan through
* the directory to find all the matching names.
+ *
+ * In HPUX 7.0, stat(2) and readdir(3) do not work with an empty
+ * string, i.e. stat(""). The fix is to be explicit.
+ *
+ * - Nick Bender 7-20-90
*/
if (gotSpecial) {
***************
*** 257,262
char *pattern, *newDir;
char static1[STATIC_SIZE], static2[STATIC_SIZE];
struct stat statBuf;
if ((stat(dir, &statBuf) != 0)
|| ((statBuf.st_mode & S_IFMT) != S_IFDIR)) {
--- 262,268 -----
char *pattern, *newDir;
char static1[STATIC_SIZE], static2[STATIC_SIZE];
struct stat statBuf;
+ char *explicitDir = (*dir ? dir: ".");
if ((stat(explicitDir, &statBuf) != 0)
|| ((statBuf.st_mode & S_IFMT) != S_IFDIR)) {
***************
*** 258,264
char static1[STATIC_SIZE], static2[STATIC_SIZE];
struct stat statBuf;
! if ((stat(dir, &statBuf) != 0)
|| ((statBuf.st_mode & S_IFMT) != S_IFDIR)) {
return TCL_OK;
}
--- 264,270 -----
struct stat statBuf;
char *explicitDir = (*dir ? dir: ".");
! if ((stat(explicitDir, &statBuf) != 0)
|| ((statBuf.st_mode & S_IFMT) != S_IFDIR)) {
return TCL_OK;
}
***************
*** 262,268
|| ((statBuf.st_mode & S_IFMT) != S_IFDIR)) {
return TCL_OK;
}
! d = opendir(dir);
if (d == NULL) {
sprintf(interp->result,
"couldn't read directory \"%.50s\": %.50s",
--- 268,274 -----
|| ((statBuf.st_mode & S_IFMT) != S_IFDIR)) {
return TCL_OK;
}
! d = opendir(explicitDir);
if (d == NULL) {
sprintf(interp->result,
"couldn't read directory \"%.50s\": %.50s",
===================================================================
RCS file: RCS/tclHistory.c,v
retrieving revision 1.1
rdiff -c -r1.1 tclHistory.c
*** /tmp/,RCSt1a17951 Thu Jun 6 08:40:41 1991
--- tclHistory.c Tue Jun 4 11:17:52 1991
***************
*** 780,786
size += revPtr->newSize;
}
! newCommand = malloc(size);
p = newCommand;
bytesSeen = 0;
for (revPtr = iPtr->revPtr; revPtr != NULL; revPtr = revPtr->nextPtr) {
--- 780,786 -----
size += revPtr->newSize;
}
! newCommand = malloc(size + 1);
p = newCommand;
bytesSeen = 0;
for (revPtr = iPtr->revPtr; revPtr != NULL; revPtr = revPtr->nextPtr) {
===================================================================
--
Mats Josefsson (mats@enea.se)