On my SB1000, gcc-3.4.6-r1 system, portage-utils-0.1.17 will not build without help, because the compiler seems to define the symbol sparc=1, and then qimlate.c will not compile because of an enum {unknown = 0, ..., sparc, ... }; (With earlier versions of portage-utils, there is no qimlate.c to cause the compiler grief.) As a test case, this tiny program: ================================ #include <stdio.h> main() { printf("sparc=%d\n",sparc); return sparc; } ================================ prints "sparc=1" (With gcc-3.3.5-xxx compilers, sparc is not defined at all, so this seems to be a change in the compiler.) ================================== Here's the 'emerge --info' info. ============================== ============================== Portage 2.1_rc1-r1 (default-linux/sparc/sparc64/2006.0, gcc-3.4.6, glibc-2.3.6-r3, 2.6.15-gentoo-r4-SB1000 sparc64) ================================================================= System uname: 2.6.15-gentoo-r4-SB1000 sparc64 sun4u Gentoo Base System version 1.6.14 distcc 2.18.3 sparc-unknown-linux-gnu (protocols 1 and 2) (default port 3632) [disabled] ccache version 2.3 [enabled] dev-lang/python: 2.3.5-r2, 2.4.2 dev-python/pycrypto: 2.0.1-r5 dev-util/ccache: 2.3 dev-util/confcache: 0.4.2 sys-apps/sandbox: 1.2.17 sys-devel/autoconf: 2.13, 2.59-r7 sys-devel/automake: 1.4_p6, 1.5, 1.6.3, 1.7.9-r1, 1.8.5-r3, 1.9.6-r1 sys-devel/binutils: 2.16.1-r2 sys-devel/libtool: 1.5.22 virtual/os-headers: 2.6.11-r4 ACCEPT_KEYWORDS="sparc" AUTOCLEAN="yes" CBUILD="sparc-unknown-linux-gnu" CFLAGS="-O2 -pipe -mcpu=ultrasparc3" CHOST="sparc-unknown-linux-gnu" CONFIG_PROTECT="/etc /usr/kde/2/share/config /usr/kde/3.3/env /usr/kde/3.3/share/config /usr/kde/3.3/shutdown /usr/kde/3.4/env /usr/kde/3.4/share/config /usr/kde/3.4/shutdown /usr/kde/3/share/config /usr/lib/mozilla/defaults/pref /usr/share/X11/xkb /usr/share/config /usr/spool/PBS /var/qmail/control" CONFIG_PROTECT_MASK="/etc/eselect/compiler /etc/gconf /etc/terminfo /etc/texmf/web2c /etc/env.d" CXXFLAGS="-O2 -pipe -mcpu=ultrasparc3" DISTDIR="/usr/portage/distfiles" FEATURES="autoconfig ccache confcache cvs distlocks metadata-transfer parallel-fetch sandbox sfperms strict" GENTOO_MIRRORS="http://mirror.datapipe.net/gentoo ftp://distro.ibiblio.org/pub/linux/distributions/gentoo/ http://gentoo.chem.wisc.edu/gentoo/ http://mirror.phy.olemiss.edu/mirror/gentoo" LC_ALL="en_US.utf8" MAKEOPTS="-j2" PKGDIR="/usr/portage/packages" PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --delete-after --stats --timeout=180 --exclude='/distfiles' --exclude='/local' --exclude='/packages'" PORTAGE_TMPDIR="/var/tmp" PORTDIR="/usr/portage" PORTDIR_OVERLAY="/usr/local/portage" SYNC="rsync://rsync.gentoo.org/gentoo-portage" USE="sparc X Xaw3d apache2 avi berkdb bitmap-fonts bzip2 cairo cli crypt cscope cups dba dlloader dri eds encode esd examples fbcon firebird foomaticdb fortran gcc64 gd gdbm gif glx graphviz gstreamer gtk gtk2 imlib jpeg kerberos libwww lzw-tiff mad mikmod motif mpeg mysql ncurses nls nptl ogg opengl oss pam pcre pdf pdflib perl png python qt readline reflection ruby ruby18 sdl session spell spl sqlite ssl stroke tcltk tcpd tetex tiff truetype truetype-fonts type1-fonts udev vorbis xml xmms xorg xv zlib elibc_glibc input_devices_evdev input_devices_keyboard input_devices_mouse kernel_linux userland_GNU video_cards_dummy video_cards_fbdev video_cards_sunffb" Unset: ASFLAGS, CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LANG, LDFLAGS, LINGUAS, PORTAGE_RSYNC_EXTRA_OPTS ===============================
Created attachment 86755 [details, diff] qimlate-avoid-sym-conflicts.patch tcort, Perhaps something like this would do the trick?
(In reply to comment #0) > the compiler seems to define the symbol sparc=1 Weird, usually the compiler only defines __arch. gcc-3.4.6-r1 on my alpha defines __alpha, but not alpha. Anyway, thanks for the clear explaination of the problem. solar, thanks for the patch! It has been reviewed, tested, and applied.
On x86, gcc 4.1.0 defines both i386 and __i386 when compiling with -std=gnu[89]9 (or the default), but compiling with -std=c[89]9 (or -ansi) makes sure i386 does not get defined. Similarly with unix and linux. Perhaps it would be a good idea to compile with that (-std=c99), even if in this particular case the problem is worked around already?