X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=dh_strip;h=0da2e1e772446a32cdbe818ddb10773b6819c2df;hb=bd97b09925d8e72b19804f831bc6237509bfbff1;hp=dd21a8ca6fe5ee578f9ca713e15ae9c10255164a;hpb=1153ddb381f7e854b125791a5ff9be6b81d87cc3;p=debhelper.git diff --git a/dh_strip b/dh_strip index dd21a8c..0da2e1e 100755 --- a/dh_strip +++ b/dh_strip @@ -48,8 +48,8 @@ Causes dh_strip to save debug symbols stripped from the packages it acts on as independent files in the package build directory of the specified debugging package. -For example, if your packages are lifoo and foo and you want to include a -foo-dbg package with debugging symbols, use dh_strip --dbg-to=foo-dbg. +For example, if your packages are libfoo and foo and you want to include a +foo-dbg package with debugging symbols, use dh_strip --dbg-package=foo-dbg. Note that this option behaves significantly different in debhelper compatibility levels 4 and below. Instead of specifying the name of a debug @@ -57,24 +57,19 @@ package to put symbols in, it specifies a package (or packages) which should have separated debug symbols, and the separated symbols are placed in packages with "-dbg" added to their name. -Note that if you use this option, your package should build-depend on -binutils (>= 2.14.90.0.7). - =item B<-k>, B<--keep-debug> Debug symbols will be retained, but split into an independent 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. -Note that if you use this option, your package should build-depend on -binutils (>= 2.12.90.0.9). - =back =head1 NOTES If the DEB_BUILD_OPTIONS environment variable contains "nostrip", nothing -will be stripped, in accordance with Debian policy. +will be stripped, in accordance with Debian policy (section 10.1 +"Binaries"). =head1 CONFORMS TO @@ -82,7 +77,9 @@ Debian policy, version 3.0.1 =cut -init(); +init(options => { + "keep-debug" => \$dh{K_FLAG}, +}); # This variable can be used to turn off stripping (see Policy). if (defined $ENV{DEB_BUILD_OPTIONS} && $ENV{DEB_BUILD_OPTIONS} =~ /nostrip/) { @@ -118,7 +115,8 @@ sub testfile { return if $fn=~m/debug\/.*\.so/; # Does its filename look like a shared library? - if (m/.*\.so.*?/) { + # (*.cmxs are OCaml native code shared libraries) + if (m/.*\.(so.*?|cmxs$)/) { # Ok, do the expensive test. my $type=get_file_type($_); if ($type=~m/.*ELF.*shared.*/) { @@ -142,7 +140,7 @@ sub testfile { if (m/lib.*\.a$/ && ! m/.*_g\.a$/) { # Is it a binary file, or something else (maybe a liner # script on Hurd, for example? I don't use file, because - # file returns a varity of things on static libraries. + # file returns a variety of things on static libraries. if (-B $_) { push @static_libs, $fn; return; @@ -154,6 +152,10 @@ sub make_debug { my $file=shift; my $tmp=shift; my $desttmp=shift; + + # 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=$desttmp."/usr/lib/debug/".$base_file; @@ -177,17 +179,21 @@ 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 $keep_debug=$dh{K_FLAG}; my $debugtmp=$tmp; if (! compat(4)) { if (ref $dh{DEBUGPACKAGES}) { $keep_debug=1; # Note that it's only an array for the v4 stuff; # for v5 only one value is used. - $debugtmp=tmpdir(@{$dh{DEBUGPACKAGES}}[0]); + my $debugpackage=@{$dh{DEBUGPACKAGES}}[0]; + if (! grep { $_ eq $debugpackage } getpackages()) { + error("debug package $debugpackage is not listed in the control file"); + } + $debugtmp=tmpdir($debugpackage); } } - else + else { if (ref $dh{DEBUGPACKAGES} && grep { $_ eq $package } @{$dh{DEBUGPACKAGES}}) { $keep_debug=1; $debugtmp=tmpdir($package."-dbg"); @@ -203,14 +209,14 @@ foreach my $package (@{$dh{DOPACKAGES}}) { # *must* inclde the --strip-unneeded. doit("strip","--remove-section=.comment", "--remove-section=.note","--strip-unneeded",$_); - attach_debug($_, $debug_path) if $keep_debug; + attach_debug($_, $debug_path) if defined $debug_path; } 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 + attach_debug($_, $debug_path) if defined $debug_path; } foreach (@static_libs) {