def do_arch_packages(self, packages, makefile, arch, vars, makeflags, extra): 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) and self.config.merge('build', arch).get('signed-code', False)): # 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) 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'" % (arch, makeflags, ' '.join(p['Package'] for p in udeb_packages)) ])
def do_arch_packages(self, packages, makefile, arch, vars, makeflags, extra): if self.version.linux_modifier is None: try: vars['abiname'] = '-%s' % self.config['abi', arch]['abiname'] except KeyError: vars['abiname'] = self.abiname makeflags['ABINAME'] = vars['abiname'] headers_arch = self.templates["control.headers.arch"] packages_headers_arch = self.process_packages(headers_arch, vars) libc_dev = self.templates["control.libc-dev"] packages_headers_arch[0:0] = self.process_packages(libc_dev, {}) packages_headers_arch[-1]['Depends'].extend(PackageRelation()) extra['headers_arch_depends'] = packages_headers_arch[-1]['Depends'] self.merge_packages(packages, packages_headers_arch, arch) cmds_binary_arch = ["$(MAKE) -f debian/rules.real binary-arch-arch %s" % makeflags] makefile.add('binary-arch_%s_real' % arch, cmds=cmds_binary_arch) # Shortcut to aid architecture bootstrapping makefile.add('binary-libc-dev_%s' % arch, ['source_none_real'], ["$(MAKE) -f debian/rules.real install-libc-dev_%s %s" % (arch, makeflags)]) if self.changelog[0].distribution == 'UNRELEASED' and os.getenv('DEBIAN_KERNEL_DISABLE_INSTALLER'): import warnings warnings.warn(u'Disable building of debug infos on request (DEBIAN_KERNEL_DISABLE_INSTALLER set)') else: # 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', self.abiname], stdout=subprocess.PIPE, env=kw_env) udeb_packages = read_control(kw_proc.stdout) kw_proc.wait() if kw_proc.returncode != 0: raise RuntimeError('kernel-wedge exited with code %d' % kw_proc.returncode) self.merge_packages(packages, udeb_packages, arch) # These packages must be built after the per-flavour/ # per-featureset packages. makefile.add( 'binary-arch_%s' % arch, cmds=["$(MAKE) -f debian/rules.real install-udeb_%s %s " "PACKAGE_NAMES='%s'" % (arch, makeflags, ' '.join(p['Package'] for p in udeb_packages))])
def do_main_setup(self, vars, makeflags, extra): makeflags['VERSION'] = self.version.linux_version makeflags['GENCONTROL_ARGS'] = ( '-v%(imagebinaryversion)s ' '-DBuilt-Using="linux (= %(imagesourceversion)s)"' % vars) makeflags['PACKAGE_VERSION'] = vars['imagebinaryversion'] 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 re.match(r"grml.*", self.changelog[0].distribution): import warnings warnings.warn('Disabling installer modules since we are building for Grml.') 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) for package in udeb_packages: for arch in package['Architecture']: if self.config.merge('build', arch) \ .get('signed-code', False): self.installer_packages.setdefault(arch, []) \ .append(package)
def do_main_setup(self, vars, makeflags, extra): makeflags['VERSION'] = self.version.linux_version makeflags['GENCONTROL_ARGS'] = ( '-v%(imagebinaryversion)s ' '-DBuilt-Using="linux (= %(imagesourceversion)s)"' % vars) makeflags['PACKAGE_VERSION'] = vars['imagebinaryversion'] 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) for package in udeb_packages: for arch in package['Architecture']: if self.config.merge('build', arch) \ .get('signed-code', False): self.installer_packages.setdefault(arch, []) \ .append(package)
def _read(self, name): prefix, id = name.split(u".", 1) for dir in self.dirs: filename = "%s/%s.in" % (dir, name) if os.path.exists(filename): f = codecs.open(filename, "r", "utf-8") if prefix == "control": return read_control(f) elif prefix == "templates": return self._read_templates(f) return f.read()
def _read(self, name): prefix, id = name.split(u'.', 1) for dir in self.dirs: filename = "%s/%s.in" % (dir, name) if os.path.exists(filename): f = codecs.open(filename, 'r', 'utf-8') if prefix == 'control': return read_control(f) elif prefix == 'templates': return self._read_templates(f) return f.read()
def _read(self, name): prefix, id = name.split('.', 1) for dir in self.dirs: filename = "%s/%s.in" % (dir, name) if os.path.exists(filename): with open(filename) as f: mode = os.stat(f.fileno()).st_mode if prefix == 'control': return (read_control(f), mode) elif prefix == 'templates': return (self._read_templates(f), mode) return (f.read(), mode)
def do_arch_packages(self, packages, makefile, arch, vars, makeflags, extra): # Some userland architectures require kernels from another # (Debian) architecture, e.g. x32/amd64. foreign_kernel = not self.config['base', arch].get('featuresets') if self.version.linux_modifier is None: try: abiname_part = '-%s' % self.config['abi', arch]['abiname'] except KeyError: abiname_part = self.abiname_part makeflags['ABINAME'] = vars['abiname'] = \ self.abiname_version + abiname_part if foreign_kernel: packages_headers_arch = [] makeflags['FOREIGN_KERNEL'] = True else: headers_arch = self.templates["control.headers.arch"] packages_headers_arch = self.process_packages(headers_arch, vars) libc_dev = self.templates["control.libc-dev"] packages_headers_arch[0:0] = self.process_packages(libc_dev, {}) packages_headers_arch[-1]['Depends'].extend(PackageRelation()) extra['headers_arch_depends'] = packages_headers_arch[-1]['Depends'] self.merge_packages(packages, packages_headers_arch, arch) cmds_binary_arch = ["$(MAKE) -f debian/rules.real binary-arch-arch %s" % makeflags] makefile.add('binary-arch_%s_real' % arch, cmds=cmds_binary_arch) # Shortcut to aid architecture bootstrapping makefile.add('binary-libc-dev_%s' % arch, ['source_none_real'], ["$(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(u'Disable installer modules on request (DEBIAN_KERNEL_DISABLE_INSTALLER set)') else: raise RuntimeError(u'Unable to disable installer modules in release build (DEBIAN_KERNEL_DISABLE_INSTALLER set)') else: # 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(), encoding='utf-8', closefd=False)) else: udeb_packages = read_control(io.TextIOWrapper(kw_proc.stdout, 'utf-8')) kw_proc.wait() if kw_proc.returncode != 0: raise RuntimeError('kernel-wedge exited with code %d' % kw_proc.returncode) self.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'" % (arch, makeflags, ' '.join(p['Package'] for p in udeb_packages))])
def do_arch_packages(self, packages, makefile, arch, vars, makeflags, extra): if self.version.linux_modifier is None: try: abiname_part = '-%s' % self.config['abi', arch]['abiname'] except KeyError: abiname_part = self.abiname_part makeflags['ABINAME'] = vars['abiname'] = \ self.abiname_version + abiname_part # Some userland architectures require kernels from another # (Debian) architecture, e.g. x32/amd64. # And some derivatives don't need the headers-all packages # for other reasons. if (self.config['base', arch].get('featuresets') and self.config.merge('packages').get('headers-all', True)): headers_arch = self.templates["control.headers.arch"] packages_headers_arch = self.process_packages(headers_arch, vars) packages_headers_arch[-1]['Depends'].extend(PackageRelation()) extra['headers_arch_depends'] = packages_headers_arch[-1][ 'Depends'] else: packages_headers_arch = [] makeflags['DO_HEADERS_ALL'] = False if self.config.merge('packages').get('libc-dev', True): libc_dev = self.templates["control.libc-dev"] packages_headers_arch[0:0] = self.process_packages(libc_dev, {}) else: makeflags['DO_LIBC'] = False if not self.config.merge('packages').get('tools', True): makeflags['DO_TOOLS'] = False merge_packages(packages, packages_headers_arch, arch) cmds_build_arch = [ "$(MAKE) -f debian/rules.real build-arch-arch %s" % makeflags ] makefile.add('build-arch_%s_real' % arch, cmds=cmds_build_arch) cmds_binary_arch = [ "$(MAKE) -f debian/rules.real binary-arch-arch %s" % makeflags ] makefile.add('binary-arch_%s_real' % arch, cmds=cmds_binary_arch) # For stage1 build profile makefile.add('binary-libc-dev_%s' % arch, ['source_none_real'], [ "$(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): # 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. test_build = self.config.merge('build', arch).get( 'signed-modules', False) 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) # kernel-wedge currently chokes on Build-Profiles so add it now for package in udeb_packages: package['Build-Profiles'] = '<!stage1>' if not test_build: 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), test_build) ])
def do_arch_packages(self, packages, makefile, arch, vars, makeflags, extra): # Some userland architectures require kernels from another # (Debian) architecture, e.g. x32/amd64. foreign_kernel = not self.config['base', arch].get('featuresets') if self.version.linux_modifier is None: try: vars['abiname'] = '-%s' % self.config['abi', arch]['abiname'] except KeyError: vars['abiname'] = self.abiname makeflags['ABINAME'] = vars['abiname'] if foreign_kernel: packages_headers_arch = [] makeflags['FOREIGN_KERNEL'] = True else: headers_arch = self.templates["control.headers.arch"] packages_headers_arch = self.process_packages(headers_arch, vars) libc_dev = self.templates["control.libc-dev"] packages_headers_arch[0:0] = self.process_packages(libc_dev, {}) packages_headers_arch[-1]['Depends'].extend(PackageRelation()) extra['headers_arch_depends'] = packages_headers_arch[-1]['Depends'] self.merge_packages(packages, packages_headers_arch, arch) cmds_binary_arch = ["$(MAKE) -f debian/rules.real binary-arch-arch %s" % makeflags] makefile.add('binary-arch_%s_real' % arch, cmds=cmds_binary_arch) # Shortcut to aid architecture bootstrapping makefile.add('binary-libc-dev_%s' % arch, ['source_none_real'], ["$(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(u'Disable installer modules on request (DEBIAN_KERNEL_DISABLE_INSTALLER set)') else: raise RuntimeError(u'Unable to disable installer modules in release build (DEBIAN_KERNEL_DISABLE_INSTALLER set)') else: # 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', self.abiname], stdout=subprocess.PIPE, env=kw_env) udeb_packages = read_control(kw_proc.stdout) kw_proc.wait() if kw_proc.returncode != 0: raise RuntimeError('kernel-wedge exited with code %d' % kw_proc.returncode) self.merge_packages(packages, udeb_packages, arch) # These packages must be built after the per-flavour/ # per-featureset packages. makefile.add( 'binary-arch_%s' % arch, cmds=["$(MAKE) -f debian/rules.real install-udeb_%s %s " "PACKAGE_NAMES='%s'" % (arch, makeflags, ' '.join(p['Package'] for p in udeb_packages))])
def do_main_setup(self, vars, makeflags, extra): super(Gencontrol, self).do_main_setup(vars, makeflags, extra) makeflags.update({ 'VERSION': self.version.linux_version, 'UPSTREAMVERSION': self.version.linux_upstream, 'ABINAME': self.abiname_version + self.abiname_part, 'SOURCEVERSION': self.version.complete, }) makeflags['SOURCE_BASENAME'] = self.vars['source_basename'] # Prepare to generate debian/tests/control self.tests_control = self.process_packages( self.templates['tests-control.main'], vars) self.tests_control_image = 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 !pkg.linux.nokernel>' for arch in package['Architecture']: self.installer_packages.setdefault(arch, []) \ .append(package)
def do_main_setup(self, vars, makeflags, extra): super(Gencontrol, self).do_main_setup(vars, makeflags, extra) makeflags.update({ 'VERSION': self.version.linux_version, 'UPSTREAMVERSION': self.version.linux_upstream, 'ABINAME': self.abiname_version + self.abiname_part, 'SOURCEVERSION': self.version.complete, }) if not self.config.merge('packages').get('tools-unversioned', True): makeflags['DO_TOOLS_UNVERSIONED'] = False if not self.config.merge('packages').get('tools-versioned', True): makeflags['DO_TOOLS_VERSIONED'] = False makeflags['SOURCE_BASENAME'] = self.vars['source_basename'] # Prepare to generate debian/tests/control self.tests_control = self.process_packages( self.templates['tests-control.main'], vars) self.tests_control_image = 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 re.match(r"grml.*", self.changelog[0].distribution): import warnings warnings.warn('Disabling installer modules since we are building for Grml.') 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)