]> git.donarmstrong.com Git - debhelper.git/blobdiff - dh_strip
Merge branch 'dh_overrides'
[debhelper.git] / dh_strip
index ef91d65139abaaea6841ce88021502f71bfa7749..2c667bb74bbc9a93e6cfd03ea5ddc597b3254405 100755 (executable)
--- a/dh_strip
+++ b/dh_strip
@@ -77,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/) {
@@ -149,6 +151,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;
@@ -156,9 +162,7 @@ sub make_debug {
        if (! -d $debug_dir) {
                doit("install", "-d", $debug_dir);
        }
-       if (! -e $debug_path) {
-               doit("objcopy", "--only-keep-debug", $file, $debug_path);
-       }
+       doit("objcopy", "--only-keep-debug", $file, $debug_path);
        # No reason for this to be executable.
        doit("chmod", 644, $debug_path);
        return $debug_path;
@@ -174,14 +178,18 @@ 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 {
@@ -200,14 +208,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) {