Package: dpkg-dev Version: 1.10.9 Severity: wishlist the following patch makes it possible to use following: | Depends: test1 [i386] | test2 [!i386], test3 [!s390] dpkg-gencontrole builds the unified version of this. the only known problem is, that it doesn't handle Architecture: all packages well. this needs a further check. bastian -- Conquest is easy. Control is not. -- Kirk, "Mirror, Mirror", stardate unknown
Index: dpkg-gencontrol.pl
===================================================================
RCS file: /cvs/dpkg/dpkg/scripts/dpkg-gencontrol.pl,v
retrieving revision 1.25
diff -u -r1.25 dpkg-gencontrol.pl
--- dpkg-gencontrol.pl 25 May 2002 03:04:04 -0000 1.25
+++ dpkg-gencontrol.pl 24 Nov 2002 19:19:40 -0000
@@ -124,9 +124,13 @@
else { &unknown('general section of control info file'); }
} elsif (s/^C$myindex //) {
#print STDERR "P key >$_< value >$v<\n";
- if (m/^(Package|Description|Essential|Pre-Depends|Depends)$/ ||
- m/^(Recommends|Suggests|Enhances|Optional|Conflicts|Provides|Replaces)$/) {
+ if (m/^(Package|Description|Essential)$/) {
$f{$_}= $v;
+ } elsif (m/^(Pre-Depends|Depends|Recommends|Suggests|Enhances|Optional|Conflicts|Provides|Replaces)$/) {
+ $v = build_dep($v);
+ if (defined $v) {
+ $f{$_}= $v;
+ }
} elsif (m/^Section$|^Priority$/) {
$spvalue{$_}= $v;
} elsif (m/^Architecture$/) {
@@ -252,4 +256,60 @@
$r= $spvalue{$_[0]};
$r= '-' if !length($r);
return $r;
+}
+
+sub build_dep {
+ my $line = shift;
+ my $out;
+ foreach my $dep (split(/,\s*/, $line)) {
+ my $outdep;
+ALTERNATE:
+ foreach my $alternate (split(/\s*\|\s*/, $dep)) {
+ my ($package, $rest) = split(/\s*(?=[[(])/, $alternate, 2);
+ my $seen_arch = 0;
+ my $version;
+ $package =~ s/\s*$//;
+
+ # Check arch specifications.
+ if (defined $rest && $rest =~ m/\[(.*?)\]/) {
+ my $arches = lc($1);
+ foreach my $carch (split(' ', $arches)) {
+ if ($carch eq $arch) {
+ $seen_arch=1;
+ next;
+ }
+ elsif ($carch eq "!$arch") {
+ next ALTERNATE;
+ }
+ elsif ($carch =~ /!/) {
+ # This is equivilant to
+ # having seen the current arch,
+ # unless the current arch
+ # is also listed..
+ $seen_arch = 1;
+ }
+ }
+ if (! $seen_arch) {
+ next;
+ }
+ }
+ if (defined $rest && $rest=~m/\(\s*([<>=]{1,2}\s*.*?)\s*\)/) {
+ $version = $1;
+ }
+ if (defined $outdep) {
+ $outdep .= " | ";
+ }
+ $outdep .= $package;
+ if (defined $version) {
+ $outdep .= " ($version)";
+ }
+ }
+ if (defined $outdep) {
+ if (defined $out) {
+ $out .= ", ";
+ }
+ $out .= $outdep;
+ }
+ }
+ return $out;
}
Attachment:
pgp2WIHK7U7rh.pgp
Description: PGP signature