aboutsummaryrefslogtreecommitdiffstats
path: root/strip_and_check_elf_files
diff options
context:
space:
mode:
authorPer Øyvind Karlsen <peroyvind@mandriva.org>2010-03-05 12:59:47 +0000
committerPer Øyvind Karlsen <peroyvind@mandriva.org>2010-03-05 12:59:47 +0000
commit779d3547b45cc562f9ff33704f29b622f29a0227 (patch)
treefd2b8e7418f0c24a7116726a942fcbfb10f8c398 /strip_and_check_elf_files
parent9531195c133a9e5af376a5101706c67f05a6b95f (diff)
downloadspec-helper-779d3547b45cc562f9ff33704f29b622f29a0227.tar
spec-helper-779d3547b45cc562f9ff33704f29b622f29a0227.tar.gz
spec-helper-779d3547b45cc562f9ff33704f29b622f29a0227.tar.bz2
spec-helper-779d3547b45cc562f9ff33704f29b622f29a0227.tar.xz
spec-helper-779d3547b45cc562f9ff33704f29b622f29a0227.zip
don't duplicate stripping behaviour which is already done in find-debuginfo.sh
Diffstat (limited to 'strip_and_check_elf_files')
-rwxr-xr-xstrip_and_check_elf_files103
1 files changed, 0 insertions, 103 deletions
diff --git a/strip_and_check_elf_files b/strip_and_check_elf_files
deleted file mode 100755
index 5f7e84d..0000000
--- a/strip_and_check_elf_files
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/usr/bin/perl
-# $Id$
-# Strip files
-
-use strict;
-use warnings;
-use File::Find;
-use File::Basename;
-
-my $buildroot = $ENV{RPM_BUILD_ROOT};
-die "No build root defined" unless $buildroot;
-die "Invalid build root" unless -d $buildroot;
-# normalize build root
-$buildroot =~ s|/$||;
-
-# set LIBRARY_PATH to check libraries in build root
-my $lib = `rpm --eval %_lib`;
-chomp $lib;
-$ENV{LD_LIBRARY_PATH}="$buildroot/$lib:$buildroot/usr/$lib";
-
-my (@shared_libs, @executables, @static_libs);
-find(\&keep_wanted, $buildroot);
-
-strip_files() if !$ENV{DONT_STRIP};
-check_missing_or_unused_libs();
-
-sub strip_files {
- my @to_strip = (@shared_libs, @executables);
-
- if ($ENV{EXCLUDE_FROM_STRIP}) {
- my $exclude_pattern = join('|', split(/\s+/, $ENV{EXCLUDE_FROM_STRIP}));
- my $compiled_pattern = qr/($exclude_pattern)/;
- @to_strip = grep { !/$compiled_pattern/ } @to_strip;
- }
-
- system(
- "strip",
- "--remove-section=.comment",
- "--remove-section=.note",
- $_) foreach @to_strip;
-}
-
-sub check_missing_or_unused_libs {
- my $shift = length($buildroot);
- foreach my $file (@shared_libs, @executables) {
- my (undef, undef, @l) = `ldd -u -r $file 2>/dev/null`;
- next unless @l;
- my $file_ = substr($file, $shift);
- print STDERR
- "Warning: unused libraries in $file_: ",
- join(' ', map { basename($_) } @l), "\n";
- }
- foreach my $file (@shared_libs) {
- my @l = `ldd -r $file 2>&1 >/dev/null`;
- next unless @l;
- my $file_ = substr($file, $shift);
- print STDERR
- "Warning: undefined symbols in $file_: ",
- join(' ', map { /undefined symbol: (\S+)/ ? $1 : () } @l), "\n";
- }
-}
-
-# TODO: we should write a binding for libfile...
-sub expensive_test {
- my ($file) = @_;
- my $type = `file -- $file`;
-}
-
-# 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:
-sub keep_wanted() {
- # skip everything but files
- return unless -f $_;
- # skip symlinks
- return if -l $_;
- return if $File::Find::dir =~ m!/usr/lib/debug($|/)!;
-
- # Does its filename look like a shared library?
- if (m/\.so/) {
- # Ok, do the expensive test.
- if (expensive_test($_) =~ m/ELF.*shared/) {
- push @shared_libs, $File::Find::name;
- return;
- }
- }
-
- # Is it executable? -x isn't good enough, so we need to use stat.
- my (undef, undef, $mode, undef) = stat(_);
- if ($mode & 0111) {
- # Ok, expensive test.
- if (expensive_test($_) =~ m/ELF.*executable/) {
- push @executables, $File::Find::name;
- return;
- }
- }
-
- # Is it a static library, and not a debug library?
- if (m/lib.*\.a/ && ! m/_g\.a/) {
- push @static_libs, $File::Find::name;
- return;
- }
-}