diff options
author | joey <joey> | 2003-10-14 19:35:06 +0000 |
---|---|---|
committer | joey <joey> | 2003-10-14 19:35:06 +0000 |
commit | 79411de849c878b56c269b88a49c6b1ce15310d0 (patch) | |
tree | 1aef6c6bdeaf8fb649382937b4e3898c35acd9d9 | |
parent | 347a3114eb65088dd8213634eb207d68dbf2aa6d (diff) | |
download | debhelper-79411de849c878b56c269b88a49c6b1ce15310d0.tar.gz |
r1614: * Patch from Andrew Suffield <asuffield@debian.org> to make dh_stripversion_4.1.76
support saving the debugging symbols with a --keep-debug flag and
dh_shlibdeps skip /usr/lib/debug. Thanks! Closes: #215670
* Add --dbg-package flag to dh_strip, to list packages that have associated
-dbg packages. dh_strip will then move the debug symbols over to the
associated -dbg packages.
-rw-r--r-- | Debian/Debhelper/Dh_Getopt.pm | 9 | ||||
-rwxr-xr-x | dh_shlibdeps | 2 | ||||
-rwxr-xr-x | dh_strip | 59 |
3 files changed, 68 insertions, 2 deletions
diff --git a/Debian/Debhelper/Dh_Getopt.pm b/Debian/Debhelper/Dh_Getopt.pm index 7d82eea5..c610963b 100644 --- a/Debian/Debhelper/Dh_Getopt.pm +++ b/Debian/Debhelper/Dh_Getopt.pm @@ -48,6 +48,11 @@ sub AddPackage { my($option,$value)=@_; } } +# Adds packages to the list of debug packages. +sub AddDebugPackage { my($option,$value)=@_; + push @{$options{DEBUGPACKAGES}}, $value; +} + # Add a package to a list of packages that should not be acted on. sub ExcludePackage { my($option,$value)=@_; $exclude_package{$value}=1; @@ -80,6 +85,8 @@ sub parseopts { "p=s" => \&AddPackage, "package=s" => \&AddPackage, + "dbg-package=s" => \&AddDebugPackage, + "s" => \&AddPackage, "same-arch" => \&AddPackage, @@ -153,6 +160,8 @@ sub parseopts { "name=s" => \$options{NAME}, + "keep-debug" => \$options{KEEP_DEBUG}, + "<>" => \&NonOption, ); diff --git a/dh_shlibdeps b/dh_shlibdeps index 2d7970d2..3192b189 100755 --- a/dh_shlibdeps +++ b/dh_shlibdeps @@ -113,7 +113,7 @@ foreach my $package (@{$dh{DOPACKAGES}}) { if (defined($dh{EXCLUDE_FIND}) && $dh{EXCLUDE_FIND} ne '') { $find_options="! \\( $dh{EXCLUDE_FIND} \\)"; } - foreach my $file (split(/\n/,`find $tmp -type f \\( -perm +111 -or -name "*.so*" \\) $find_options`)) { + foreach my $file (split(/\n/,`find $tmp -path $tmp/usr/lib/debug -prune -or -type f \\( -perm +111 -or -name "*.so*" \\) $find_options -print`)) { # TODO this is slow, optimize. Ie, file can run once on # multiple files.. $ff=`file "$file"`; @@ -12,7 +12,7 @@ use Debian::Debhelper::Dh_Lib; =head1 SYNOPSIS -B<dh_strip> [S<I<debhelper options>>] [B<-X>I<item>] +B<dh_strip> [S<I<debhelper options>>] [B<-X>I<item>] [--dbg-package=package] [--keep-debug] =head1 DESCRIPTION @@ -42,6 +42,28 @@ Exclude files that contain "item" anywhere in their filename from being stripped. You may use this option multiple times to build up a list of things to exclude. +=item B<--dbg-package=>I<package> + +This option tells dh_strip that the given package has an associated "-dbg" +package. dh_strip will, when stripping off the debug symbols of files in +the given package, save them to independent files in the package build +directory for the "-dbg" package. + +For example, you might have a package libfoo libfoo, and want to include a +libfoo-dbg package that contains debugging symbols. The command "dh_strip +--dbg-package=libfoo" will make dh_strip save the debugging symbols for +usr/lib/libfoo.so.0 into usr/lib/debug/usr/lib/libfoo.so.0 in the package +build directory for libfoo-dbg. If libfoo-dbg is installed, gdb wil +automatically load up the debugging symbols from it when debugging libfoo. + +This option may be repeated to list more than one package. + +=item B<-k>, B<--keep-debug> + +Debug symbols will be retained, but split into an independant +file in usr/lib/debug/ in the package build directory. --dbg-package +is easier to use than this option, but this option is more flexible. + =back =head1 NOTES @@ -118,22 +140,57 @@ sub testfile { } } +sub make_debug { + my $file=shift; + my $tmp=shift; + my $desttmp=shift; + + my ($base_file)=$file=~/^$tmp(.*)/; + my $debug_path=$desttmp."/usr/lib/debug/".$base_file; + my $debug_dir=dirname($debug_path); + if (! -d $debug_dir) { + doit("install", "-d", $debug_dir); + } + doit("objcopy", "--only-keep-debug", $file, $debug_path); + # No reason for this to be executable. + doit("chmod", 644, $debug_path); + return $debug_path; +} + +sub attach_debug { + my $file=shift; + my $debug_path=shift; + doit("objcopy", "--add-gnu-debuglink", $debug_path, $file); +} + foreach my $package (@{$dh{DOPACKAGES}}) { my $tmp=tmpdir($package); + # Support for keeping the debugging symbols in a detached file. + my $keep_debug=$dh{KEEP_DEBUG}; + my $debugtmp=$tmp; + if (ref $dh{DEBUGPACKAGES} && grep { $_ eq $package } @{$dh{DEBUGPACKAGES}}) { + $keep_debug=1; + $debugtmp=tmpdir($package."-dbg"); + } + @shared_libs=@executables=@static_libs=(); find(\&testfile,$tmp); foreach (@shared_libs) { + my $debug_path = make_debug($_, $tmp, $debugtmp) if $keep_debug; # Note that all calls to strip on shared libs # *must* inclde the --strip-unneeded. doit("strip","--remove-section=.comment", "--remove-section=.note","--strip-unneeded",$_); + attach_debug($_, $debug_path) if $keep_debug; } foreach (@executables) { + my $debug_path = make_debug($_, $tmp, $debugtmp) if $keep_debug; doit("strip","--remove-section=.comment", "--remove-section=.note",$_); + attach_debug($_, $debug_path) if $keep_debug } foreach (@static_libs) { |