Emerging gnubg-0.14.3 returns the following error : ./board3d/libboard3d.a(font3d.o):(.gnu.linkonce.r._ZTV13MyOutlineFont+0x20): undefined reference to `FTGLOutlineFont::MakeGlyph(unsigned int)' collect2: ld returned 1 exit status The fix was found in the gnubg mailing-list archive at http://lists.gnu.org/archive/html/bug-gnubg/2005-09/msg00009.html I have created a small patch for it and added the corresponding epatch statement to the ebuild. Reproducible: Always Steps to Reproduce: 1. emerge =games-board/gnubg-0.14.3 Actual Results: ./board3d/libboard3d.a(font3d.o):(.gnu.linkonce.r._ZTV13MyOutlineFont+0x20): undefined reference to `FTGLOutlineFont::MakeGlyph(unsigned int)' collect2: ld returned 1 exit status Expected Results: Should emerge without producing an error. emerge info : Portage 2.0.53_rc7 (default-linux/x86/2005.1, gcc-3.4.4, glibc-2.3.5-r3, 2.6.14-ck4 i686) ================================================================= System uname: 2.6.14-ck4 i686 Mobile Intel(R) Pentium(R) 4 - M CPU 2.00GHz Gentoo Base System version 1.12.0_pre10 dev-lang/python: 2.3.5, 2.4.2 sys-apps/sandbox: 1.2.13 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 sys-devel/libtool: 1.5.20-r1 virtual/os-headers: 2.6.11-r2 ACCEPT_KEYWORDS="x86 ~x86" AUTOCLEAN="yes" CBUILD="i686-pc-linux-gnu" CFLAGS="-march=pentium4 -pipe -Os -fomit-frame-pointer -fno-ident -fforce-addr -ftracer -fweb -falign-functions=4 -ffast-math" CHOST="i686-pc-linux-gnu" CONFIG_PROTECT="/etc /usr/kde/2/share/config /usr/kde/3/share/config /usr/lib/X11/xkb /usr/share/config /var/qmail/control" CONFIG_PROTECT_MASK="/etc/gconf /etc/terminfo /etc/env.d" CXXFLAGS="-march=pentium4 -pipe -Os -fomit-frame-pointer -fno-ident -fforce-addr -ftracer -fweb -falign-functions=4 -ffast-math -fvisibility-inlines-hidden -D_FILE_OFFSET_BITS=64" DISTDIR="/usr/portage/distfiles" FEATURES="autoconfig distlocks sandbox sfperms strict" GENTOO_MIRRORS="http://distfiles.gentoo.org http://distro.ibiblio.org/pub/linux/distributions/gentoo" LDFLAGS="-Wl,-O1 -Wl,--sort-common" PKGDIR="/usr/portage/packages" PORTAGE_TMPDIR="/var/tmp" PORTDIR="/usr/portage" PORTDIR_OVERLAY="/usr/local/portage" SYNC="rsync://rsync.gentoo.org/gentoo-portage" USE="x86 X aac acpi alsa audiofile avi bash-completion berkdb bitmap-fonts bzip2 cdparanoia cjk crypt cups dts dv dvd dvdread edl emboss encode exif expat fam firefox foomaticdb fortran gdbm gif glibc-omitfp glitz glut gmp gnome gtk gtk2 hal howl i8x0 imlib ipv6 java jpeg lcms libg++ libwww live logrotate lzo mad matroska mikmod mmx mmxext mng motif moznocompose moznoirc moznomail mozsvg mp3 mpeg ncurses nls nptl nptlonly nsplugin ogg oggvorbis opengl oss pam pdflib perl pic plotutils png python quicktime readline rle rtc samba sdl spell sse sse2 ssl svg tcpd theora tiff truetype truetype-fonts type1-fonts udev unicode usb userlocales vorbis win32codecs xanim xml2 xv xvid xvmc zlib userland_GNU kernel_linux elibc_glibc" Unset: ASFLAGS, CTARGET, LANG, LC_ALL, LINGUAS, MAKEOPTS
Created attachment 73090 [details] gnubg-0.14.3.ebuild
Created attachment 73091 [details, diff] gnubg-0.14.3-font3d.diff
Created attachment 92228 [details, diff] gnubg-0.14.3.ebuild.diff Here's a diff against the current version of gnubg-0.14.3 as discussed yesterday on irc with SpanKY and Mr. Bones. In our discussion there was an allusion to removing the gnuconfig_update statement, as the games eclass was doing this. It looks to me that this used to be the case but not anymore, or am I just being shortsighted as usual ? Please tell me if you'd like me to commit this myself. This bug is getting old, so I'm even ready to add my name to the metadata if that's the price to pay to get it in portage... ;o) Denis.
The reason the bug has been open for so long is because it doesn't fail for me and I haven't heard an explaination why it fails. I don't have a problem with the patch per se, I just don't like patching stuff when it's not obvious why the patch is needed. If you can explain what exactly is broken so I can reproduce the problem here, that'd be great.
(In reply to comment #4) > The reason the bug has been open for so long is because it doesn't fail for me > and I haven't heard an explaination why it fails. I don't have a problem with > the patch per se, I just don't like patching stuff when it's not obvious why > the patch is needed. If you can explain what exactly is broken so I can > reproduce the problem here, that'd be great. Do you build gnubg with gtk and opengl USE flags ? If you don't, you can't have the issue, as you need both these USE flags enabled to make use of FTGL. I'm really not good at C++, but here's what I understand. A 'MyOutlineFont' class is defined, based on FTGLOutlineFont, in order to avoid using FTGLOutlineFont::Render and speed-up rendering. This fails at link time because the new class can't obviously access FTGLOutlineFont::MakeGlyph which is a private virtual. I suppose this used to work with older versions of FTGL. gnubg-0.14.3 is an old thing, and 3D rendering has certainly made a lot of progress since it was released. Even my not so recent Athlon XP 1600+ with 256 MB of RAM and a Geforce 3 Ti 200 has no issue rendering gnubg in 3D with the proposed patch (not that I like gnubg in 3D, though). This makes the trick of shunting FTGLOutlineFont::Render less necessary nowadays. And for those who still have machines old enough to suffer from rendering slowdowns in 3D, they can either build without opengl and/or simply not use the 3D boards since they are, thank Zeus, not mandatory. Denis.
It builds fine for me with: USE="X args esd gdbm gtk opengl python readline nls" ebuild ./gnubg-0.14.3.ebuild clean install for both versions of ftgl in portage. Here's my emerge --info: Portage 2.1.1_pre3-r1 (default-linux/x86/2006.0, gcc-3.4.6, glibc-2.3.6-r4, 2.6.17-rc4 i686) ================================================================= System uname: 2.6.17-rc4 i686 AMD Athlon(tm) Processor Gentoo Base System version 1.6.15 distcc 2.18.3 i686-pc-linux-gnu (protocols 1 and 2) (default port 3632) [enabled] ccache version 2.3 [enabled] app-admin/eselect-compiler: [Not Present] dev-lang/python: 2.3.5-r2, 2.4.3-r1 dev-python/pycrypto: 2.0.1-r5 dev-util/ccache: 2.3 dev-util/confcache: [Not Present] 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-r2 sys-devel/binutils: 2.16.1-r3 sys-devel/gcc-config: 1.3.13-r3 sys-devel/libtool: 1.3.5, 1.5.22 virtual/os-headers: 2.6.11-r2 ACCEPT_KEYWORDS="x86" AUTOCLEAN="yes" CBUILD="i686-pc-linux-gnu" CFLAGS="-mtune=athlon -O3 -pipe -Wall" CHOST="i686-pc-linux-gnu" CONFIG_PROTECT="/etc /usr/kde/3.4/env /usr/kde/3.4/share/config /usr/kde/3.4/shutdown /usr/kde/3.5/env /usr/kde/3.5/share/config /usr/kde/3.5/shutdown /usr/share/X11/xkb /usr/share/config /var/bind" CONFIG_PROTECT_MASK="/etc/X11/app-defaults /etc/X11/rstart /etc/X11/serverconfig /etc/X11/starthere /etc/X11/xdm /etc/bash_completion /etc/env.d /etc/gconf /etc/init.d /etc/pango /etc/revdep-rebuild /etc/sound/events /etc/ssmtp /etc/terminfo /usr/lib/X11/xkb" CXXFLAGS="-mtune=athlon -O3 -Wall -Wno-deprecated" DISTDIR="/usr/portage/distfiles" FEATURES="autoconfig ccache cvs distcc distlocks metadata-transfer parallel-fetch sandbox sfperms" GENTOO_MIRRORS="http://mirrors.acm.cs.rpi.edu/gentoo/ http://gentoo.osuosl.org http://www.ibiblio.org/pub/Linux/distributions/gentoo" LANG="C" MAKEOPTS="-j4" 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="/home/msterret/gentoo-x86" PORTDIR_OVERLAY="/home/msterret/src/portage-overlay" SYNC="rsync://rsync.gentoo.org/gentoo-portage" USE="x86 3dnow 3dnowex 3dnowext X aac alsa apache2 apm arts artworkextra avi bash-completion berkdb bitmap-fonts browserplugin bzip2 cli crypt cscope cups divx4linux dlloader dri dvd eds encode esd firefox flac foomaticdb gdbm gif gimpprint gnome gpm gstreamer gtk gtk2 isdnlog java joystick jpeg libg++ libwww live lzo mad matroska mikmod mmx mmx2 mmxext moznocompose moznoirc moznomail mp3 mpeg musepack ncurses network nomotif noreiserfs nptl nsplugin nvidia ogg opengl oss pam pcre pdflib perl png ppds pppd python quicktime readline real reflection sdl session spell spl ssl svg tcpd theora tiff truetype truetype-fonts type1-fonts udev userlocales vorbis win32codecs xml xmms xorg xv zlib elibc_glibc input_devices_keyboard input_devices_mouse kernel_linux userland_GNU video_cards_vesa video_cards_vga video_cards_dummy video_cards_nvidia video_cards_nv" Unset: CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LC_ALL, LDFLAGS, LINGUAS, PORTAGE_RSYNC_EXTRA_OPTS
I can confirm the whole thing is due to FTGL being compiled with -fvisibility-inline-hidden. Note that gnubg doesn't care being built with it or not (which seems logical). Now the question is, since -fvisibility-inline-hidden is on the "you're on your own" flag list (at least for some devs), is it worth opening a new bug for FTGL or not ? Denis.
I added strip-flags to the latest ftgl ebuild. Can you verify that it fixes things up for you please?
(In reply to comment #8) > I added strip-flags to the latest ftgl ebuild. Can you verify that it fixes > things up for you please? It does, thanks a lot. Denis.
great, thanks for tracking this down.
This update also fixes the amd64 arch "recompile with -fPIC" error when building anything that depends on FTGL.