I wanted to update my box:
Code: Select all
# emerge --ask --update --deep --with-bdeps=y --newuse @world
Hell yeah, let's do it!* IMPORTANT: 7 news items need reading for repository 'gentoo'.
* Use eselect news to read news items.
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild U ] dev-libs/boost-1.52.0-r7 [1.52.0-r6]
[ebuild U ] virtual/udev-215 [208-r2]
[ebuild U ] virtual/libudev-215 [208]
[ebuild U ] virtual/libgudev-215 [208]
[ebuild rR ] media-gfx/imagemagick-6.8.8.10-r1
[ebuild U ] virtual/perl-Storable-2.410.0-r1 [2.390.0]
[uninstall ] perl-core/Storable-2.390.0
[blocks b ] <perl-core/Storable-2.410.0 ("<perl-core/Storable-2.410.0" is blocking virtual/perl-Storable-2.410.0-r1)
[ebuild U ] virtual/perl-Encode-2.490.0-r2 [2.470.0]
[uninstall ] perl-core/Encode-2.470.0
[blocks b ] <perl-core/Encode-2.490.0 ("<perl-core/Encode-2.490.0" is blocking virtual/perl-Encode-2.490.0-r2)
[ebuild rR ] dev-perl/HTTP-Cookies-6.0.1-r1
[ebuild rR ] dev-perl/HTTP-Negotiate-6.0.1-r1
[ebuild U ] virtual/perl-IO-1.280.0-r1 [1.25]
[uninstall ] perl-core/IO-1.25-r1
[blocks b ] <perl-core/IO-1.280.0 ("<perl-core/IO-1.280.0" is blocking virtual/perl-IO-1.280.0-r1)
[ebuild rR ] dev-perl/Net-HTTP-6.60.0
[ebuild rR ] dev-perl/libwww-perl-6.50.0
[ebuild U ] virtual/perl-ExtUtils-MakeMaker-6.660.0-r1 [6.640.0]
[uninstall ] perl-core/ExtUtils-MakeMaker-6.640.0
[blocks b ] <perl-core/ExtUtils-MakeMaker-6.660.0 ("<perl-core/ExtUtils-MakeMaker-6.660.0" is blocking virtual/perl-ExtUtils-MakeMaker-6.660.0-r1)
[ebuild rR ] dev-vcs/git-1.8.5.5
[ebuild R ] x11-themes/tango-icon-theme-0.8.90 USE="-minimal%"
Would you like to merge these packages? [Yes/No] yes
But, alas ...
So, Boost cannot get emerged. Why? Well, the log contains a single "error:":>>> Emerging (1 of 15) dev-libs/boost-1.52.0-r7
* boost_1_52_0.tar.bz2 SHA256 SHA512 WHIRLPOOL size... [ ok ]
>>> Unpacking source...
>>> Unpacking boost_1_52_0.tar.bz2 to /var/tmp/portage/dev-libs/boost-1.52.0-r7/work
[WAY to much bullshit ...]
ln-UNIX stage/lib/libboost_wave.so
ln -f -s 'libboost_wave.so.1.52.0' 'stage/lib/libboost_wave.so'
...failed updating 1 target...
* ERROR: dev-libs/boost-1.52.0-r7::gentoo failed (compile phase):
* Building of Boost libraries failed
*
* Call stack:
* ebuild.sh, line 93: Called src_compile
* environment, line 3631: Called python_foreach_impl 'building'
* environment, line 3145: Called multibuild_foreach_variant '_python_multibuild_wrapper' 'building'
* environment, line 2277: Called _multibuild_run '_python_multibuild_wrapper' 'building'
* environment, line 2275: Called _python_multibuild_wrapper 'building'
* environment, line 596: Called building
* environment, line 3601: Called die
* The specific snippet of code:
* ejam ${OPTIONS} $(use python && echo --python-buildid=${EPYTHON#python}) || die "Building of Boost libraries failed";
I know a bit C++, but not enough to be sure about this error. Without knowing the definition of boost::int64_t, I guess that it's a different type than int64_t, and that formatter.cpp has a method called number_format which passes a boost::int64_t to format. But there is no overloaded function for a boost::int64_t, just for a int64_t.libs/locale/src/icu/formatter.cpp: In member function ‘virtual boost::locale::impl_icu::number_format<CharType>::string_type boost::locale::impl_icu::number_format<CharType>::format(boost::int64_t, size_t&) const’:
libs/locale/src/icu/formatter.cpp:61:43: error: call of overloaded ‘format(boost::int64_t&, icu::UnicodeString&)’ is ambiguous
libs/locale/src/icu/formatter.cpp:61:43: note: candidates are:
In file included from libs/locale/src/icu/formatter.cpp:15:0:
/usr/include/unicode/numfmt.h:320:20: note: icu::UnicodeString& icu::NumberFormat::format(double, icu::UnicodeString&) const
/usr/include/unicode/numfmt.h:333:20: note: icu::UnicodeString& icu::NumberFormat::format(int32_t, icu::UnicodeString&) const
/usr/include/unicode/numfmt.h:346:20: note: icu::UnicodeString& icu::NumberFormat::format(int64_t, icu::UnicodeString&) const
gcc.compile.c++ bin.v2/libs/locale/build/gcc-4.7/gentoorelease/pch-off/threading-multi/icu/icu_backend.o
So, I did what everyone who's an hacker would have done: I opened /usr/include/unicode/numfmt.h and changed the definition of:
Code: Select all
UnicodeString& format( int64_t number,
UnicodeString& appendTo) const;
Code: Select all
UnicodeString& format( boost::int64_t number,
UnicodeString& appendTo) const;
So, who is responsible for this? The boost-Team? Or rather the Gentoo-Devs? And did I earn the right to kill someone?

