Package: dpkg-dev
Followup-For: Bug #990073
Control: tags -1 + patch
Here is a proof of concept passing the following tests.
gcc -> gcc-defaults (= .*)
bla (= 1), gcc, foo (= 2) -> bla (= 1), foo (= 2), gcc-defaults
(= .*)
bla (= 1), gcc, g++, foo (= 2) -> bla (= 1), foo (= 2), gcc-defaults
(= .*)
bla (= 1), foo (= 2) [arm64], g++ [arm64] -> bla (= 1)
bla, gcc, g++, foo (= 2) -> error message with 'bla gcc g++'
--- a/man/dpkg-gencontrol.pod
+++ b/man/dpkg-gencontrol.pod
@@ -58,6 +58,10 @@ B<dpkg-gencontrol>
also adds an entry for the binary package to
B<debian/files>.
+Each unversioned dependency in the B<Built-Using> field is assumed to
+be installed on the system (usually, via B<Build-Depends>), and
+replaced with the matching source package and version.
+
=head1 OPTIONS
=over
--- a/scripts/dpkg-gencontrol.pl
+++ b/scripts/dpkg-gencontrol.pl
@@ -293,6 +293,13 @@ foreach my $field (field_list_pkg_dep()) {
reduce_profiles => 1, union => 1);
error(g_("parsing package '%s' %s field: %s"), $oppackage,
$field, $field_value) unless defined $dep;
+ if ($field eq 'Built-Using'
+ and (my @changed = grep { not defined $_->{'version'} }
$dep->get_deps())) {
+ my $debs = join(' ', map { $_->{'package'} } @changed);
+ my @lines = `dpkg-query -Wf '\${source:Package} (=
\${source:Version})\\n' $debs`;
+ error(g_('failed to expand Built-Using: %s'), $debs) if $?;
+ $_->parse_string(shift @lines) for (@changed);
+ }
$dep->simplify_deps($facts);
$dep->sort();
}