summaryrefslogtreecommitdiffstats
path: root/BuildManager
diff options
context:
space:
mode:
Diffstat (limited to 'BuildManager')
-rw-r--r--BuildManager/package.py53
1 files changed, 9 insertions, 44 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"