]> git.donarmstrong.com Git - debhelper.git/blobdiff - dh_strip
r538: * Make dh_installchangelogs install debian/NEWS files as well, as
[debhelper.git] / dh_strip
index 86304f40391246ed414fa0ef89ff878857f7c3b5..31d51aff3527ffe39d5d2ae8375e925d6b1f5023 100755 (executable)
--- a/dh_strip
+++ b/dh_strip
@@ -1,10 +1,51 @@
 #!/usr/bin/perl -w
-#
-# Strip files.
+
+=head1 NAME
+
+dh_strip - strip executables, shared libraries, and some static libraries
+
+=cut
 
 use strict;
 use File::Find;
 use Debian::Debhelper::Dh_Lib;
+
+=head1 SYNOPSIS
+
+B<dh_strip> [S<I<debhelper options>>] [B<-X>I<item>]
+
+=head1 DESCRIPTION
+
+dh_strip is a debhelper program that is responsible for stripping
+executables, shared libraries, and static libraries that are not used for
+debugging.
+
+It assumes that files that have names like lib*_g.a are static libraries
+used in debugging, and will not strip them.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-X>I<item>, B<--exclude=>I<item>
+
+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.
+
+=back
+
+=head1 NOTES
+
+If the DEB_BUILD_OPTIONS environment variable contains "nostrip", nothing
+will be stripped, in accordance with Debian policy.
+
+=head1 CONFORMS TO
+
+Debian policy, version 3.0.1
+
+=cut
+
 init();
 
 # This variable can be used to turn off stripping (see Policy).
@@ -12,6 +53,17 @@ if (defined $ENV{DEB_BUILD_OPTIONS} && $ENV{DEB_BUILD_OPTIONS} =~ /nostrip/) {
        exit;
 }
 
+# I could just use `file $_[0]`, but this is safer
+sub get_file_type {
+       my $file=shift;
+       open (FILE, '-|') # handle all filenames safely
+               || exec('file', $file)
+               || die "can't exec file: $!";
+       my $type=<FILE>;
+       close FILE;
+       return $type;
+}
+
 # Check if a file is an elf binary, shared library, or static library,
 # for use by File::Find. It'll fill the following 3 arrays with anything
 # it finds:
@@ -29,7 +81,7 @@ sub testfile {
        # Does its filename look like a shared library?
        if (m/.*\.so.*?/) {
                # Ok, do the expensive test.
-               my $type=`file $_`;
+               my $type=get_file_type($_);
                if ($type=~m/.*ELF.*shared.*/) {
                        push @shared_libs, $fn;
                        return;
@@ -40,15 +92,15 @@ sub testfile {
        my (undef,undef,$mode,undef)=stat(_);
        if ($mode & 0111) {
                # Ok, expensive test.
-               my $type=`file $_`;
-               if ($type=~m/.*ELF.*executable.*/) {
+               my $type=get_file_type($_);
+               if ($type=~m/.*ELF.*(executable|shared).*/) {
                        push @executables, $fn;
                        return;
                }
        }
        
        # Is it a static library, and not a debug library?
-       if (m/lib.*\.a/ && ! m/.*_g\.a/) {
+       if (m/lib.*\.a$/ && ! m/.*_g\.a$/) {
                push @static_libs, $fn;
                return;
        }
@@ -57,7 +109,6 @@ sub testfile {
 foreach my $package (@{$dh{DOPACKAGES}}) {
        my $tmp=tmpdir($package);
 
-       my (@shared_libs, @executables, @static_libs);
        find(\&testfile,$tmp);
 
        foreach (@shared_libs) {
@@ -76,3 +127,15 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
                doit("strip","--strip-debug",$_);
        }
 }
+
+=head1 SEE ALSO
+
+L<debhelper(1)>
+
+This program is a part of debhelper.
+
+=head1 AUTHOR
+
+Joey Hess <joeyh@debian.org>
+
+=cut