From f81c24bda1228f86cfa3c96ab18b6ea52138bd05 Mon Sep 17 00:00:00 2001 From: Ben Brown Date: Wed, 19 Jul 2017 13:56:18 +0100 Subject: Extract metafiles into the metadir When generating rpms by specifying a chunk or stratum as the target to build, metafiles were not being found. Leading '/' characters caused rpmbuild to look in the root of the sandbox, rather than being limited to %buildroot. Strip leading '/'s and move the metafiles into the metadir for rpmbuild to pick up. --- ybd/rpm.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/ybd/rpm.py b/ybd/rpm.py index ebc085b..1e262b5 100644 --- a/ybd/rpm.py +++ b/ybd/rpm.py @@ -214,7 +214,7 @@ def generate_spec(dn, stage_dir, metafile, output, name, system): if type(package.get('files')) is not list: continue - metafile = package.get('metafile', '') + metafile = package.get('metafile', '').lstrip(os.sep) if metafile: metafile = " -f " + metafile @@ -250,6 +250,18 @@ def extract_defines(dn): return ''.join(strings) +def extract_metafiles(metadata, instdir, metadir): + if isinstance(metadata, Mapping): + packages = metadata.get('packages', []) + else: + packages = metadata + + for package in packages: + metafile = package.get('metafile', '').lstrip(os.sep) + if metafile: + shutil.move(os.path.join(instdir, metafile), metadir) + + def get_package_names_with_fields(system, dn, fields): # Ignores subpackages without files sections as those aren't generated. if 'rpm-metadata' not in dn: @@ -445,10 +457,12 @@ def package_one_rpm(dn, userdata): if generate_spec(dn, fulldir, metafile, specfile, name, system): defines = extract_defines(dn) + extract_metafiles(dn['rpm-metadata'], fulldir, metadir) # XXX Now we gonna run rpmbuild in the sandbox !!! command = ('rpmbuild ' + common_rpm_args + ' --buildroot=/%s.inst' % name + + ' --define "_builddir /%s.meta"' % name + ' --define "_rpmdir /RPMS"' + defines + ' --target %s' % app.config['cpu'] + ' -bb /%s.meta/%s.spec' % (name, name)) -- cgit v1.2.1