[Reproducible-commits] [debhelper] 04/14: Add experimental .ddeb support
Jérémy Bobbio
lunar at moszumanska.debian.org
Sat May 2 09:28:30 UTC 2015
This is an automated email from the git hooks/post-receive script.
lunar pushed a commit to branch pu/reproducible_builds
in repository debhelper.
commit 22564122d83bb2f22d371d60855c9577b1a942b3
Author: Niels Thykier <niels at thykier.net>
Date: Fri Apr 3 23:16:26 2015 +0200
Add experimental .ddeb support
Signed-off-by: Niels Thykier <niels at thykier.net>
---
Debian/Debhelper/Dh_Lib.pm | 26 ++++++++++++++++++++------
dh_builddeb | 7 +++++++
dh_clean | 3 +++
dh_gencontrol | 33 ++++++++++++++++++++++++++++++++-
dh_md5sums | 17 +++++++++++++++--
dh_strip | 27 ++++++++++++++++++---------
6 files changed, 95 insertions(+), 18 deletions(-)
diff --git a/Debian/Debhelper/Dh_Lib.pm b/Debian/Debhelper/Dh_Lib.pm
index 4740f0e..c0da230 100644
--- a/Debian/Debhelper/Dh_Lib.pm
+++ b/Debian/Debhelper/Dh_Lib.pm
@@ -21,7 +21,7 @@ use vars qw(@ISA @EXPORT %dh);
&dpkg_architecture_value &sourcepackage &make_symlink
&is_make_jobserver_unavailable &clean_jobserver_makeflags
&cross_command &set_buildflags &get_buildoption
- &install_dh_config_file
+ &install_dh_config_file &ddeb_filename
&install_file &install_prog &install_lib &install_dir
);
@@ -944,15 +944,29 @@ sub is_udeb {
return $package_types{$package} eq 'udeb';
}
-# Generates the filename that is used for a udeb package.
-sub udeb_filename {
- my $package=shift;
-
+sub _xdeb_filename {
+ my ($package, $ext, $actual_name) = @_;
+
my $filearch=package_arch($package);
isnative($package); # side effect
my $version=$dh{VERSION};
$version=~s/^[0-9]+://; # strip any epoch
- return "${package}_${version}_$filearch.udeb";
+ $actual_name = $package if not defined($actual_name);
+ return "${actual_name}_${version}_${filearch}.${ext}";
+}
+
+# Generates the filename that is used for a udeb package.
+sub udeb_filename {
+ my ($package) = @_;
+
+ return _xdeb_filename($package, 'udeb');
+}
+
+# Generates the filename that is used for a ddeb package.
+sub ddeb_filename {
+ my ($package) = @_;
+
+ return _xdeb_filename($package, 'ddeb', "${package}-dbgsym");
}
# Handles #DEBHELPER# substitution in a script; also can generate a new
diff --git a/dh_builddeb b/dh_builddeb
index 42e8a98..7129627 100755
--- a/dh_builddeb
+++ b/dh_builddeb
@@ -105,6 +105,13 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
}
}
if (! is_udeb($package)) {
+ my $ddeb_tmpdir = "debian/.debhelper/${package}/ddeb-root";
+ if ( -d $ddeb_tmpdir) {
+ my $ddeb_filename = '/' . ddeb_filename($package);
+ doit("dpkg-deb", "-z1", "-Zxz", "-Sextreme",
+ @{$dh{U_PARAMS}}, "--build", $ddeb_tmpdir, $dh{DESTDIR}.$ddeb_filename);
+ }
+
doit("dpkg-deb", @{$dh{U_PARAMS}}, "--build", $tmp, $dh{DESTDIR}.$dh{FILENAME});
}
else {
diff --git a/dh_clean b/dh_clean
index e1bee78..0158e6e 100755
--- a/dh_clean
+++ b/dh_clean
@@ -92,6 +92,9 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
unless excludefile($tmp);
}
+# Remove internal state data
+doit('rm', '-rf', 'debian/.debhelper/');
+
# Remove all debhelper logs.
if (! $dh{D_FLAG} && ! $dh{K_FLAG}) {
complex_doit("rm","-f","debian/*.debhelper.log");
diff --git a/dh_gencontrol b/dh_gencontrol
index 77a73b5..725d3c7 100755
--- a/dh_gencontrol
+++ b/dh_gencontrol
@@ -44,9 +44,13 @@ init(options => {
"dpkg-gencontrol-params=s", => \$dh{U_PARAMS},
});
+
+my $src_pkg;
+
foreach my $package (@{$dh{DOPACKAGES}}) {
my $tmp=tmpdir($package);
my $ext=pkgext($package);
+ my $ddeb_tmp = "debian/.debhelper/${package}/ddeb-root";
my $substvars="debian/${ext}substvars";
@@ -68,8 +72,35 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
complex_doit("echo misc:Pre-Depends= >> $substvars");
}
+
+ if ( -d $ddeb_tmp) {
+ my $arch = package_arch($package);
+ my $ddeb_filename = ddeb_filename($package);
+ $src_pkg = sourcepackage() if not defined($src_pkg);
+ # Remove and override more or less every standard field.
+ my @ddeb_options = (qw(
+ -UPre-Depends -URecommends -USuggests -UEnhances -UProvides -UEssential
+ -UReplaces -UBreaks -UConflicts
+ -DPriority=extra
+ ),
+ "-DPackage=${package}-dbgsym",
+ "-DDepends=${package}:${arch} (= \${binary:Version})",
+ "-DDescription=Debug symbols for ${package}",
+ "-DSource=${src_pkg}",
+ "-n${ddeb_filename}",
+ );
+ if ( ! -d "${ddeb_tmp}/DEBIAN" ) {
+ install_dir("${ddeb_tmp}/DEBIAN");
+ }
+ doit("dpkg-gencontrol", "-p${package}", "-l$changelog", "-T$substvars",
+ "-P${ddeb_tmp}",@{$dh{U_PARAMS}}, @ddeb_options);
+
+ doit("chmod","0644","${ddeb_tmp}/DEBIAN/control");
+ doit("chown","0:0","${ddeb_tmp}/DEBIAN/control");
+ }
+
# Generate and install control file.
- doit("dpkg-gencontrol", "-p$package", "-l$changelog", "-T$substvars",
+ doit("dpkg-gencontrol", "-p$package", "-l$changelog", "-T$substvars",
"-P$tmp",@{$dh{U_PARAMS}});
# This chmod is only necessary if the user sets the umask to
diff --git a/dh_md5sums b/dh_md5sums
index a212004..521fa66 100755
--- a/dh_md5sums
+++ b/dh_md5sums
@@ -50,7 +50,8 @@ init(options => {
foreach my $package (@{$dh{DOPACKAGES}}) {
next if is_udeb($package);
-
+
+ my $ddeb_tmp = "debian/.debhelper/${package}/ddeb-root";
my $tmp=tmpdir($package);
if (! -d "$tmp/DEBIAN") {
@@ -83,7 +84,19 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
}
else {
doit("chmod", "0644", "$tmp/DEBIAN/md5sums");
- doit("chown","0:0","$tmp/DEBIAN/md5sums");
+ doit("chown", "0:0", "$tmp/DEBIAN/md5sums");
+ }
+ if ( -d $ddeb_tmp) {
+ $find = "find . -type f ! -regex './DEBIAN/.*' -printf '%P\\0'";
+ complex_doit("(cd $ddeb_tmp >/dev/null ; $find | LC_ALL=C sort -z | xargs -r0 md5sum > DEBIAN/md5sums) >/dev/null");
+ # If the file's empty, no reason to waste inodes on it.
+ if (-z "${ddeb_tmp}/DEBIAN/md5sums") {
+ doit('rm', '-f', "${ddeb_tmp}/DEBIAN/md5sums");
+ }
+ else {
+ doit('chmod', '0644', "${ddeb_tmp}/DEBIAN/md5sums");
+ doit('chown', '0:0', "${ddeb_tmp}/DEBIAN/md5sums");
+ }
}
}
diff --git a/dh_strip b/dh_strip
index 1ffaaf7..a23b614 100755
--- a/dh_strip
+++ b/dh_strip
@@ -153,20 +153,22 @@ sub testfile {
}
sub make_debug {
- my $file=shift;
- my $tmp=shift;
- my $desttmp=shift;
-
+ my ($file, $tmp, $desttmp, $use_build_id) = @_;
+
# Don't try to copy debug symbols out if the file is already
# stripped.
return unless get_file_type($file) =~ /not stripped/;
my ($base_file)=$file=~/^\Q$tmp\E(.*)/;
my $debug_path;
- if (! compat(8) &&
+ if ($use_build_id &&
`LC_ALL=C readelf -n $file`=~ /^\s+Build ID: ([0-9a-f]{2})([0-9a-f]+)$/m) {
$debug_path=$desttmp."/usr/lib/debug/.build-id/$1/$2.debug"
}
+ elsif ($use_build_id > 1) {
+ # For ddebs, we need build-id (else it will not be co-installable).
+ return;
+ }
else {
$debug_path=$desttmp."/usr/lib/debug/".$base_file;
}
@@ -196,7 +198,8 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
# Support for keeping the debugging symbols in a detached file.
my $keep_debug=$dh{K_FLAG};
- my $debugtmp=$tmp;
+ my $debugtmp;
+ my $use_build_id = compat(8) ? 0 : 1;
if (! compat(4)) {
if (ref $dh{DEBUGPACKAGES}) {
$keep_debug=1;
@@ -215,12 +218,18 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
$debugtmp=tmpdir($package."-dbg");
}
}
-
+ if ($ENV{'DH_BUILD_DDEBS'} and package_arch($package) ne 'all') {
+ $debugtmp = "debian/.debhelper/${package}/ddeb-root";
+ $keep_debug = 1;
+ $use_build_id = 2;
+ } else {
+ $debugtmp = $tmp;
+ }
@shared_libs=@executables=@static_libs=();
find(\&testfile,$tmp);
foreach (@shared_libs) {
- my $debug_path = make_debug($_, $tmp, $debugtmp) if $keep_debug;
+ my $debug_path = make_debug($_, $tmp, $debugtmp, $use_build_id) if $keep_debug;
# Note that all calls to strip on shared libs
# *must* include the --strip-unneeded.
doit($strip,"--remove-section=.comment",
@@ -229,7 +238,7 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
}
foreach (@executables) {
- my $debug_path = make_debug($_, $tmp, $debugtmp) if $keep_debug;
+ my $debug_path = make_debug($_, $tmp, $debugtmp, $use_build_id) if $keep_debug;
doit($strip,"--remove-section=.comment",
"--remove-section=.note",$_);
attach_debug($_, $debug_path) if defined $debug_path;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/debhelper.git
More information about the Reproducible-commits
mailing list