From mboxrd@z Thu Jan  1 00:00:00 1970
Received: from pigeon.gentoo.org ([69.77.167.62] helo=lists.gentoo.org)
	by finch.gentoo.org with esmtp (Exim 4.60)
	(envelope-from <gentoo-soc+bounces-297-garchives=archives.gentoo.org@lists.gentoo.org>)
	id 1KKV8U-0005dM-7q
	for garchives@archives.gentoo.org; Sun, 20 Jul 2008 09:23:22 +0000
Received: from pigeon.gentoo.org (localhost [127.0.0.1])
	by pigeon.gentoo.org (Postfix) with SMTP id 5B745E0387;
	Sun, 20 Jul 2008 09:23:21 +0000 (UTC)
Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183])
	by pigeon.gentoo.org (Postfix) with ESMTP id E6551E0387
	for <gentoo-soc@lists.gentoo.org>; Sun, 20 Jul 2008 09:23:20 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
	by smtp.gentoo.org (Postfix) with ESMTP id 7D9C266CE5
	for <gentoo-soc@lists.gentoo.org>; Sun, 20 Jul 2008 09:23:20 +0000 (UTC)
X-Virus-Scanned: amavisd-new at gentoo.org
X-Spam-Score: -0.637
X-Spam-Level: 
X-Spam-Status: No, score=-0.637 required=5.5 tests=[AWL=1.962,
	BAYES_00=-2.599]
Received: from smtp.gentoo.org ([127.0.0.1])
	by localhost (smtp.gentoo.org [127.0.0.1]) (amavisd-new, port 10024)
	with ESMTP id ERlghMv92-60 for <gentoo-soc@lists.gentoo.org>;
	Sun, 20 Jul 2008 09:23:14 +0000 (UTC)
Received: from an-out-0708.google.com (an-out-0708.google.com [209.85.132.247])
	by smtp.gentoo.org (Postfix) with ESMTP id B5C5366D94
	for <gentoo-soc@gentoo.org>; Sun, 20 Jul 2008 09:23:13 +0000 (UTC)
Received: by an-out-0708.google.com with SMTP id c3so326355ana.43
        for <gentoo-soc@gentoo.org>; Sun, 20 Jul 2008 02:23:12 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=gamma;
        h=domainkey-signature:received:received:message-id:date:from:sender
         :to:subject:cc:mime-version:content-type:content-transfer-encoding
         :content-disposition:x-google-sender-auth;
        bh=kBg8lo83kLA3cpvTuLMeHoie2vD7RIJYogFxUbY67+4=;
        b=Zot1ANHqmg8/lyUbTtnMikIdSLfxxWeavmpsqWKsUO4i+DbXcxFpBybrbMl2s7+9HK
         FIV/XgOg0tvFuKo516OgOZ8Wl/7h5YRdWyIvkMopjLoiClDGYFFd2Ep+wmSVgsJGqxor
         U+Hpu8W8Rcpq0gxmC2CoCa1YFnAOhL+Bs6lUQ=
DomainKey-Signature: a=rsa-sha1; c=nofws;
        d=gmail.com; s=gamma;
        h=message-id:date:from:sender:to:subject:cc:mime-version:content-type
         :content-transfer-encoding:content-disposition:x-google-sender-auth;
        b=ORBIq7b4kwS2sQ+BjFDOI52X8BBvh42DiLNtUMLIpG2jsEDWzzjWNSU/bHWR7GpITl
         XLRYO9Aj8eJWVDVXXkcIiwl2daH/xpLCBy0K16i+e0woKM8E6cIUvpwCZM3c7TgobvWd
         BBw4leiyIssgqP651jq1fwvJ3nX66Mnp1/ew0=
Received: by 10.100.251.11 with SMTP id y11mr1233081anh.114.1216545792554;
        Sun, 20 Jul 2008 02:23:12 -0700 (PDT)
Received: by 10.100.171.5 with HTTP; Sun, 20 Jul 2008 02:23:12 -0700 (PDT)
Message-ID: <c4cdc1420807200223t5cdb7d78u30503c5a8274de5b@mail.gmail.com>
Date: Sun, 20 Jul 2008 04:23:12 -0500
From: "Lucian Poston" <lucianposton@gmail.com>
Sender: lucian.poston@gmail.com
To: gentoo-soc@lists.gentoo.org
Subject: [gentoo-soc] Progress Report - Revdep-rebuild
Cc: "Marius Mauch" <google-soc@genone.de>
Precedence: bulk
List-Post: <mailto:gentoo-soc@lists.gentoo.org>
List-Help: <mailto:gentoo-soc+help@lists.gentoo.org>
List-Unsubscribe: <mailto:gentoo-soc+unsubscribe@lists.gentoo.org>
List-Subscribe: <mailto:gentoo-soc+subscribe@lists.gentoo.org>
List-Id: Gentoo Linux mail <gentoo-soc.gentoo.org>
X-BeenThere: gentoo-soc@lists.gentoo.org
Reply-to: gentoo-soc@lists.gentoo.org
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
X-Google-Sender-Auth: 143547c4169fec86
X-Archives-Salt: 569f6ea3-d0cb-4566-b904-5ee2fc9b98d6
X-Archives-Hash: 1179e8cf5000fa63054a632fb048425c

Two major additions happened this week:

-A large part of the functionality that finds broken dependencies has
been moved into LinkageMap within pym/portage/dbapi/vartree.py.
listBrokenDependencies() and listProviders() were added as well as a
minor change to what was being added into the needed entries in
_obj_properties.  Empty strings were inserted into needed entries when
binaries had no needed entries in NEEDED.ELF.2.

-I resorted to masking directories and libraries to filter false
positives due to various reasons that are mentioned below.  The
existing SEARCH_DIRS_MASK and LD_LIBRARY_MASK variables from
/etc/revdep-rebuild/* are being used for now to mask special binaries
and directories, which are most often the result of binary packages.
This is the only way I've been able to filter binaries that are in
fact missing shared libraries according to my understanding of how the
dynamic linkers locates libraries (and what ldd reports).

vartree.py and sets.conf have been added to the repository at
http://repo.or.cz/w/revdep-rebuild-reimplementation.git

Replacing vartree.py and adding revdep.py and /etc/portage/sets.conf
should be enough to test out the set via emerge @missing-rebuild (you
may want to disable debug in sets.conf).  It's quite likely that many
packages are causing false positives.

Below are some examples of the types of edge cases I've encountered
and how they were resolved.

Lucian



------------------
www-client/mozilla-firefox-2.0.0.15
(/usr/lib/mozilla-firefox/plugins/libunixprintplugin.so)
386;/usr/lib/mozilla-firefox/plugins/libunixprintplugin.so;libunixprintplugin.so;$ORIGIN:/usr/lib/nspr;libxpcom.so,libxpcom_core.so,libplds4.so.6,libplc4.so.6,libnspr4.so.6,libpthread.so.0,libdl.so.2,libXt.so.6,libX11.so.6,libstdc++.so.6,libm.so.6,libgcc_s.so.1,libc.so.6

The previous requires the two following libs:

www-client/mozilla-firefox-2.0.0.15 (/usr/lib/mozilla-firefox/libxpcom.so)
386;/usr/lib/mozilla-firefox/libxpcom.so;libxpcom.so;$ORIGIN:/usr/lib/nspr;libplds4.so.6,libplc4.so.6,libnspr4.so.6,libpthread.so.0,libdl.so.2,libstdc++.so.6,libm.so.6,libgcc_s.so.1,libc.so.6

www-client/mozilla-firefox-2.0.0.15 (/usr/lib/mozilla-firefox/libxpcom_core.so)
386;/usr/lib/mozilla-firefox/libxpcom_core.so;libxpcom_core.so;$ORIGIN:/usr/lib/nspr;libplds4.so.6,libplc4.so.6,libnspr4.so.6,libpthread.so.0,libdl.so.2,libgtk-x11-2.0.so.0,libgdk-x11-2.0.so.0,libatk-1.0.so.0,libgdk_pixbuf-2.0.so.0,libpangocairo-1.0.so.0,libpango-1.0.so.0,libcairo.so.2,libgobject-2.0.so.0,libgmodule-2.0.so.0,libglib-2.0.so.0,libstdc++.so.6,libm.so.6,libgcc_s.so.1,libc.so.6

Notice that the two libs are needed; however, they are not located in
DT_RUNPATH of libunixprintplugin.so.
The rpath of libunixprintplugin.so includes
/usr/lib/mozilla-firefox/plugins; however, the required libs are in
/usr/lib/mozilla-firefox.

It would appear that the runpath for
libunixprintplugin.so should include $ORIGIN/.. rather than $ORIGIN.
I added a mask for /usr/lib/mozilla-firefox/plugins to deal with this.

------------------
app-emulation/vmware-workstation-5.5.7.91707
(/opt/vmware/workstation/lib/bin/vmware)
386;/opt/vmware/workstation/lib/bin/vmware;;;libdl.so.2,libm.so.6,libX11.so.6,libXext.so.6,libXi.so.6,libexpat.so.0,libfontconfig.so.1,libfreetype.so.6,libXrender.so.1,libXft.so.2,libglib-2.0.so.0,libgmodule-2.0.so.0,libgobject-2.0.so.0,libgthread-2.0.so.0,libatk-1.0.so.0,libpango-1.0.so.0,libpangoft2-1.0.so.0,libpangoxft-1.0.so.0,libpangox-1.0.so.0,libgdk-x11-2.0.so.0,libgdk_pixbuf-2.0.so.0,libgtk-x11-2.0.so.0,libgcc_s.so.1,libstdc++.so.5,libsigc-2.0.so.0,libglibmm-2.4.so.1,libglibmm_generate_extra_defs-2.4.so.1,libatkmm-1.6.so.1,libpangomm-1.4.so.1,libgdkmm-2.4.so.1,libgtkmm-2.4.so.1,libart_lgpl_2.so.2,libxml2.so.2,libglade-2.0.so.0,libgnomecanvas-2.so.0,libgnomecanvasmm-2.6.so.1,librsvg-2.so.2,libview.so.2,libsexy.so.1,libsexymm.so.1,libpthread.so.0,libz.so.1,libc.so.6,ld-linux.so.2

The previous requires the following:

app-emulation/vmware-workstation-5.5.7.91707
(/opt/vmware/workstation/lib/lib/libview.so.2/libview.so.2)
386;/opt/vmware/workstation/lib/lib/libview.so.2/libview.so.2;libview.so.2;/usr/lib/.;libgtkmm-2.4.so.1,libgdkmm-2.4.so.1,libatkmm-1.6.so.1,libgtk-x11-2.0.so.0,libpangomm-1.4.so.1,libglibmm-2.4.so.1,libsigc-2.0.so.0,libgdk-x11-2.0.so.0,libatk-1.0.so.0,libgdk_pixbuf-2.0.so.0,libpangoxft-1.0.so.0,libpangox-1.0.so.0,libpango-1.0.so.0,libgobject-2.0.so.0,libgmodule-2.0.so.0,libdl.so.2,libglib-2.0.so.0,libstdc++.so.5,libm.so.6,libc.so.6,libgcc_s.so.1

app-emulation/vmware-workstation-5.5.7.91707
(/opt/vmware/workstation/lib/lib/libpangomm-1.4.so.1/libpangomm-1.4.so.1)
386;/opt/vmware/workstation/lib/lib/libpangomm-1.4.so.1/libpangomm-1.4.so.1;libpangomm-1.4.so.1;/usr/lib/.;libglibmm-2.4.so.1,libsigc-2.0.so.0,libpango-1.0.so.0,libgobject-2.0.so.0,libgmodule-2.0.so.0,libdl.so.2,libglib-2.0.so.0,libstdc++.so.5,libm.so.6,libc.so.6,libgcc_s.so.1

app-emulation/vmware-workstation-5.5.7.91707
(/opt/vmware/workstation/lib/lib/libexpat.so.0/libexpat.so.0)
386;/opt/vmware/workstation/lib/lib/libexpat.so.0/libexpat.so.0;libexpat.so.0;;libc.so.6

Not in rpath.  I assume this is a bug or special binaries.
/opt/vmware/workstation/lib/bin isn't in $PATH anyhow.  I don't know
why binary packages have to be so rebellious.  I had to add a mask for
/opt/vmware/workstation/lib.

--------------------
dev-java/sun-jdk-1.6.0.06 (/opt/sun-jdk-1.6.0.06/jre/lib/i386/libjawt.so)
386;/opt/sun-jdk-1.6.0.06/jre/lib/i386/libjawt.so;libjawt.so;$ORIGIN;libmawt.so,libjvm.so,libc.so.6

The previous requires one of the following:

dev-java/sun-jdk-1.6.0.06
(/opt/sun-jdk-1.6.0.06/jre/lib/i386/motif21/libmawt.so)
386;/opt/sun-jdk-1.6.0.06/jre/lib/i386/xawt/libmawt.so;libmawt.so;$ORIGIN:$ORIGIN/..;libpthread.so.0,libm.so.6,libXext.so.6,libX11.so.6,libdl.so.2,libXtst.so.6,libXi.so.6,libjvm.so,libc.so.6

dev-java/sun-jdk-1.6.0.06
(/opt/sun-jdk-1.6.0.06/jre/lib/i386/headless/libmawt.so)
386;/opt/sun-jdk-1.6.0.06/jre/lib/i386/motif21/libmawt.so;libmawt.so;$ORIGIN:$ORIGIN/..;libXp.so.6,libXtst.so.6,libXext.so.6,libX11.so.6,libXi.so.6,libjvm.so,libm.so.6,libdl.so.2,libc.so.6

dev-java/sun-jdk-1.6.0.06 (/opt/sun-jdk-1.6.0.06/jre/lib/i386/xawt/libmawt.so)
386;/opt/sun-jdk-1.6.0.06/jre/lib/i386/headless/libmawt.so;libmawt.so;$ORIGIN:$ORIGIN/..;libjvm.so,libm.so.6,libdl.so.2,libc.so.6

Not in rpath. The rpath of libjawt.so includes
/opt/sun-jdk-1.6.0.06/jre/lib/i386, but the required lib(s) are a
level deeper.  The existing masks in /etc/revdep-rebuild/* covered these.

--------------------
dev-java/sun-jdk-1.6.0.06 (/opt/sun-jdk-1.6.0.06/jre/lib/i386/libJdbcOdbc.so)
386;/opt/sun-jdk-1.6.0.06/jre/lib/i386/libJdbcOdbc.so;libJdbcOdbc.so;$ORIGIN;libodbcinst.so,libodbc.so,libjvm.so,libc.so.6

The previous requires libodbcinst.so and libodbc.so, which are not
installed by this package or any dependencies.
The existing masks in /etc/revdep-rebuild/* covered these.

--------------------
app-office/openoffice-bin-2.4.1
(/usr/lib/openoffice/program/hatchwindowfactory.uno.so ->
hatchwindowfactory.uno.so.1.1)
386;/usr/lib/openoffice/program/hatchwindowfactory.uno.so.1.1;;$ORIGIN:$ORIGIN/../ure-link/lib;libtk680li.so,libvcl680li.so,libtl680li.so,libuno_cppuhelpergcc3.so.3,libuno_cppu.so.3,libuno_sal.so.3,libdl.so.2,libpthread.so.0,libstlport_gcc.so,libstdc++.so.6,libm.so.6,libgcc_s.so.1,libc.so.6

The previous requires the following:

app-office/openoffice-bin-2.4.1
(/usr/lib/openoffice/program/libstlport_gcc.so -> libstlport_gcc.so.1)
386;/usr/lib/openoffice/program/libstlport_gcc.so.1;;$ORIGIN;libm.so.6,libc.so.6

app-office/openoffice-bin-2.4.1
(/usr/lib/openoffice/program/libvcl680li.so -> libvcl680li.so.1.1)
386;/usr/lib/openoffice/program/libvcl680li.so.1.1;;$ORIGIN:$ORIGIN/../ure-link/lib;libpsp680li.so,libsot680li.so,libutl680li.so,libtl680li.so,libi18nisolang1gcc3.so,libcomphelp4gcc3.so,libucbhelper4gcc3.so,libuno_cppuhelpergcc3.so.3,libuno_cppu.so.3,libvos3gcc3.so,libuno_sal.so.3,libbasegfx680li.so,libicuuc.so.36,libicule.so.36,libjvmaccessgcc3.so.3,libfreetype.so.6,libX11.so.6,libXext.so.6,libdl.so.2,libpthread.so.0,libstlport_gcc.so,libstdc++.so.6,libm.so.6,libgcc_s.so.1,libc.so.6

app-office/openoffice-bin-2.4.1
(/usr/lib/openoffice/program/libtk680li.so -> libtk680li.so.1.1)
386;/usr/lib/openoffice/program/libtk680li.so.1.1;;$ORIGIN:$ORIGIN/../ure-link/lib;libvos3gcc3.so,libvcl680li.so,libsot680li.so,libutl680li.so,libtl680li.so,libcomphelp4gcc3.so,libuno_cppuhelpergcc3.so.3,libuno_cppu.so.3,libuno_sal.so.3,libX11.so.6,libdl.so.2,libpthread.so.0,libstlport_gcc.so,libstdc++.so.6,libm.so.6,libgcc_s.so.1,libc.so.6

The required libs are in rpath; however, they are missing sonames, so
LinkageMap can't add provider info into _libs.
Bugs in the package, I assume.  A little hack in
listBrokenDependencies() covered the case of missing sonames within
libraries (though these happen to be masked anyway).

--------------------
net-analyzer/netcat-110-r8 (/usr/bin/nc)
386;/usr/bin/nc;;;libmix.so,libc.so.6

The previous requires:

dev-libs/libmix-2.05 (/usr/lib/libmix.so)
386;/usr/lib/libmix.so;;;libc.so.6

Same as above. Missing soname in libmix.so.
Seems to be a bug.

------------------
x11-drivers/nvidia-drivers-173.14.09
(/usr/lib/opengl/nvidia/lib/libGL.so -> libGL.so.173.14.09)
386;/usr/lib/opengl/nvidia/lib/libGL.so.173.14.09;libGL.so.1;;libGLcore.so.1,libnvidia-tls.so.1,libm.so.6,libXext.so.6,libX11.so.6,libdl.so.2,libc.so.6

The previous requires the following:

x11-drivers/nvidia-drivers-173.14.09
(/usr/lib/opengl/nvidia/lib/libnvidia-tls.so ->
../tls/libnvidia-tls.so)
386;/usr/lib/opengl/nvidia/tls/libnvidia-tls.so.173.14.09;libnvidia-tls.so.1;;

The symlink is in rpath, but target is not. Only the target's path is
stored in LinkageMap, so the need is unsatisfied according to
findProviders().
listBrokenDependencies() checks for this case (only symlinks in runpath).

--------------------