Make fails for Expect 5.43 with Tcl 8.5a5

Ken Moffat ken at
Mon Feb 12 02:52:16 PST 2007

On Mon, Feb 12, 2007 at 09:36:59AM +0000, Oliver Strnad wrote:
> Hello!
> I started building my LFS today. Everything went fine, until I tried to build
> Expect.
> I built and installed Tcl the following way:
> 1. Downloaded the latest sources (version 8.5a5) from Sourceforge

 If you change the versions from what is in the book and it breaks,
you get to keep both pieces.  If you have already built a working
LFS, there is nothing wrong with trying out different versions, or
changed instructions, but you will need to debug any problems you

 I don't know anything about the tcl naming conventions, but '8.5a5'
suggests it might be alpha status - we usually avoid that unless we
have good reasons (e.g. gzip seems to be perpetually alpha, and we
need the changes) - for LFS tcl is only a test tool, there isn't
great interest in looking at it before it gets released.

> 2. Changed to the unix directorz inside the source
> 3. ./configure --prefix=/tools && make && make install
> 4. make install-private-headers
> 5. ln -sv tclsh8.4 /tools/bin/tclsh

 Doesn't 8.5a5 install tclsh8.5 ? 
> Tcl installed without complaining. So I tried to install Expect:
> 1. Downloaded the source from (version 5.43)
> 2. Inside the source-directory of Expect I called ./configure --prefix=/tools 
> --with-tcl=/tools/lib --with-tclinclude=/tools/include --with-x=no
> 3. configure runs fine without complaining
> 4. I type make and there comes the following error:
> lfs:/mnt/lfs/sources/expect-5.43$ make
> gcc -pipe -c  -I. -I. -I/tools/include   -DEXP_VERSION=\"5.43.0\"
> -DSCRIPTDIR=\"/tools/expect5.43\" -DEXECSCRIPTDIR=\"/tools/lib/expect5.43\" 
> expect.c
> In file included from /tools/include/tclPort.h:27,
> from exp_command.h:26,
> from expect.c:34:
> /tools/include/tclUnixPort.h:666: error: expected '=', ',', ';', 'asm' or 
> '__attribute__' before 'struct'
[ snipped after first error ]

 First look at line 666 of tclUnixPort.h to see what the line says,
and look at the context around it.  You will need to know which
variable(s) are causing the problem.

 You haven't said which version of the book you are using - I assume
it is the development version with the kernel's own sanitised
headers.  There are two likely causes for this sort of problem -
either a change in the kernel causes the package to misunderstand
what sort of system it is compiling on (e.g. you see something
like #ifdef linux ... #else, and the error happens in the 'else'
path), or it uses something that used to be defined in a kernel
header but is no longer there - you may need to look at all the
headers to see what is included, and grep the kernel headers to find
what is needed (and perhaps take a look at the kernel's unsanitised
headers, and the old linux-libc-headers to try to understand what
this version of tcl might be expecting to find).  You might even
need to compile the book's version of tcl so that you can diff its
headers against those you installed from 8.5a5.  Actually, there is
a third possible possible cause since the version has moved to 8.5 -
maybe expect-5.43 is incompatible with tcl8.5.

 Sometimes these sorts of errors have already been addressed
upstream and you can get a patch from svn or cvs-web or whatever,
other times you have to identify the problem, work out how to fix
it, and submit the fix back to them.

 Problems with headers can be a real aggravation - sometimes it's
fairly easy to see what is wrong, other times it all looks good but
fails because of a seemingly trivial and unrelated change elsewhere.
If you are interested and able to solve the problem, that's great.
Otherwise, use the version in hte book.

das eine Mal als Tragödie, das andere Mal als Farce

More information about the lfs-support mailing list