]> git.donarmstrong.com Git - debhelper.git/blobdiff - dh_strip
Fix build system auto-selection breakage.
[debhelper.git] / dh_strip
index dd21a8ca6fe5ee578f9ca713e15ae9c10255164a..0da2e1e772446a32cdbe818ddb10773b6819c2df 100755 (executable)
--- 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) {