diff options
Diffstat (limited to 'debian/bin/gencontrol.py')
-rwxr-xr-x | debian/bin/gencontrol.py | 123 |
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. |