aboutsummaryrefslogtreecommitdiffstats
path: root/debian/bin/gencontrol.py
diff options
context:
space:
mode:
Diffstat (limited to 'debian/bin/gencontrol.py')
-rwxr-xr-xdebian/bin/gencontrol.py123
1 files changed, 69 insertions, 54 deletions
diff --git a/debian/bin/gencontrol.py b/debian/bin/gencontrol.py
index f6e4b9a8e5a4..14e698799853 100755
--- a/debian/bin/gencontrol.py
+++ b/debian/bin/gencontrol.py
@@ -86,6 +86,62 @@ class Gencontrol(Base):
# Prepare to generate debian/tests/control
self.tests_control = None
+ self.installer_packages = {}
+
+ if os.getenv('DEBIAN_KERNEL_DISABLE_INSTALLER'):
+ if self.changelog[0].distribution == 'UNRELEASED':
+ import warnings
+ warnings.warn('Disable installer modules on request (DEBIAN_KERNEL_DISABLE_INSTALLER set)')
+ else:
+ raise RuntimeError('Unable to disable installer modules in release build (DEBIAN_KERNEL_DISABLE_INSTALLER set)')
+ elif self.config.merge('packages').get('installer', True):
+ # Add udebs using kernel-wedge
+ kw_env = os.environ.copy()
+ kw_env['KW_DEFCONFIG_DIR'] = 'debian/installer'
+ kw_env['KW_CONFIG_DIR'] = 'debian/installer'
+ kw_proc = subprocess.Popen(
+ ['kernel-wedge', 'gen-control', vars['abiname']],
+ stdout=subprocess.PIPE,
+ env=kw_env)
+ if not isinstance(kw_proc.stdout, io.IOBase):
+ udeb_packages = read_control(io.open(kw_proc.stdout.fileno(), closefd=False))
+ else:
+ udeb_packages = read_control(io.TextIOWrapper(kw_proc.stdout))
+ kw_proc.wait()
+ if kw_proc.returncode != 0:
+ raise RuntimeError('kernel-wedge exited with code %d' %
+ kw_proc.returncode)
+
+ # All architectures that have some installer udebs
+ arches = set()
+ for package in udeb_packages:
+ arches.update(package['Architecture'])
+
+ # Code-signing status for those architectures
+ # If we're going to build signed udebs later, don't actually
+ # generate udebs. Just test that we *can* build, so we find
+ # configuration errors before building linux-signed.
+ build_signed = {}
+ for arch in arches:
+ build_signed[arch] = (self.config.merge('build', arch)
+ .get('signed-code', False))
+
+ for package in udeb_packages:
+ # kernel-wedge currently chokes on Build-Profiles so add it now
+ if any(build_signed[arch] for arch in package['Architecture']):
+ assert all(build_signed[arch]
+ for arch in package['Architecture'])
+ # XXX This is a hack to exclude the udebs from
+ # the package list while still being able to
+ # convince debhelper and kernel-wedge to go
+ # part way to building them.
+ package['Build-Profiles'] = '<pkg.linux.udeb-unsigned-test-build>'
+ else:
+ package['Build-Profiles'] = '<!stage1>'
+
+ for arch in package['Architecture']:
+ self.installer_packages.setdefault(arch, []).append(package)
+
def do_main_makefile(self, makefile, makeflags, extra):
fs_enabled = [featureset
for featureset in self.config['base', ]['featuresets']
@@ -220,61 +276,20 @@ class Gencontrol(Base):
["$(MAKE) -f debian/rules.real install-libc-dev_%s %s" %
(arch, makeflags)])
- if os.getenv('DEBIAN_KERNEL_DISABLE_INSTALLER'):
- if self.changelog[0].distribution == 'UNRELEASED':
- import warnings
- warnings.warn('Disable installer modules on request (DEBIAN_KERNEL_DISABLE_INSTALLER set)')
- else:
- raise RuntimeError('Unable to disable installer modules in release build (DEBIAN_KERNEL_DISABLE_INSTALLER set)')
- elif self.config.merge('packages').get('installer', True):
- # Add udebs using kernel-wedge
- installer_def_dir = 'debian/installer'
- installer_arch_dir = os.path.join(installer_def_dir, arch)
- if os.path.isdir(installer_arch_dir):
- kw_env = os.environ.copy()
- kw_env['KW_DEFCONFIG_DIR'] = installer_def_dir
- kw_env['KW_CONFIG_DIR'] = installer_arch_dir
- kw_proc = subprocess.Popen(
- ['kernel-wedge', 'gen-control', vars['abiname']],
- stdout=subprocess.PIPE,
- env=kw_env)
- if not isinstance(kw_proc.stdout, io.IOBase):
- udeb_packages = read_control(io.open(kw_proc.stdout.fileno(), closefd=False))
- else:
- udeb_packages = read_control(io.TextIOWrapper(kw_proc.stdout))
- kw_proc.wait()
- if kw_proc.returncode != 0:
- raise RuntimeError('kernel-wedge exited with code %d' %
- kw_proc.returncode)
-
- # If we're going to build signed udebs later, don't actually
- # generate udebs. Just test that we *can* build, so we find
- # configuration errors before building linux-signed.
+ udeb_packages = self.installer_packages.get(arch, [])
+ if udeb_packages:
+ merge_packages(packages, udeb_packages, arch)
- # kernel-wedge currently chokes on Build-Profiles so add it now
- for package in udeb_packages:
- if build_signed:
- # XXX This is a hack to exclude the udebs from
- # the package list while still being able to
- # convince debhelper and kernel-wedge to go
- # part way to building them.
- package['Build-Profiles'] = '<pkg.linux.udeb-unsigned-test-build>'
- else:
- package['Build-Profiles'] = '<!stage1>'
-
- merge_packages(packages, udeb_packages, arch)
-
- # These packages must be built after the per-flavour/
- # per-featureset packages. Also, this won't work
- # correctly with an empty package list.
- if udeb_packages:
- makefile.add(
- 'binary-arch_%s' % arch,
- cmds=["$(MAKE) -f debian/rules.real install-udeb_%s %s "
- "PACKAGE_NAMES='%s' UDEB_UNSIGNED_TEST_BUILD=%s" %
- (arch, makeflags,
- ' '.join(p['Package'] for p in udeb_packages),
- build_signed)])
+ # These packages must be built after the per-flavour/
+ # per-featureset packages. Also, this won't work
+ # correctly with an empty package list.
+ makefile.add(
+ 'binary-arch_%s' % arch,
+ cmds=["$(MAKE) -f debian/rules.real install-udeb_%s %s "
+ "PACKAGE_NAMES='%s' UDEB_UNSIGNED_TEST_BUILD=%s" %
+ (arch, makeflags,
+ ' '.join(p['Package'] for p in udeb_packages),
+ build_signed)])
# This also needs to be built after the per-flavour/per-featureset
# packages.