diff options
-rw-r--r-- | BuildManager/package.py | 53 | ||||
-rw-r--r-- | PKG-INFO | 2 | ||||
-rw-r--r-- | bm | 2 | ||||
-rw-r--r-- | bmclean | 2 |
4 files changed, 12 insertions, 47 deletions
diff --git a/BuildManager/package.py b/BuildManager/package.py index c3c3efb..38a62b2 100644 --- a/BuildManager/package.py +++ b/BuildManager/package.py @@ -4,7 +4,6 @@ from collections import UserList import subprocess import os import re -import codecs class BuildManagerFileError(Error): pass class BuildManagerPackageError(Error): pass @@ -75,55 +74,21 @@ class _package: self.log = subst(self.log, substdict) class _package_spec(_package): - def _rpm_vars(self, s, vars): - end = -1 - ret = [] - while 1: - start = s.find("%{", end+1) - if start == -1: - ret.append(s[end+1:]) - break - ret.append(s[end+1:start]) - end = s.find("}", start) - if end == -1: - ret.append(s[start:]) - break - varname = s[start+2:end] - if varname in vars: - ret.append(vars[varname]) - else: - ret.append(s[start:end+1]) - return "".join(ret) - def _init(self): self.spec = self.absfile self.builddir = os.path.dirname(os.path.dirname(self.absfile)) ret = os.system("mkdir -p %s/{SOURCES,SPECS,BUILD,SRPMS,RPMS,BUILDROOT}" % self.builddir) try: - f = codecs.open(self.spec, "r", 'utf-8', errors = "replace") - except IOError as e: + rpm.addMacro("_topdir", "%s" % self.builddir) + f = rpm.spec(self.spec) + except ValueError as e: raise BuildManagerFileError("couldn't open spec file %s" % self.absfile) - defines = {} - for line in f.readlines(): - lowerline = line.lower() - if not self.name and lowerline[:5] == "name:": - self.name = self._rpm_vars((line[5:]).strip(), defines) - elif not self.version and lowerline[:8] == "version:": - self.version = self._rpm_vars((line[8:]).strip(), defines) - elif not self.release and lowerline[:8] == "release:": - rel = self._rpm_vars((line[8:]).strip(), defines) - if rel.startswith("%mkrel"): - p = subprocess.run(["rpm", "--eval", rel], text=True, capture_output=True) - self.release = p.stdout - else: - self.release = rel - elif lowerline[:7] == "%define": - token = (line[7:]).split() - if len(token) == 2: - defines[token[0]] = self._rpm_vars(token[1], defines) - if self.name and self.version and self.release: - break - else: + + self.name = f.packages[0].header["name"] + self.version = f.packages[0].header["version"] + self.release = f.packages[0].header["release"] + + if not self.name or not self.version or not self.release: raise Error("spec file %s doesn't define name, " \ "version or release" % self.file) self.type = "spec" @@ -1,6 +1,6 @@ Metadata-Version: 1.0 Name: bm -Version: 3.7 +Version: 3.9 Summary: BuildManager - rpm package building helper Home-page: http://gitweb.mageia.org/software/build-system/bm/ Author: Gustavo Niemeyer, Papoteur @@ -8,7 +8,7 @@ import sys, os import pwd AUTHOR = "Gustavo Niemeyer <niemeyer@conectiva.com>, papoteur <papoteur@mageialinux-online.org>" -VERSION = "3.7" +VERSION = "3.9" def passtrough(option, opt, val, parser): opts = parser.values @@ -8,7 +8,7 @@ import sys, os import pwd AUTHOR = "Gustavo Niemeyer <niemeyer@conectiva.com>, papoteur <papoteur@mageialinux-online.org>" -VERSION = "3.7" +VERSION = "3.9" def parse_options(): parser = OptionParser("%prog [OPTIONS] <srpm files>", |