There have been a few reports on comp.lang.tcl (and similar
groups for other spoken languages), about tcl 7.5 not compiling
on linux 2.0.1 and above.
It usually ends up breaking on a file in the _generic_ directory
of the Tcl source tree called tclPosixStr.c. The output looks like
this:
--- cc -c -O -I./../generic -I. -DHAVE_UNISTD_H=1 -DHAVE_SYS_TIME_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_TZNAME=1 -DHAVE_TIMEZONE_VAR=1 -DSTDC_HEADERS=1 -DTCL_SHLIB_EXT=\".so\" ./../generic/tclPosixStr.c /../generic/tclPosixStr.c: In function `Tcl_ErrnoId': /../generic/tclPosixStr.c:121: duplicate case value /../generic/tclPosixStr.c:118: this is the first entry for that value /../generic/tclPosixStr.c: In function `Tcl_ErrnoMsg': /../generic/tclPosixStr.c:567: duplicate case value /../generic/tclPosixStr.c:564: this is the first entry for that value make: *** [tclPosixStr.o] Error 1---The reason is that the lines in the file tclPosixStr.c -- it's checking for the definition of EDEADLK and EDEADLOCK. I guess it assumes that both aren't defined simultaneously or dont have the same value. Now, as of the 2.0.1-patch EDEADLK and EDEADLOCK are the same.
A small patch was posted to comp.lang.tcl...I modified the file and it compiles, and I've been using it daily without incident for 2+ weeks.
It probably their problem, but I'm just wondering: it's supposed to be that way, right?
--- Mark Orr markorr@intersurf.com=== Below is the workaround that I used ==========
--- tclPosixStr.c Sun Feb 11 18:56:21 1996 +++ /tcl/src/tcl7.5/generic/tclPosixStr.c Thu Jul 18 18:27:57 1996 @@ -114,7 +114,7 @@ #ifdef ECONNRESET case ECONNRESET: return "ECONNRESET"; #endif -#if defined(EDEADLK) && (!defined(EWOULDBLOCK) || (EDEADLK != EWOULDBLOCK)) +#if defined(EDEADLK) && (!defined(EWOULDBLOCK) || (EDEADLK != EWOULDBLOCK)) && (!defined(EDEADLOCK) || (EDEADLK != EDEADLOCK)) case EDEADLK: return "EDEADLK"; #endif #ifdef EDEADLOCK @@ -560,7 +560,7 @@ #ifdef ECONNRESET case ECONNRESET: return "connection reset by peer"; #endif -#if defined(EDEADLK) && (!defined(EWOULDBLOCK) || (EDEADLK != EWOULDBLOCK)) +#if defined(EDEADLK) && (!defined(EWOULDBLOCK) || (EDEADLK != EWOULDBLOCK)) && (!defined(EDEADLOCK) || (EDEADLK != EDEADLOCK)) case EDEADLK: return "resource deadlock avoided"; #endif #ifdef EDEADLOCK
-----------------------