After upgrading world today, I ran into a problem with re-emerging python, because both 2.7 and 3.2 retained dependent on tcl/tk 8.5.x libs. The tcl/tk packages were upgraded to 8.6.0 during the world update.
When I tried emerging the pythons, it wouldn't fly because of a new dependency on Tix, which would not compile with tcl/tk 8.6.
The relevant part of the error message:
./generic/tixGrSort.c: In function ‘SortCompareProc’:
./generic/tixGrSort.c:450:27: error: ‘Tcl_Interp’ has no member named ‘result’
./generic/tixGrSort.c:451:24: error: ‘Tcl_Interp’ has no member named ‘result’
make: *** [tixGrSort.o] Error 1
ERROR: dev-tcltk/tix-8.4.3 failed (compile phase):
Looking up the source repository for Tix, it's not been updated for several years. The issue is that as of tcl 8.6, the C interface changed such that directly accessing the "char* result" member of Tcl_Interp structure is deprecated. Instead, an extension is supposed to get/set the result of an operation using functions "Tcl_GetResult" or "Tcl_SetResult". Tix uses the old method and consequently errors out.
I worked around the problem by using manual ebuild commands to build and install Python-2.7.3 and 3.2.3. So far, they're functioning just fine without the Tix package being installed. (I checked: tkinter is linked to tcl/tk 8.6 libs, and the 8.5 libs are gone.)
In the ebuilds, the dependency on Tix was just recently added. Since everything (that I'd ever used) had always worked without Tix, it indeed questions the necessity of depending on Tix at all.
In other words, I doubt if it's worth the trouble to try to patch Tix to make it compile in Funtoo. It's probably best just to leave it out.
I have same problem in a new install and an old machine can't rebuild, exit with same error.
Yes, that's exactly the motivation for my "work around", using the lower level 'ebuild' commands to build Python 2.7.3/3.2.3. Tix is not necessary for python to build.
The ebuild man page is quite clear about how to use the command. It's actually pretty simple in this case. I just cd'd to the dev-lang/python directory, and at the terminal prompt typed in 'sudo ebuild <ebuild-name.ebuild> configure, and in turn, ... compile, install, qmerge, clean. Make sure the files in /etc/portage are set up correctly for the right USE flags and keywords, but that's just the normal procedure anyway.
There may be better ways to do accomplish the task. I suppose I could have set up an overlay directory, modified the ebuilds to eliminate the Tix dependency, etc., but I confess I was far too lazy to do all that. Accordingly, I won't be shocked if somebody says I'm an idiot and what I did was all wrong.
The thing is, I'd strongly prefer not having to improvise any such solution at all. However putting up with a partly broken system is way too painful, which leaves no truly acceptable alternative except to strive to solve such problems as expeditiously as possible.
Excellent. No doubt will save trouble for a lot of people ...