Skip to content
Snippets Groups Projects
Commit 25dd1678 authored by Simon McVittie's avatar Simon McVittie
Browse files

Follow Built-Using metadata when building runtimes

parent 6d69c8ee
No related branches found
No related tags found
No related merge requests found
......@@ -249,6 +249,37 @@ class NspawnWorker(Worker):
return ret
def list_built_using(self):
for line in self.check_output([
'dpkg-query', '-W', '-f',
r'${Package}\t${Built-Using}\n',
]).decode('utf-8').splitlines():
built_using = line.rstrip('\n')
if not built_using:
continue
assert '\t' in built_using, built_using
package, built_using = built_using.split('\t', 1)
built_using = built_using.split(',')
if not built_using:
continue
for field in built_using:
# The example given in Policy is:
# Built-Using: gcc-4.6 (= 4.6.0-11)
f = field.replace(' ', '') # gcc-4.6(=4.6.0-11)
if not f:
continue
assert '(=' in f, f
source, version = f.split('(=', 1) # gcc-4.6, 4.6.0-11)
assert version.endswith(')'), version
version = version[:-1] # 4.6.0-11
yield package, source, version
@contextmanager
def remote_dir_context(self, path):
yield os.path.normpath(os.path.join(self.path, './' + path))
......
......@@ -918,6 +918,14 @@ class Builder:
package.binary, package.source, package.source_version)
self.sources_required.add((package.source, package.source_version))
logger.info('Listing Built-Using fields for SDK...')
for package, source, version in nspawn.list_built_using():
logger.info(
'- %s was Built-Using %s_%s',
package, source, version)
self.sources_required.add((source, version))
installed = nspawn.list_packages_ignore_arch()
logger.info('Source code required for GPL compliance:')
......@@ -1136,6 +1144,14 @@ class Builder:
package.binary, package.source, package.source_version)
self.sources_required.add((package.source, package.source_version))
logger.info('Listing Built-Using fields for platform...')
for package, source, version in nspawn.list_built_using():
logger.info(
'- %s was Built-Using %s_%s',
package, source, version)
self.sources_required.add((source, version))
# This has to be last for obvious reasons!
nspawn.check_call([
'dpkg', '--purge', '--force-remove-essential',
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment