diff options
| -rw-r--r-- | debian/arch/amd64/vserver/defines | 3 | ||||
| -rw-r--r-- | debian/arch/i386/vserver/defines | 5 | ||||
| -rw-r--r-- | debian/arch/powerpc/vserver/defines | 3 | ||||
| -rwxr-xr-x | debian/bin/gencontrol.py | 17 | ||||
| -rw-r--r-- | debian/lib/python/debian_linux/debian.py | 88 |
5 files changed, 79 insertions, 37 deletions
diff --git a/debian/arch/amd64/vserver/defines b/debian/arch/amd64/vserver/defines index 6bcede465414..180936fc47fc 100644 --- a/debian/arch/amd64/vserver/defines +++ b/debian/arch/amd64/vserver/defines @@ -3,6 +3,9 @@ flavours: amd64-k8 em64t-p4 +[image] +recommends: util-vserver + [amd64-k8] class: AMD64 K8 longclass: 64bit AMD Athlon64, AthlonFX, Opteron and Turion64 diff --git a/debian/arch/i386/vserver/defines b/debian/arch/i386/vserver/defines index 2843ce0df595..b779db83f7e1 100644 --- a/debian/arch/i386/vserver/defines +++ b/debian/arch/i386/vserver/defines @@ -3,13 +3,14 @@ flavours: 686 k7 +[image] +recommends: util-vserver, libc6-i686 + [686] class: PPro/Celeron/PII/PIII/P4 longclass: Pentium Pro/Celeron/Pentium II/Pentium III/Pentium 4 -recommends: libc6-i686 [k7] class: AMD K7 longclass: 32bit AMD Duron/Athlon/AthlonXP -recommends: libc6-i686 diff --git a/debian/arch/powerpc/vserver/defines b/debian/arch/powerpc/vserver/defines index 489172848a6f..59b128772e2a 100644 --- a/debian/arch/powerpc/vserver/defines +++ b/debian/arch/powerpc/vserver/defines @@ -3,6 +3,9 @@ flavours: powerpc powerpc64 +[image] +recommends: util-vserver + [powerpc] depends: mkvmlinuz (>= 18) diff --git a/debian/bin/gencontrol.py b/debian/bin/gencontrol.py index 55e1e679d7a0..e64312a74563 100755 --- a/debian/bin/gencontrol.py +++ b/debian/bin/gencontrol.py @@ -111,16 +111,16 @@ class gencontrol(debian_linux.gencontrol.gencontrol): image_latest = self.templates["control.image.latest"] headers_latest = self.templates["control.headers.latest"] + config_entry_relations = self.config.merge('relations', arch, subarch, flavour) + image_depends = package_relation_list() if vars.get('initramfs', True): generators = vars['initramfs-generators'] config_entry_commands_initramfs = self.config.merge('commands-image-initramfs-generators', arch, subarch, flavour) - config_entry_relations = self.config.merge('relations', arch, subarch, flavour) commands = [config_entry_commands_initramfs[i] for i in generators if config_entry_commands_initramfs.has_key(i)] makeflags['INITRD_CMD'] = ' '.join(commands) l = package_relation_group() - l.extend([package_relation(config_entry_relations[i]) for i in generators]) - l.append(package_relation(config_entry_relations['initramfs-fallback'])) + l.extend(generators + ['initramfs-fallback']) image_depends.append(l) packages_own = [] @@ -133,8 +133,8 @@ class gencontrol(debian_linux.gencontrol.gencontrol): else: image = image_type_modulesinline - packages_own.append(self.process_real_image(image[0], image_depends, vars)) - packages_own.extend(self.process_packages(image[1:], vars)) + for i in image: + packages_own.append(self.process_real_image(i, {'depends': image_depends}, config_entry_relations, vars)) packages_dummy.extend(self.process_packages(image_latest, vars)) if image in (image_type_modulesextra, image_type_modulesinline): @@ -174,7 +174,7 @@ class gencontrol(debian_linux.gencontrol.gencontrol): else: self.abiname = self.vars['abiname'] = '-%s' % self.config['abiname',]['abiname'] - def process_real_image(self, in_entry, depends, vars): + def process_real_image(self, in_entry, relations, config, vars): entry = self.process_package(in_entry, vars) if vars.has_key('desc'): entry['Description'].long[1:1] = [vars['desc']] @@ -182,8 +182,9 @@ class gencontrol(debian_linux.gencontrol.gencontrol): value = entry.get(field, package_relation_list()) t = vars.get(field.lower(), []) value.extend(t) - if depends and field == 'Depends': - value.append(depends) + t = relations.get(field.lower(), []) + value.extend(t) + value.config(config) entry[field] = value return entry diff --git a/debian/lib/python/debian_linux/debian.py b/debian/lib/python/debian_linux/debian.py index 9e41e0c83d3d..ce1e287b90d0 100644 --- a/debian/lib/python/debian_linux/debian.py +++ b/debian/lib/python/debian_linux/debian.py @@ -107,16 +107,7 @@ class package_relation(object): def __init__(self, value = None): if value is not None: - match = self._re.match(value) - if match is None: - raise RuntimeError, "Can't parse dependency %s" % value - match = match.groups() - self.name = match[0] - self.version = match[1] - if match[2] is not None: - self.arches = re.split('\s+', match[2]) - else: - self.arches = [] + self.parse(value) else: self.name = None self.version = None @@ -130,11 +121,29 @@ class package_relation(object): ret.extend([' [', ' '.join(self.arches), ']']) return ''.join(ret) + def config(self, entry): + if self.version is not None or self.arches: + return + value = entry.get(self.name, None) + if value is None: + return + self.parse(value) + + def parse(self, value): + match = self._re.match(value) + if match is None: + raise RuntimeError, "Can't parse dependency %s" % value + match = match.groups() + self.name = match[0] + self.version = match[1] + if match[2] is not None: + self.arches = re.split('\s+', match[2]) + else: + self.arches = [] + class package_relation_list(list): def __init__(self, value = None): - if isinstance(value, (list, tuple)): - self.extend(value) - elif value is not None: + if value is not None: self.extend(value) def __str__(self): @@ -146,31 +155,37 @@ class package_relation_list(list): return i return None + def append(self, value): + if isinstance(value, basestring): + value = package_relation_group(value) + elif not isinstance(value, package_relation_group): + raise ValueError, "got %s" % type(value) + j = self._match(value) + if j: + j._update_arches(value) + else: + super(package_relation_list, self).append(value) + + def config(self, entry): + for i in self: + i.config(entry) + def extend(self, value): if isinstance(value, basestring): - value = [package_relation_group(j.strip()) for j in re.split(',', value.strip())] + value = [j.strip() for j in re.split(',', value.strip())] + elif not isinstance(value, (list, tuple)): + raise ValueError, "got %s" % type(value) for i in value: - if isinstance(i, basestring): - i = package_relation_group(i) - j = self._match(i) - if j: - j._update_arches(i) - else: - self.append(i) + self.append(i) class package_relation_group(list): def __init__(self, value = None): - if isinstance(value, package_relation_list): + if value is not None: self.extend(value) - elif value is not None: - self._extend(value) def __str__(self): return ' | '.join([str(i) for i in self]) - def _extend(self, value): - self.extend([package_relation(j.strip()) for j in re.split('\|', value.strip())]) - def _match(self, value): for i, j in itertools.izip(self, value): if i.name != j.name or i.version != j.version: @@ -184,6 +199,25 @@ class package_relation_group(list): if arch not in i.arches: i.arches.append(arch) + def append(self, value): + if isinstance(value, basestring): + value = package_relation(value) + elif not isinstance(value, package_relation): + raise ValueError + super(package_relation_group, self).append(value) + + def config(self, entry): + for i in self: + i.config(entry) + + def extend(self, value): + if isinstance(value, basestring): + value = [j.strip() for j in re.split('\|', value.strip())] + elif not isinstance(value, (list, tuple)): + raise ValueError + for i in value: + self.append(i) + class package(dict): _fields = utils.sorted_dict(( ('Package', str), |
