diff options
Diffstat (limited to 'winsup/cygwin/speclib')
-rwxr-xr-x | winsup/cygwin/speclib | 78 |
1 files changed, 0 insertions, 78 deletions
diff --git a/winsup/cygwin/speclib b/winsup/cygwin/speclib deleted file mode 100755 index 10218d876..000000000 --- a/winsup/cygwin/speclib +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/perl -use Getopt::Long; -use File::Temp qw'tempdir'; -use File::Basename; -use File::Spec; -use strict; - -sub dllname($;$); - -my $static; -my $inverse; -my @exclude; - -my ($ar, $as, $nm, $objcopy); -GetOptions('exclude=s'=>\@exclude, 'static!'=>\$static, 'v!'=>\$inverse, - 'ar=s'=>\$ar, 'as=s'=>\$as,'nm=s'=>\$nm, 'objcopy=s'=>\$objcopy); - -$_ = File::Spec->rel2abs($_) for @ARGV; - -my $libdll = shift; -my $lib = pop; -(my $iname = basename $lib) =~ s/\.a$//o; -$iname = '_' . $iname . '_dll_iname'; - -open my $nm_fd, '-|', $nm, '-Apg', '--defined-only', @ARGV, $libdll or - die "$0: execution of $nm for object files failed - $!\n"; - -my %match_syms = (); -my $symfiles = (); -my $lastfn; -my %extract = (); -my $exclude_regex = @exclude ? join('|', @exclude) : '\\UnLiKeLy//'; -$exclude_regex = qr/$exclude_regex/; -my $dllname; -while (<$nm_fd>) { - study; - if (/ I _(.*)_dll_iname/o) { - $dllname ||= $1; - } else { - my ($file, $member, $symbol) = m%^([^:]*):([^:]*(?=:))?.* T (.*)%o; - next if !defined($symbol) || $symbol =~ $exclude_regex; - if ($file ne $libdll) { - $match_syms{$symbol} = 1; - } elsif ($match_syms{$symbol} ? !$inverse : $inverse) { - $extract{$member} = 1; - } - } -} -close $nm_fd; - - -%extract or die "$0: couldn't find symbols for $lib\n"; - -my $dir = tempdir(CLEANUP => 1); - -chdir $dir; -# print join(' ', '+', $ar, 'x', sort keys %extract), "\n"; -my $res = system $ar, 'x', $libdll, sort keys %extract; -die "$0: $ar extraction exited with non-zero status\n" if $res; -unlink $lib; - -# Add a dummy .idata object for libtool so that it will think -# this library is an import library. -my $iname_o = 'd000000.o'; -$extract{$iname_o} = 1; -open my $as_fd, '|-', $as, '-R', '-o', $iname_o, "-"; -print $as_fd <<EOF; - .section .idata\$7 -.global $iname -$iname: .asciz "$dllname.dll" -EOF -close $as_fd or exit 1; -system $objcopy, '-j', '.idata$7', $iname_o; - -$res = system $ar, 'crus', $lib, sort keys %extract; -unlink keys %extract; -die "$0: ar creation of $lib exited with non-zero status\n" if $res; -exit 0; |