summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--BuildManager/package.py53
-rw-r--r--PKG-INFO2
-rw-r--r--bm2
-rw-r--r--bmclean2
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"
diff --git a/PKG-INFO b/PKG-INFO
index d9c86a9..b33f665 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -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
diff --git a/bm b/bm
index 57d9850..95f25ac 100644
--- a/bm
+++ b/bm
@@ -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
diff --git a/bmclean b/bmclean
index cdebea4..8e19469 100644
--- a/bmclean
+++ b/bmclean
@@ -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>",