[yum-commits] yum-builddep.py
Panu Matilainen
pmatilai at osuosl.org
Wed Nov 24 16:50:11 UTC 2010
yum-builddep.py | 59 +++++++++++++++++++++++++++++++++++++++-----------------
1 file changed, 42 insertions(+), 17 deletions(-)
New commits:
commit 2bdf12714589e8bbeddc2a4782a84ef100045318
Author: Panu Matilainen <pmatilai at redhat.com>
Date: Wed Nov 24 18:46:52 2010 +0200
Teach yum-builddep to install buildrequires parsed directly from spec
- Split the actual install part out of get_build_deps() to avoid
code duplication
- If rpm-python supports it, accept spec files as arguments and
grab buildrequires directly out of the parsed spec
diff --git a/yum-builddep.py b/yum-builddep.py
index 657707b..02db3b0 100755
--- a/yum-builddep.py
+++ b/yum-builddep.py
@@ -136,6 +136,24 @@ class YumBuildDep(YumUtilBase):
print "Could not setup repo %s: %s" % (r.id, e)
sys.exit(1)
+ def install_deps(self, deplist):
+ for dep in deplist:
+ self.logger.debug(' REQ: %s' % dep)
+ if dep.startswith("rpmlib("):
+ continue
+ instreq = self.returnInstalledPackagesByDep(dep)
+ if instreq:
+ self.logger.info(' --> Already installed : %s' % instreq[0])
+ continue
+ try:
+ pkg = self.returnPackageByDep(dep)
+ self.logger.info(' --> %s' % pkg)
+ self.install(pkg)
+
+ except yum.Errors.YumBaseError, e:
+ self.logger.error("Error: %s" % e)
+ sys.exit(1)
+
# go through each of the pkgs, figure out what they are/where they are
# if they are not a local package then run
# Setup source repos
@@ -146,7 +164,14 @@ class YumBuildDep(YumUtilBase):
def get_build_deps(self,opts):
srcnames = []
+ specnames = []
srpms = []
+ specworks = False
+
+ # See if we can use spec files for buildrequires
+ if hasattr(rpm, 'spec') and hasattr(rpm.spec, 'sourceHeader'):
+ specworks = True
+
for arg in self.cmds:
if arg.endswith('.src.rpm'):
try:
@@ -157,6 +182,8 @@ class YumBuildDep(YumUtilBase):
raise
elif arg.endswith('.src'):
srcnames.append(arg)
+ elif specworks and arg.endswith('.spec'):
+ specnames.append(arg)
else:
srcnames.append(arg)
@@ -183,24 +210,22 @@ class YumBuildDep(YumUtilBase):
for srpm in toActOn:
self.logger.info('Getting requirements for %s' % srpm)
- for dep in srpm.requiresList():
- self.logger.debug(' REQ: %s' % dep)
- if dep.startswith("rpmlib("):
- continue
- instreq = self.returnInstalledPackagesByDep(dep)
- if instreq:
- self.logger.info(' --> Already installed : %s' % instreq[0])
- continue
- try:
- pkg = self.returnPackageByDep(dep)
- self.logger.info(' --> %s' % pkg)
- self.install(pkg)
-
- except yum.Errors.YumBaseError, e:
- self.logger.error("Error: %s" % e)
- sys.exit(1)
-
+ self.install_deps(srpm.requiresList())
+ for name in specnames:
+ try:
+ spec = rpm.spec(name)
+ except ValueError:
+ self.logger.error("Bad spec: %s" % name)
+ continue
+
+ buildreqs = []
+ for d in rpm.ds(spec.sourceHeader, 'requires'):
+ buildreqs.append(d.DNEVR()[2:])
+
+ self.logger.info('Getting requirements for %s' % name)
+ self.install_deps(buildreqs)
+
if __name__ == '__main__':
setup_locale()
util = YumBuildDep()
More information about the Yum-commits
mailing list