Brent Busby posted on Fri, 20 Aug 2010 13:37:15 -0500 as excerpted:
> As an addendum to the above, I found this thread:
>
> http://forums.gentoo.org/viewtopic-t-831467.html?
sid=8182796e790caf6a0c9dd589570c8a4f
>
> It looks like the build for akode is trying to find libakode.so before
> it's actually been finished compiling. I still don't know what to do
> about that, or why it would be happening now under GCC 4.4 when it
> wasn't before, unless it's a libtool "--as-needed" related thing.
IIRC, I had decided I didn't actually need akode for my usage long before
I ever switched to kde4, and thus haven't compiled it in... years, now. I
believe I was running into issues that lead to that investigation and
conclusion, that may be similar to what you're running into now. (FWIW, I
run ~arch and often unmask and run the latest gcc well before it's even
unmasked to ~arch, and am running gcc-4.5.1 now, so I'd have seen gcc-4.4
issues quite some time ago, tho I think this was long before that,
possibly as far back as the gcc-3.5 era.)
But, you mention a "new machine", presumably a multi-core machine, that
you're taking advantage of with MAKEOPTS=-jX, with X>1. While your
previous machines may also be multi-core, for various reasons they may
have used a different make job scheduling order and thus not run into the
problem. Or, perhaps it's a combination of that and --as-needed.
FWIW... my main machine is a dual socket Opteron 2xx, now top-of-its-line
Opteron 290s, so dual-dual-cores, but for years I ran dual Opteron 242s,
single-core, but two of them, so I've been running into parallel make
errors since I switched to Gentoo on the system in 2004. I've also been
running --as-needed in my LDFLAGS, since 2006 or 2007 I'd guess, so it's
indeed quite conceivable that I'd have run into parallel make issues,
perhaps related to --as-needed, perhaps not, way back when I /was/ still
building akode, if the package is wont to trigger them, as it seems to be.
So... try building the package with MAKEOPTS=-j1 and see if that works.
If so, it's a workaround; the makefile dependencies should really be fixed
properly, but that takes some make file (and possibly other) knowledge few
folks have, apparently even at the Gentoo developer level. A lot of the
time, therefore, such issues are simply worked around, with the ebuild
hard-coding MAKEOPTS=-j1. So assuming it works, that's likely the change
that'll happen -- make the ebuild hardcode MAKEOPTS=-j1.
(FWIW, I'm not going to discount the reasons many still run kde3, as until
4.4 and better, 4.5, despite official kde announcements to the contrary,
kde4 was simply too bug riddled to be reasonably usable, and I spent well
over 100 hours finding workaround, often scripting my own, and otherwise
making an otherwise broken kde-4.2.4 work for me when I switched so I KNOW
this to be true, but one thing I *DO* appreciate about kde4 is how much
more effectively it parallel builds in comparison to kde3, therefore
taking about half the build time on a 4-core including my dual-dual-core
system, compared to kde3. It's NICE to be able to do a kde4 upgrade in
the 4 hours or so it takes now, depending on how much is new code and how
much is not in ccache, compared to the entire day, 6-8 hours, if there
weren't other problems, it'd take to do the same with kde3.)
Meanwhile, until it gets into the ebuild, assuming you're using portage
(the other two package managers have their own system for this), you can
set the MAKEOPTS=-j1 for that specific package only, using /etc/portage/
env. This trick isn't well known or documented for what are now mostly
historical reasons (devs objected to making it too public as package
specific settings weren't reported in emerge --info, thus making
troubleshooting bugs difficult, but emerge --info <package> now reports
where settings for that package differ from the global settings), but
here's how to do it:
1) If the directory doesn't already exist, create /etc/portage/env/ with
the same ownership and permissions as /etc/portage/ .
2) The structure under env/ is category subdirs, package files. Thus, for
this package, you'll have the file /etc/portage/env/media-libs/akode .
Again, permissions should be similar to those in /etc/portage.
3) In /etc/portage/env/media-libs/akode , place the following line:
MAKEOPTS=-j1
That should be all there is to it. Portage should now always use only a
single job when building akode. I routinely use /etc/portage/env files
for setting single MAKEOPTS jobs and it works well. =:^)
/etc/portage/env/*/* files can be used for package specific cflags, etc,
too. In fact, they should work for anything that affects only the bash
side of portage, and because they /are/ bash, bash tricks like the
following also work:
I have this in /etc/portage/env/sys-fs/mdadm (one of several packages with
the issue), removing the -combine CFLAG from my normal CFLAGS using bash's
${var//} substitution construct, since mdadm doesn't like -combine.
CFLAGS="${CFLAGS/ -combine/}"
The one caveat that at least used to apply to /etc/portage/env/ files (I'm
not positive it still does as I've not had need of the missed
functionality, here) is that they're sourced into the bash side of
portage, namely, ebuild.sh, not the python side. So settings that affect
the python side (like some FEATURES) may not work as intended, while those
only affecting the bash side should. So changes affecting dependency
calculation, which is done on the python side, etc, might not "take". If
in doubt, simply try it and see.
So for testing and to work around the issue yourself until it's fixed in
the ebuild, use the env file. Once either a proper fix or at least the
MAKEOPTS=j1 workaround (assuming it fixes the problem) is in the ebuild,
you can remove the env file workaround. No more having to change global
make.conf settings for a single package, then having to change them back!
=:^)
--
Duncan - List replies preferred. No HTML msgs.
"Every nonfree program has a lord, a master --
and if you use the program, he is your master." Richard Stallman