summaryrefslogtreecommitdiff
path: root/dh_builddeb
diff options
context:
space:
mode:
authorNiels Thykier <niels@thykier.net>2015-08-30 16:59:21 +0200
committerNiels Thykier <niels@thykier.net>2015-08-30 16:59:22 +0200
commit1f93dad8a0e54733b3abd747b1d4735c40426a79 (patch)
tree49072565b8985d0f495ed209052a8f0824613459 /dh_builddeb
parentf15878d1b81fee001d63a09dc31e43663a9185c6 (diff)
downloaddebhelper-1f93dad8a0e54733b3abd747b1d4735c40426a79.tar.gz
dh_builddeb: Generate the correct filename for udebs
dpkg-gencontrol does not include "Package-Type" in the control file (see #575059, #452273) for political reasons. dh_builddeb used to guess the "correct" filename, but it fell short when dpkg-gencontrol -V was used. The best solution so far: Let dpkg-deb build the deb and have dh_builddeb fix the extension. Signed-off-by: Niels Thykier <niels@thykier.net>
Diffstat (limited to 'dh_builddeb')
-rwxr-xr-xdh_builddeb45
1 files changed, 42 insertions, 3 deletions
diff --git a/dh_builddeb b/dh_builddeb
index 939ea241..f314e5ad 100755
--- a/dh_builddeb
+++ b/dh_builddeb
@@ -93,6 +93,33 @@ sub default_compressor_args {
return (@{$default_comp}, @args);
}
+sub build_and_rename_deb {
+ my ($package, $destdir, $cmd, $rename_sub) = @_;
+ my $build_dir = "debian/.debhelper/scratch-space/build-${package}";
+ my ($dpkg_filename, $desired_filename);
+ if ( ! -d $build_dir) {
+ install_dir($build_dir);
+ }
+ doit(@${cmd}, $build_dir);
+ opendir(my $fd, $build_dir);
+ for my $name (readdir($fd)) {
+ next if $name eq '.' or $name eq '..';
+ if ($dpkg_filename) {
+ error("\"@{$cmd}\" produced two debs: $dpkg_filename and $name");
+ }
+ $dpkg_filename = $name;
+ }
+ closedir($fd);
+ local $_ = $dpkg_filename;
+ $rename_sub->();
+ $desired_filename = $_;
+ if ($desired_filename ne $dpkg_filename) {
+ print "\tRenaming $dpkg_filename to $desired_filename\n";
+ }
+ doit('mv', '-f', "${build_dir}/${dpkg_filename}",
+ "${destdir}/${desired_filename}");
+}
+
foreach my $package (@{$dh{DOPACKAGES}}) {
my $pid=fork();
if (! defined $pid) {
@@ -140,11 +167,23 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
}
else {
my $filename=$dh{FILENAME};
+ my @cmd = qw(dpkg-deb -z1 -Zxz -Sextreme);
+ push(@cmd, @{$dh{U_PARAMS}}) if $dh{U_PARAMS};
+ push(@cmd, '--build', $tmp);
if (! $filename) {
- $filename="/".udeb_filename($package);
+ # dpkg-gencontrol does not include "Package-Type" in the
+ # control file (see #575059, #452273) for political
+ # reasons.
+ #
+ # dh_builddeb used to guess the "correct" filename, but it
+ # fell short when dpkg-gencontrol -V was used. The best
+ # solution so far: Let dpkg-deb build the deb and
+ # have dh_builddeb fix the extension.
+ build_and_rename_deb($package, $dh{DESTDIR}, \@cmd,
+ sub { s/\.deb$/\.udeb/g });
+ } else {
+ doit(@cmd, $dh{DESTDIR}.$filename);
}
- doit("dpkg-deb", "-z1", "-Zxz", "-Sextreme",
- @{$dh{U_PARAMS}}, "--build", $tmp, $dh{DESTDIR}.$filename);
}
exit 0;
}