The ebuild dev-lang/tk-8.4.6-r1 fails with the following error message: In file included from /usr/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/generic/tkPort.h:34, from /usr/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/generic/tkInt.h:27, from /usr/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/generic/tk3d.h:18, from /usr/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/generic/tk3d.c:16: /usr/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/unix/tkUnixPort.h:224:20: tclInt.h: No such file or directory make: *** [tk3d.o] Error 1 find /usr/tmp/portage/tk-8.4.6-r1 -name 'tclInt.h' produces nothing find /usr/include -name 'tclInt.h' produces nothing Where is this header file meant to be? I would have posted this on the forums first, but they seem a little flakey at the moment.
Forums back up, and the search feature is now working (honestly, I tried the same search 5 mins ago and nothing came up...) Anyways, here are some forum posts on the topic (some for different versions of tk): http://forums.gentoo.org/viewtopic.php?t=163392&highlight=tclint http://forums.gentoo.org/viewtopic.php?t=132186&highlight=tclint (Some informed comments by Brandy in this one?) http://forums.gentoo.org/viewtopic.php?t=61666&highlight=tclint http://forums.gentoo.org/viewtopic.php?t=61214&highlight=tclint
Max, could you provide your emerge info? And on my box, tclInt.h is located at /usr/lib/tcl8.4/include/generic/tclInt.h, what about yours?
What do you mean by emerge info? Here is some random stuff from my make.conf USE="acl acpi acpi4linux atlas bluetooth cscope doc f77 faad fbcon flac \ icc imap java maildir mmx nntp pda samba sse -kde -guile -mysql" CFLAGS="-march=pentium3 -O3 -pipe -fomit-frame-pointer" Although this is probably not relevant, is it? I found tclInt.h in the place you described. Here is a complete transcript of the emerge session: --------------------- # emerge tk Calculating dependencies ...done! >>> emerge (1 of 1) dev-lang/tk-8.4.6-r1 to / >>> md5 src_uri ;-) tk8.4.6-src.tar.gz >>> Unpacking source... >>> Unpacking tk8.4.6-src.tar.gz to /data/tmp/portage/tk-8.4.6-r1/work * Applying remove-control-v-8.4.diff... [ ok ] * Applying tk-wm-maxsize.patch... [ ok ] >>> Source unpacked. creating cache ./config.cache checking for Tcl configuration... found /usr/lib/tclConfig.sh checking for existence of /usr/lib/tclConfig.sh... loading checking whether to use symlinks for manpages... no checking compression for manpages... no checking for gcc... gcc checking whether the C compiler (gcc -march=pentium3 -O3 -pipe -fomit-frame-pointer ) works... yes checking whether the C compiler (gcc -march=pentium3 -O3 -pipe -fomit-frame-pointer ) is a cross-compiler... no checking whether we are using GNU C... yes checking whether gcc accepts -g... yes checking how to run the C preprocessor... gcc -E checking for unistd.h... yes checking for limits.h... yes checking for building with threads... no (default) checking if the compiler understands -pipe... yes checking for required early compiler flags... _LARGEFILE64_SOURCE checking for 64-bit integer type... long long checking for struct dirent64... no checking for struct stat64... yes checking for off64_t... yes checking how to build libraries... shared checking for ranlib... ranlib checking if 64bit support is requested... no checking if 64bit Sparc VIS support is requested... no checking system version (for dynamic loading)... Linux-2.4.26-gentoo-r9 checking for dlopen in -ldl... yes checking for ar... ar checking for build with symbols... no checking for sin... no checking for main in -lieee... yes checking stdlib.h... yes checking fd_set and sys/select... yes checking for ANSI C header files... yes checking for mode_t... yes checking for pid_t... yes checking for size_t... yes checking for uid_t in sys/types.h... yes checking for sys/time.h... yes checking whether time.h and sys/time.h may both be included... yes checking pw_gecos in struct pwd... yes checking for X... libraries /usr/X11R6/lib, headers /usr/X11R6/include checking for main in -lXbsd... no checking for connect... yes checking for gethostbyname... yes checking for sin... (cached) no checking for main in -lieee... (cached) yes checking whether char is unsigned... no checking for strtod... yes checking for Solaris2.4/Tru64 strtod bugs... ok updating cache ./config.cache creating ./config.status creating Makefile creating tkConfig.sh gcc -pipe -c -march=pentium3 -O3 -pipe -fomit-frame-pointer -Wall -Wconversion -Wno-implicit-int -fPIC -I/data/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/unix -I/data/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/unix/../generic -I/data/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/unix/../bitmaps -I/data/tmp/portage/tcl-8.4.6/work/tcl8.4.6/generic -I/usr/X11R6/include -DHAVE_UNISTD_H=1 -DHAVE_LIMITS_H=1 -D_LARGEFILE64_SOURCE=1 -DTCL_WIDE_INT_TYPE=long\ long -DHAVE_STRUCT_STAT64=1 -DHAVE_TYPE_OFF64_T=1 -DPEEK_XCLOSEIM=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TIME_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_PW_GECOS=1 -DTCL_NO_DEPRECATED -DUSE_TCL_STUBS /data/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/unix/../generic/tk3d.c gcc -pipe -c -march=pentium3 -O3 -pipe -fomit-frame-pointer -Wall -Wconversion -Wno-implicit-int -fPIC -I/data/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/unix -I/data/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/unix/../generic -I/data/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/unix/../bitmaps -I/data/tmp/portage/tcl-8.4.6/work/tcl8.4.6/generic -I/usr/X11R6/include -DHAVE_UNISTD_H=1 -DHAVE_LIMITS_H=1 -D_LARGEFILE64_SOURCE=1 -DTCL_WIDE_INT_TYPE=long\ long -DHAVE_STRUCT_STAT64=1 -DHAVE_TYPE_OFF64_T=1 -DPEEK_XCLOSEIM=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TIME_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_PW_GECOS=1 -DTCL_NO_DEPRECATED -DUSE_TCL_STUBS /data/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/unix/../generic/tkArgv.c In file included from /data/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/generic/tkPort.h:34, from /data/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/generic/tkInt.h:27, from /data/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/generic/tk3d.h:18, from /data/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/generic/tk3d.c:16: /data/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/unix/tkUnixPort.h:224:20: tclInt.h: No such file or directory In file included from /data/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/generic/tkPort.h:34, from /data/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/generic/tkArgv.c:16: /data/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/unix/tkUnixPort.h:224:20: tclInt.h: No such file or directory make: *** [tkArgv.o] Error 1 make: *** Waiting for unfinished jobs.... make: *** [tk3d.o] Error 1 !!! ERROR: dev-lang/tk-8.4.6-r1 failed. !!! Function src_compile, Line 60, Exitcode 2 !!! (no error message) --------------------- It looks like there might be an -I<path/to/where/tclInt.h/is> missing. Since tclConfig.sh is mentioned in the configure output and Brandy brought it up in one of the posts, I had a look at that. The only -I flag that I can see in there is TCL_INCLUDE_SPEC='-I/usr/include'.
Ok, after re-reading Brandy's excellent post, I found that I have the following line in my /usr/lib/tclConfig.sh: TCL_SRC_DIR='/data/tmp/portage/tcl-8.4.6/work/tcl8.4.6' This looks like bollocks to me (why would you want to keep the path to the original build directory?) Replacing this with TCL_SRC_DIR='/usr/lib/tcl8.4/include' Did the trick, tk now compiles. Maybe this is a bug in the tcl ebuild (and as you can see from the posts, maybe it has been around for a while...)
Considering I'm the maintainer of tcl/tk and considering this is a very valid bug apparently... Would have been nice to hear about this sooner. The forums are not a place for bug discussion. Bug discussion is for Bugzilla and forums are for everything else. Max: Run emerge info at the command prompt and paste it in here. That's what Ming Zhao meant. I'd still like to see that.
I think this is related to the sed of tclConfig.sh at the end of the tcl ebuild sed -e "s,^TCL_BUILD_LIB_SPEC='-L${S}/unix,TCL_BUILD_LIB_SPEC='-L/usr/lib," etc... after emerging tcl I have TCL_BUILD_LIB_SPEC='-L/export1/temp/portage/tcl-8.4.6/work/tcl8.4.6/unix -ltcl8.4${TCL_DBGX}' which is incorrect. I have PORTAGE_TMPDIR set PORTAGE_TMPDIR="/export1/temp/" emerge info gives: Portage 2.0.50-r11 (default-x86-1.4, gcc-3.3.4, glibc-2.3.3.20040420-r1, 2.4.25-gentoo-r2) ================================================================= System uname: 2.4.25-gentoo-r2 i686 Intel(R) Pentium(R) 4 CPU 1.70GHz Gentoo Base System version 1.4.16 ccache version 2.3 [enabled] Autoconf: sys-devel/autoconf-2.59-r4 Automake: sys-devel/automake-1.8.5-r1 ACCEPT_KEYWORDS="x86" AUTOCLEAN="yes" CFLAGS="-O3 -march=pentium4 -funroll-loops -fprefetch-loop-arrays -pipe" CHOST="i686-pc-linux-gnu" COMPILER="" CONFIG_PROTECT="/etc /usr/X11R6/lib/X11/xkb /usr/kde/2/share/config /usr/kde/3/share/config /usr/lib/mozilla/defaults/pref /usr/share/config /var/qmail/control"CONFIG_PROTECT_MASK="/etc/gconf /etc/terminfo /etc/env.d" CXXFLAGS="-O3 -march=pentium4 -funroll-loops -fprefetch-loop-arrays -pipe" DISTDIR="/usr/portage/distfiles" FEATURES="autoaddcvs ccache sandbox" GENTOO_MIRRORS="http://ftp.heanet.ie/pub/gentoo/ http://ftp.easynet.nl/mirror/gentoo/ http://ftp.snt.utwente.nl/pub/os/linux/gentoo ftp://ftp.heanet.ie/pub/gentoo/ http://www.mirror.ac.uk/sites/www.ibiblio.org/gentoo/" MAKEOPTS="-j2" PKGDIR="/usr/portage/packages" PORTAGE_TMPDIR="/export1/temp/" PORTDIR="/usr/portage" PORTDIR_OVERLAY="/usr/local/bmg-main" SYNC="rsync://rsync.europe.gentoo.org/gentoo-portage" USE="X aalib alsa apm avi berkdb bitmap-fonts crypt cups encode esd foomaticdb gdbm gif gnome gpm gtk gtk2 guile imlib java jpeg ldap libg++ libwww mad mbox mikmod motif mozcalendar mozilla moznocompose moznoirc mpeg mysql ncurses nls oggvorbis opengl oss pam pdflib perl png python quicktime readline ruby sasl sdl slang spell ssl svga tcltk tcpd tiff truetype video_cards_rage128 vim-with-x x86 xml2 xmms xprint xv zlib"
Definitely related to PORTAGE_TMPDIR and the sed in the tcl ebuild PORTAGE_TMPDIR="/var/tmp/portage" emerge tcl tk works.
Hello. I thought I had posted the output of my "emerge info" here yesterday, but apparently something didn't work. Here it is for what it's worth: # emerge info Portage 2.0.50-r11 (2004.0, gcc-3.3.4, glibc-2.3.3.20040420-r1, 2.4.26-gentoo-r9 ) ================================================================= System uname: 2.4.26-gentoo-r9 i686 Intel(R) Pentium(R) 4 CPU 2.40GHz Gentoo Base System version 1.4.16 Autoconf: sys-devel/autoconf-2.59-r4 Automake: sys-devel/automake-1.8.5-r1 ACCEPT_KEYWORDS="x86" AUTOCLEAN="yes" CFLAGS="-march=pentium3 -O3 -pipe -fomit-frame-pointer" CHOST="i686-pc-linux-gnu" COMPILER="" CONFIG_PROTECT="/etc /usr/X11R6/lib/X11/xkb /usr/kde/2/share/config /usr/kde/3.2 /share/config /usr/kde/3/share/config /usr/share/config /usr/share/texmf/dvipdfm /config/ /usr/share/texmf/dvips/config/ /usr/share/texmf/tex/generic/config/ /us r/share/texmf/tex/platex/config/ /usr/share/texmf/xdvi/ /var/qmail/control" CONFIG_PROTECT_MASK="/etc/gconf /etc/terminfo /etc/env.d" CXXFLAGS="-march=pentium3 -O3 -pipe -fomit-frame-pointer" DISTDIR="/usr/portage/distfiles" FEATURES="autoaddcvs ccache sandbox sfperms" GENTOO_MIRRORS="http://mirror.gentoo.no/ http://www.mirror.ac.uk/sites/www.ibibl io.org/gentoo/ http://gentoo.blueyonder.co.uk" MAKEOPTS="-j2" PKGDIR="/usr/portage/packages" PORTAGE_TMPDIR="/data/tmp/" PORTDIR="/usr/portage" PORTDIR_OVERLAY="/home/max/ebuilds" SYNC="rsync://rsync.europe.gentoo.org/gentoo-portage" USE="X acl acpi acpi4linux apm arts atlas avi berkdb bitmap-fonts bluetooth bono bo cdr crypt cscope cups doc encode esd f77 faad fbcon flac foomaticdb gdbm gif gnome gpm gtk gtk2 gtkhtml icc imap imlib java jpeg ldap libg++ libwww mad maild ir mikmod mmx motif mpeg ncurses nls nntp oggvorbis opengl oss pam pda pdflib pe rl png postgres python qt quicktime readline samba scanner sdl slang spell sse s sl svga tcltk tcpd tetex tiff truetype x86 xml2 xmms xprint xv zlib"
Can you manually set in the ebuild towards the end an "echo ${S}" so we can see your ${S}
in the ebuild (tk-8.4.6-r1), in function src_compile() just before emake (line 60) , I insert echo "*******************************" echo ${S} echo "*******************************" output is ******************************* /data/tmp//portage/tk-8.4.6-r1/work/tk8.4.6 *******************************
put it at the end of pkg_postinst() * * If you're upgrading from tcl-8.3, you must recompile the other * packages on your system that link with tcl after the upgrade * completes. To perform this action, please run revdep-rebuild * in package app-portage/gentoolkit. * If you have dev-lang/tk and dev-tcltk/tclx installed you should * upgrade them before this recompilation, too, * /export1/temp//portage/tcl-8.4.6/work/tcl8.4.6 I reckon the problem is the trailing slash in PORTAGE_TMPDIR. When I remove the trailing slash from /etc/make.conf everything is fine. Should the slash be allowed?
You want me to put it into the tcl ebuild? I thought you were talking about the tk ebuild. Ok, let me try that now.
The output is: * * If you're upgrading from tcl-8.3, you must recompile the other * packages on your system that link with tcl after the upgrade * completes. To perform this action, please run revdep-rebuild * in package app-portage/gentoolkit. * If you have dev-lang/tk and dev-tcltk/tclx installed you should * upgrade them before this recompilation, too, * /data/tmp//portage/tcl-8.4.6/work/tcl8.4.6 In make.conf I have PORTAGE_TMPDIR=/data/tmp/ If I change this to PORTAGE_TMPDIR=/data/tmp, I get the following output from the ebuild: * * If you're upgrading from tcl-8.3, you must recompile the other * packages on your system that link with tcl after the upgrade * completes. To perform this action, please run revdep-rebuild * in package app-portage/gentoolkit. * If you have dev-lang/tk and dev-tcltk/tclx installed you should * upgrade them before this recompilation, too, * /data/tmp/portage/tcl-8.4.6/work/tcl8.4.6 Looking in my /usr/lib/tclConfig.sh, I now have TCL_SRC_DIR='/usr/lib/tcl8.4/include' and tk compiles properly. So it does appear to have been the slash behind PORTAGE_TMPDIR.
Created attachment 40094 [details] tcl-8.4.6.ebuild
It seems that the duplicate slashes of ${S} confused sed, so that /usr/lib/tclConfig.sh can't be modified properly. I suggest to change the ebuild as the above attachemnt. The idea is using the following command: MY_S=${S/\/\//\/} to remove duplicate slashes in ${S}. Here is the output of diff: --- tcl-8.4.6.ebuild.bak 2004-09-21 23:06:43.507000112 +0800 +++ tcl-8.4.6.ebuild 2004-09-21 23:06:10.866962152 +0800 @@ -59,10 +59,11 @@ src_install() { S= make INSTALL_ROOT=${D} MAN_INSTALL_DIR=${D}/usr/share/man install || die # fix the tclConfig.sh to eliminate refs to the build directory - sed -e "s,^TCL_BUILD_LIB_SPEC='-L${S}/unix,TCL_BUILD_LIB_SPEC='-L/usr/lib," \ - -e "s,^TCL_SRC_DIR='${S}',TCL_SRC_DIR='/usr/lib/tcl${v1}/include'," \ - -e "s,^TCL_BUILD_STUB_LIB_SPEC='-L${S}/unix,TCL_BUILD_STUB_LIB_SPEC='-L/usr/lib," \ - -e "s,^TCL_BUILD_STUB_LIB_PATH='${S}/unix,TCL_BUILD_STUB_LIB_PATH='/usr/lib," \ + MY_S=${S/\/\//\/} # remove duplicate slash in ${S} + sed -e "s,^TCL_BUILD_LIB_SPEC='-L${MY_S}/unix,TCL_BUILD_LIB_SPEC='-L/usr/lib," \ + -e "s,^TCL_SRC_DIR='${MY_S}',TCL_SRC_DIR='/usr/lib/tcl${v1}/include'," \ + -e "s,^TCL_BUILD_STUB_LIB_SPEC='-L${MY_S}/unix,TCL_BUILD_STUB_LIB_SPEC='-L/usr/lib," \ + -e "s,^TCL_BUILD_STUB_LIB_PATH='${MY_S}/unix,TCL_BUILD_STUB_LIB_PATH='/usr/lib," \ -e "s,^TCL_LIB_FILE='libtcl8.4..TCL_DBGX..so',TCL_LIB_FILE=\"libtcl8.4\$\{TCL_DBGX\}.so\"," \ ${D}/usr/lib/tclConfig.sh > ${D}/usr/lib/tclConfig.sh.new mv ${D}/usr/lib/tclConfig.sh.new ${D}/usr/lib/tclConfig.sh
new ebuild pushed to ~x86. Please go ahead and give that a try. If the problem continues... reopen this bug.
I confess that I know nothing of the internals of portage, so yes, this is a completely uninformed opinion, but... I am sure that this will work for this particular ebuild, but to prevent problems in the future, maybe portage ought to take care of the construction of paths from the entries in make.conf in a uniform way, such that ebuild writers will always get ${S} etc in the same form (e.g. without trailing slashes or duplicate slashes) regardless of the form of the corresponding make.conf entry. Better solve the problem once than in 50 different ebuilds and have it crop up every now and then. Maybe a package maintainer wants to raise this with the portage devs.
Zhao Ming: Your work around was function however I liked a much more generic case to cover any potential problems in the future. Also /usr/lib needs to be prepended with ${ROOT]... I know it'll mostly result in //usr/lib but that's safer then leaving the ${ROOT} off because without it... cross compilers will have a problem. Max: I agree 100% however the Portage devs don't I took it up with them. vapier and carpaski to be specific.
A variant of this bug is preventing me from building tk AND hence my toolchain. I can circumvent it by setting TCL_SRC_DIR to a correct value but emerge -e system rebuilds tcl before tk and resets the error. Note PORTAGE_TMPDIR=/usr/portage/tmp PORTDIR=/usr/portage/new gcc -pipe -c -march=athlon-xp -O3 -pipe -mtune=athlon-xp -fomit-frame-pointer -falign-functions=64 -D_FILE_OFFSET_BITS=64 -Wall -Wconversion -Wno-implicit-int -fPIC -I/usr/portage/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/unix -I/usr/portage/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/unix/../generic -I/usr/portage/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/unix/../bitmaps -I/usr/portage/tmp/portage/tcl-8.4.6/work/tcl8.4.6/generic -I/usr/X11R6/include -DHAVE_UNISTD_H=1 -DHAVE_LIMITS_H=1 -D_LARGEFILE64_SOURCE=1 -DTCL_WIDE_INT_TYPE=long\ long -DHAVE_STRUCT_STAT64=1 -DHAVE_TYPE_OFF64_T=1 -DPEEK_XCLOSEIM=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TIME_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_PW_GECOS=1 -DTCL_NO_DEPRECATED -DUSE_TCL_STUBS /usr/portage/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/unix/../generic/tkArgv.c In file included from /usr/portage/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/unix/../generic/tkPort.h:34, from /usr/portage/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/unix/../generic/tkArgv.c:16: /usr/portage/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/unix/../generic/../unix/tkUnixPort.h:224:20: tclInt.h: No such file or directory make: *** [tkArgv.o] Error 1 make: *** Waiting for unfinished jobs.... In file included from /usr/portage/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/unix/../generic/tkPort.h:34, from /usr/portage/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/unix/../generic/tkInt.h:27, from /usr/portage/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/unix/../generic/tk3d.h:18, from /usr/portage/tmp/portage/tk-8.4.6-r1/work/tk8.4.6/unix/../generic/tk3d.c:16:
unstable ~x86 ebuild (8.4.6-r1) corrects this behaviour: * dev-lang/tcl : [ ] 8.3.4 (0) [ I] 8.4.6 (0) [ ~ ] 8.4.6-r1 (0) "stable" 8.4.6 is still broken.
*** Bug 79137 has been marked as a duplicate of this bug. ***