Currently it is possible and useful to install some foreign linux-image
packages, specifically linux-image-<version>-amd64:amd64 on i386 and
linux-image-<version>-s390x:s390x on s390. However it is not practical
to install a foreign linux-headers package because it depends a compiler
package which is correctly neither M-A:same nor M-A:foreign.
This would ideally be solved by either:
1. A compiler meta-package for each target architecture that depends on
either the native or cross-compiler (according to its own architecture)
and is M-A:foreign. The linux-headers packages could then depend on
these.
2. Making the linux-headers packages depend on any compiler package from
one of several specific architectures.
The meta-packages do not exist and cross-architecture dependencies are
not supported by dak or britney. So for now, introduce our own
meta-packages where we need them.
(Following this, it should be possible to remove the i386/amd64 and
s390/s390x flavours.)
Index: linux/debian/bin/gencontrol.py
===================================================================
--- linux/debian/bin/gencontrol.py (revision 20735)
+++ linux/debian/bin/gencontrol.py (working copy)
@@ -21,6 +21,9 @@
'abi': {
'ignore-changes': config.SchemaItemList(),
},
+ 'base': {
+ 'compiler-multilib-names': config.SchemaItemList(),
+ },
'build': {
'debug-info': config.SchemaItemBoolean(),
'modules': config.SchemaItemBoolean(),
@@ -149,6 +152,12 @@
self.merge_packages(packages, packages_headers_arch, arch)
cmds_binary_arch = ["$(MAKE) -f debian/rules.real binary-arch-arch %s" % makeflags]
+ for compiler_multilib in self.config['base',]['compiler-multilib-names']:
+ if arch in self.config['base', 'compiler', compiler_multilib]['arches']:
+ cmds_binary_arch.append(
+ "$(MAKE) -f debian/rules.real install-dummy"
+ " DH_OPTIONS='-plinux-compiler-%s-%s' %s" %
+ (self.version.linux_version, compiler_multilib, makeflags))
makefile.add('binary-arch_%s_real' % arch, cmds=cmds_binary_arch)
# Shortcut to aid architecture bootstrapping
@@ -326,10 +335,36 @@
if config_entry_build.get('modules', True):
makeflags['MODULES'] = True
package_headers = self.process_package(headers[0], vars)
- package_headers['Depends'].extend(relations_compiler)
+ compiler_multilib = self.config['base', arch].get('compiler-multilib')
+ if compiler_multilib:
+ # We cannot directly depend on all valid compilers
+ # without specifying package:arch, which is not
+ # supported by dak. Use an intermediate meta-package.
+ package_headers['Depends'].extend(
+ PackageRelation('linux-compiler-%s-%s' %
+ (self.version.linux_version,
+ compiler_multilib)))
+ else:
+ package_headers['Depends'].extend(relations_compiler)
+
packages_own.append(package_headers)
extra['headers_arch_depends'].append('%s (= ${binary:Version})' % packages_own[-1]['Package'])
+ for compiler_multilib in self.config['base',]['compiler-multilib-names']:
+ if arch in self.config['base', 'compiler', compiler_multilib]['arches']:
+ vars['compiler-multilib'] = compiler_multilib
+ vars['compiler-arches'] = ' '.join(
+ self.config['base', 'compiler', compiler_multilib]['arches'])
+ vars['compiler-desc'] = \
+ self.config['base', 'compiler', compiler_multilib]['description']
+ package_compiler_meta, = \
+ self.process_packages(self.templates["control.compiler"],
+ vars)
+ # XXX: Should check that the compiler is the same for
+ # all arches building this meta-package.
+ package_compiler_meta['Depends'].extend(relations_compiler)
+ packages.append(package_compiler_meta)
+
build_debug = config_entry_build.get('debug-info')
if os.getenv('DEBIAN_KERNEL_DISABLE_DEBUG'):
Index: linux/debian/changelog
===================================================================
--- linux/debian/changelog (revision 20735)
+++ linux/debian/changelog (working copy)
@@ -2,6 +2,10 @@
* New upstream release candidate
+ [ Ben Hutchings ]
+ * [x86,s390,s390x] Introduce linux-compiler meta-packages to allow use of
+ foreign linux-headers packages with a native compiler
+
-- Ben Hutchings <ben@decadent.org.uk> Fri, 18 Oct 2013 02:06:38 +0100
linux (3.11.5-1) unstable; urgency=low
Index: linux/debian/config/amd64/defines
===================================================================
--- linux/debian/config/amd64/defines (revision 20735)
+++ linux/debian/config/amd64/defines (working copy)
@@ -2,6 +2,7 @@
featuresets:
none
rt
+compiler-multilib: x86
kernel-arch: x86
[build]
Index: linux/debian/config/defines
===================================================================
--- linux/debian/config/defines (revision 20735)
+++ linux/debian/config/defines (working copy)
@@ -24,10 +24,26 @@
sparc64
x32
compiler: gcc-4.8
+compiler-multilib-names:
+ s390
+ x86
featuresets:
none
rt
+[compiler-s390_base]
+arches:
+ s390
+ s390x
+description: s390/s390x
+
+[compiler-x86_base]
+arches:
+ amd64
+ i386
+ x32
+description: x86
+
[featureset-rt_base]
enabled: false
Index: linux/debian/config/i386/defines
===================================================================
--- linux/debian/config/i386/defines (revision 20735)
+++ linux/debian/config/i386/defines (working copy)
@@ -2,6 +2,7 @@
featuresets:
none
rt
+compiler-multilib: x86
kernel-arch: x86
[description]
Index: linux/debian/config/s390/defines
===================================================================
--- linux/debian/config/s390/defines (revision 20737)
+++ linux/debian/config/s390/defines (working copy)
@@ -1,6 +1,7 @@
[base]
flavours:
s390x
+compiler-multilib: s390
kernel-arch: s390
[image]
Index: linux/debian/config/s390x/defines
===================================================================
--- linux/debian/config/s390x/defines (revision 20737)
+++ linux/debian/config/s390x/defines (working copy)
@@ -1,6 +1,7 @@
[base]
flavours:
s390x
+compiler-multilib: s390
kernel-arch: s390
[image]
Index: linux/debian/lib/python/debian_linux/config.py
===================================================================
--- linux/debian/lib/python/debian_linux/config.py (revision 20735)
+++ linux/debian/lib/python/debian_linux/config.py (working copy)
@@ -174,6 +174,8 @@
for section in iter(config):
if section[0].startswith('featureset-'):
real = (section[-1], None, section[0][11:])
+ elif section[0].startswith('compiler-'):
+ real = (section[-1], 'compiler', section[0][9:])
else:
real = (section[-1],) + section[1:]
ret[real] = config[section]
Index: linux/debian/templates/control.compiler.in
===================================================================
--- linux/debian/templates/control.compiler.in (revision 0)
+++ linux/debian/templates/control.compiler.in (working copy)
@@ -0,0 +1,7 @@
+Package: linux-compiler-@version@-@compiler-multilib@
+Depends: ${misc:Depends}
+Architecture: @compiler-arches@
+Multi-Arch: foreign
+Description: Compiler for Linux @version@ on @compiler-desc@ (meta-package)
+ This package depends on the appropriate compiler version for Linux @version@
+ on @compiler-desc@.
--
Ben Hutchings
Teamwork is essential - it allows you to blame someone else.
Attachment:
signature.asc
Description: This is a digitally signed message part