Following the previous blog here also a list of projects that seem to like importing libraries, causing code duplication even for code that was designed to be shared.
- cdrkit, again, contains a stripped down version of libdvdread, added, of course, by our beloved Jörg Schilling; bug #206939; additionally it contains a copy of cdparanoia code; bug #207029
- ImageMagick comes with a copy of libltdl;
bug #206937
- not even KDE4 seems to have helped libkcal which even in its newest incarnation ships with an internal copy of libical, causing me to have three copies of it installed in my system;
- libvncserver comes with a copy of liblzo2; actually there are two, one in libvncserver and one in libvncclient; even the source files are duplicated!; bug #206941
- SDL_sound, Wine and LAME seem to share some mp3 decoding code, which seems to come originally from mpg123;
- cmake couldn’t stay out of this, it comes with a copy of libform (which is part of ncurses); follow bug #206920
- I’m not sure what it is, but DigiKam, Numeric (for Python) and numpy have a few functions in common; the latter seems to have even more than that in common; bug #206931 per Numeric and numpy, and bug #206934 for DigiKam.
- ghostscript comes with internal copies of zlib, libpng, jpeg and jasper; unfortunately jasper is also modified, for the other three there’s bug #206893; by the way, the copies are present in both the gs command and in the libgs library;
- OpenOffice comes with loads of duplicated libraries; in particular, it comes with its own copy of icu libraries; see on
bug #206889
- TiMidity++ comes with a copy of libmikmod; bug #206943
- Korundum for KDE3 has a copy of qtruby embedded, somehow; I wonder if it isn’t a fluke of our buildsystem; bug #206936
- gdb contains an internal copy of readline; –bug #206947
- tork contains a copy of some functions coming from readline; bug #206953
- KTorrent contains a copy of GeoIP (and to think I removed the one in TorK as soon as I’ve spotted it); bug 206957
- both ruby and php use an internal copy of – I think – oniguruma; I haven’t looked if it’s possible to add that as a system library and then use it; bug #206963
- MPlayer seems to carry a copy of libogg together with tremor support; bug #206965
- pkg-config ships with an internal copy of glib; bug #206966
- tor has an internal copy of libevent’s async dns support; funny, as it links to libevent; bug #206969
- gettext fails to find the system copy of libxml2, falling back to use the internal copy; at least it has the decency of using a proper commodity library; bug #207018
- both Perl and Ruby have a default extension based on SDBM, a NDBM workalike; there seems not to be a shared version of it, so they just build the single source file in their own extensions directly, without hiding the symbols; beside the code re-use not being available, if a process loads both libperl and libruby, and in turn they load their sdbm extension, stuff’s gonna hurt;
- enchant has an internal copy of Hunspell; probably due to the fact that old Hunspell built only static non-PIC libraries, and enchant uses plugins; bug #207025; upstream fixed this in their Subversion repository already;
- gnome-vfs contains an internal copy of neon; funny as it depends on neon already, in the ebuild; bug #207031
- gcc with gcj contains an internal copy of boehm-gc and of libltdl; bug #209563 and bug #209568;
- KOffice’s Karbon contains an internal copy of gdk-pixbuf; bug #209561;
- kdegraphics’s KViewShell contains an internal copy of djvulibre; bug #209565;
- doxygen contains internal copies of zlib and libpng; bug #210237 ; this time I used a different method to identify it as doxygen does not export the symbols;
- rsync contains an internal copy of zlib; bug #210244 ;
Unfortunately making sure that what I’m reading is true data and not false positive, looking at the output of my script, becomes more difficult now for the presence of multiple Sun JDK versions; I have to add support for alternatives, so that different libraries implementing the same interface don’t show up as colliding (they are that way by design).
This series are great, please keep them coming! 🙂
And don’t forget Erlang, which has an internal copy of zlib and SSL (the latter can be overriden, the first not!).
Another one: avidemux has its own internal version of twolame (or toolame maybe), strange thing since there was a patch in portage to fix this, although it was made for a previous version of avidemux that didn’t use cmake.Also, avidemux uses an internal version of libass, a library for ssa/ass subtitle rendering which is not in portage yet. This library is made for mplayer, however a standalone version exist to be used without mplayer, like avidemux and aegisub does (not in portage yet).
avidemux is so full of that kind of shit that I don’t use it anymore just for that.And what I listed here is mostly what I had installed myself 🙂 More throughout testing will happen next month when I’m free from my current job, and I can improve the script to run on bigger datasets.Once that’s done, we should be ble to find most of these cases.
cdrkit is just an idiotic hack, let’s bury it, libburnia seems superior both in support and in API
zlib seems very popular. Indeed, sci-astronomy/ds9 likes it so much, it even has it twice! — Yup, the same version twice, only some dates in the Changelog and in some comments are different.Oh, and it also includes tk, tcl, blt, zip, tktable, tcllib, … and a few more I haven’t found in portage.