We have looked at the dependency data within rpm packages. All packages
normally provide a list of included shared libraries and also automatically
generated perl deps.
The list of packages providing the same "provides" dependency data
is pretty long. The shortened list that only includes duplicate entries
and also might match any requirement lines in FC-devel is the following:
('perl(Automake::XFile)', 32776L, '1.1') ['automake16-1.6.3-5.noarch.rpm', 'automake17-1.7.9-6.noarch.rpm']
('webclient', 0L, '') ['elinks-0.10.3-1.i386.rpm', 'firefox-1.0.2-3.i386.rpm', 'lynx-2.8.5-23.i386.rpm', 'mozilla-1.7.6-2.i386.rpm', 'w3m-0.5.1-8.i386.rpm', 'wget-1.9.1-22.i386.rpm']
('/usr/sbin/sendmail', 0L, '') ['postfix-2.2.1-1.i386.rpm', 'sendmail-8.13.3-2.i386.rpm']
('smtpdaemon', 0L, '') ['postfix-2.2.1-1.i386.rpm', 'sendmail-8.13.3-2.i386.rpm']
('perl(Pod::Select)', 32776L, '1.13') ['mrtg-2.11.1-3.i386.rpm', 'perl-5.8.6-5.i386.rpm']
('perl(Automake::General)', 32768L, '') ['automake-1.9.5-1.noarch.rpm', 'automake16-1.6.3-5.noarch.rpm', 'automake17-1.7.9-6.noarch.rpm']
('perl(Automake::Struct)', 32776L, '0.58') ['automake-1.9.5-1.noarch.rpm', 'automake15-1.5-13.noarch.rpm', 'automake16-1.6.3-5.noarch.rpm', 'automake17-1.7.9-6.noarch.rpm']
('libxmlsec1.so.1', 32768L, '') ['openoffice.org-core-1.9.88-4.i386.rpm', 'xmlsec1-1.2.7-4.i386.rpm']
('perl(Automake::Channels)', 32768L, '') ['automake-1.9.5-1.noarch.rpm', 'automake17-1.7.9-6.noarch.rpm']
('perl(Inline)', 32768L, '') ['perl-Inline-0.44-14.i386.rpm', 'perl-PDL-2.4.1-9.i386.rpm']
('libmd5.so.0', 32768L, '') ['libsilc-0.9.12-9.i386.rpm', 'w3c-libwww-5.4.0-13.i386.rpm']
('libbind.so.3', 32768L, '') ['bind-libbind-devel-9.3.1-1_FC4.i386.rpm', 'bind-libs-9.3.1-1_FC4.i386.rpm']
So it is currently no real problem for FC-devel packages since
we normally make sure to link against system libs and the duplicate
perl items are also ok. This might look differently if we look at
require dependencies e.g. from Fedora Core Extras and then check
which deps might have duplicate provides within rpm packages
to find maybe real problems with our current deps.
greetings,
Florian La Roche
dupes = [ ("glibc", "i386"),
("nptl-devel", "i386"),
("openssl", "i386"),
("kernel", "i586"),
("kernel-smp", "i686"),
("kernel-smp-devel", "i686"),
("kernel-xen0", "i686"),
("kernel-xenU", "i686"),
("kernel-devel", "i586") ]
def checkProvides(repo):
provides = {}
requires = {}
for rpm in repo:
req = rpm.getRequires()
if not req:
continue
for r in req:
if not requires.has_key(r[0]):
requires[r[0]] = []
requires[r[0]].append(rpm.getFilename())
for rpm in repo:
if (rpm["name"], rpm["arch"]) in dupes:
continue
provs = rpm.getProvides()
if not provs:
continue
for p in provs:
if not provides.has_key(p):
provides[p] = []
provides[p].append(rpm.getFilename())
print "Duplicate provides:"
for p in provides.keys():
if len(provides[p]) > 1:
# also check if the rpm is different between provides/requires
if not requires.has_key(p[0]):
continue
print p, provides[p]