diff options
Diffstat (limited to 'ybd/rpm.py')
-rw-r--r-- | ybd/rpm.py | 28 |
1 files changed, 20 insertions, 8 deletions
@@ -18,17 +18,16 @@ import utils import subprocess -# Because rpm is otherwise totally broken +# Common parameters required for rpm. # NOTE: _build_name_fmt would ordinary be -# %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm +# %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm # but we are pulling them out of a cache with a different naming scheme now. -# common_rpm_args = ( '--dbpath=/var/lib/rpm ' '--define "_rpmconfigdir /usr/lib/rpm" ' '--define "_rpmlock_path /var/lib/rpm/.rpm.lock" ' '--define "_fileattrsdir /usr/lib/rpm/fileattrs" ' - '--define "_build_name_fmt %%{NAME}.rpm" ' + '--define "_build_name_fmt %{NAME}.rpm" ' '--define "_rpmfilename %{_build_name_fmt}" ' '--define "_tmppath /tmp" ' '--define "_unpackaged_files_terminate_build 0" ' @@ -52,7 +51,7 @@ def foreach_def(dn, callback, user_data, traversed=None, whitelist=None): dn = app.defs.get(dn) # if we can't calculate cache key, we can't create this component - if cache_key(dn) is False: + if cache_key(dn, mode='rpm') is False: if 'tried' not in dn: log(dn, 'No cache_key, so skipping compose') dn['tried'] = True @@ -171,7 +170,7 @@ def generate_spec(dn, stage_dir, metafile, output, name, system): output_f.write('%s: %s\n' % (field, item)) output_f.write('\n') - output_f.write('%%description\n') + output_f.write('%description\n') output_f.write('%s\n' % description) output_f.write('\n') @@ -230,7 +229,8 @@ def generate_spec(dn, stage_dir, metafile, output, name, system): output_f.write('%%files -n %s%s\n' % (package['name'], metafile)) for filename in package['files']: - output_f.write(filename + "\n") + output_f.write( + filename.replace('%manifest /', '%manifest ') + "\n") output_f.write('\n') return True @@ -264,6 +264,17 @@ def extract_metafiles(system, dn, instdir, metadir): shutil.move(os.path.join(instdir, metafile), metadir) +def extract_manifests(system, dn, instdir, metadir): + packages = dn['rpm-metadata'].get('packages', []) + manifests = {line.split()[1].lstrip(os.sep) + for package in packages + for line in package.get('files', []) + if line.startswith('%manifest')} + for manifest in manifests: + manifest = expand_macro(system, dn, manifest) + shutil.move(os.path.join(instdir, manifest), 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: @@ -324,7 +335,7 @@ def get_remote_rpm(dn, pkgfilename): def get_cache_pkgfilename(pkgname, dn): - return "{}.{}.rpm".format(pkgname, cache_key(dn)) + return "{}.{}.rpm".format(pkgname, cache_key(dn, mode='rpm')) def all_rpms_cached(system, dn): @@ -463,6 +474,7 @@ def package_one_rpm(dn, userdata): name, system): defines = extract_defines(dn) extract_metafiles(system, dn, fulldir, metadir) + extract_manifests(system, dn, fulldir, metadir) # XXX Now we gonna run rpmbuild in the sandbox !!! command = ('rpmbuild ' + common_rpm_args + |