The following commit has been merged in the master branch:
commit 3624a4b0eb5499f367c1d8077240f151903cd70a
Author: Philipp Kern <[email protected]>
Date: Sat May 2 11:39:00 2009 +0200
dpkg-source: do not set arch:any in dsc on arch-restricted packages
dpkg-source was pretty liberal in setting 'Architecture: any' in the
dsc: as soon as there are two binary packages, one being arch:all and
one being arch-restricted, you get arch:any in the dsc. This is
incorrect because the package will only build on the autobuilders
if there are architecture-dependent binary packages available.
Thus this patch only produces arch:any if at least one binary package
specifies it. Otherwise it outputs the set of all binary architectures
(including arch:all).
Closes: #526617
Signed-off-by: Philipp Kern <[email protected]>
diff --git a/debian/changelog b/debian/changelog
index 1fc1546..1c88a38 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -72,6 +72,8 @@ dpkg (1.15.1) UNRELEASED; urgency=low
- Add kfreebsd-i386 and kfreebsd-amd64.
* Add avr32 to cputable. Closes: #523456
* Detect the curses headers to use instead of hardcoding them.
+ * Make dpkg-source do not set arch:any in .dsc on arch-restricted packages.
+ Thanks to Philipp Kern <[email protected]>. Closes: #526617
[ Frank Lichtenheld ]
* Dpkg::Version: Remove unnecessary function next_elem which just
diff --git a/scripts/dpkg-source.pl b/scripts/dpkg-source.pl
index 75482d0..6ea264c 100755
--- a/scripts/dpkg-source.pl
+++ b/scripts/dpkg-source.pl
@@ -195,31 +195,23 @@ if ($options{'opmode'} eq 'build') {
foreach $_ (keys %{$pkg}) {
my $v = $pkg->{$_};
if (m/^Architecture$/) {
- if (debarch_eq($v, 'any')) {
- @sourcearch= ('any');
- } elsif (debarch_eq($v, 'all')) {
- if (!...@sourcearch || $sourcearch[0] eq 'all') {
- @sourcearch= ('all');
- } else {
- @sourcearch= ('any');
- }
+ # Gather all binary architectures in one set. 'any' and 'all'
+ # are special-cased as they need to be the only ones in the
+ # current stanza if present.
+ if (debarch_eq($v, 'any') || debarch_eq($v, 'all')) {
+ push(@sourcearch, $v) unless $archadded{$v}++;
} else {
- if (@sourcearch && grep($sourcearch[0] eq $_, 'any',
'all')) {
- @sourcearch= ('any');
- } else {
- for my $a (split(/\s+/, $v)) {
- error(_g("`%s' is not a legal architecture string"),
- $a)
- unless $a =~ /^[\w-]+$/;
- error(_g("architecture %s only allowed on its " .
- "own (list for package %s is `%s')"),
- $a, $p, $a)
- if grep($a eq $_, 'any','all');
- push(@sourcearch,$a) unless $archadded{$a}++;
- }
- }
+ for my $a (split(/\s+/, $v)) {
+ error(_g("`%s' is not a legal architecture string"),
+ $a)
+ unless $a =~ /^[\w-]+$/;
+ error(_g("architecture %s only allowed on its " .
+ "own (list for package %s is `%s')"),
+ $a, $p, $a)
+ if grep($a eq $_, 'any', 'all');
+ push(@sourcearch, $a) unless $archadded{$a}++;
+ }
}
- $fields->{'Architecture'}= join(' ',@sourcearch);
} elsif (s/^X[BC]*S[BC]*-//i) { # Include XS-* fields
$fields->{$_} = $v;
} elsif (m/^$control_pkg_field_regex$/ ||
@@ -229,6 +221,11 @@ if ($options{'opmode'} eq 'build') {
}
}
}
+ if (grep($_ eq 'any', @sourcearch)) {
+ # If we encounter one 'any' then the other arches become insignificant.
+ @sourcearch = ('any');
+ }
+ $fields->{'Architecture'} = join(' ', @sourcearch);
# Scan fields of dpkg-parsechangelog
foreach $_ (keys %{$changelog}) {
--
dpkg's main repository
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]