In addition to building libasn1 as a DLL also add a build target so that a list of exports can be generated and used to check with the .def file whether any exports are being left out.
78 lines
1.4 KiB
Perl
78 lines
1.4 KiB
Perl
my $show_module_name = 1;
|
|
my $use_indent = 1;
|
|
my $strip_leading_underscore = 0;
|
|
|
|
# Dump all symbols for the given object file that are defined and have
|
|
# external scope.
|
|
|
|
sub dump_symbols_for_file($)
|
|
{
|
|
$fn = shift;
|
|
|
|
print STDERR "Opening dump of object [$fn]\n";
|
|
|
|
open(SP, '-|', "dumpbin /symbols \"".$fn."\"") or die "Can't open pipe for $fn";
|
|
|
|
LINE:
|
|
while (<SP>) {
|
|
# 008 00000000 SECT3 notype () External | _encode_AccessDescription
|
|
|
|
/^[[:xdigit:]]{3,}\s[[:xdigit:]]{8,}\s(\w+)\s+\w*\s+\(\)\s+(\w+)\s+\|\s+(\w+)$/ && do {
|
|
my ($section, $visibility, $symbol) = ($1, $2, $3);
|
|
|
|
if ($section ne "UNDEF" && $visibility eq "External") {
|
|
print $fn if $show_module_name;
|
|
print "\t" if $use_indent || $show_module_name;
|
|
|
|
if ($strip_leading_underscore && $symbol =~ /_(.*)/) {
|
|
$symbol = $1;
|
|
}
|
|
print $symbol;
|
|
print "\n";
|
|
}
|
|
};
|
|
}
|
|
|
|
close SP;
|
|
}
|
|
|
|
sub use_response_file($)
|
|
{
|
|
$fn = shift;
|
|
|
|
open (RF, '<', $fn) or die "Can't open response file $fn";
|
|
|
|
while (<RF>) {
|
|
/(\S+)/ && do {
|
|
dump_symbols_for_file($1);
|
|
}
|
|
}
|
|
close RF;
|
|
}
|
|
|
|
for (@ARGV) {
|
|
ARG: {
|
|
/-q/ && do {
|
|
$show_module_name = 0;
|
|
last ARG;
|
|
};
|
|
|
|
/-1/ && do {
|
|
$use_indent = 0;
|
|
last ARG;
|
|
};
|
|
|
|
/-u/ && do {
|
|
$strip_leading_underscore = 1;
|
|
last ARG;
|
|
};
|
|
|
|
/@(.*)/ && do {
|
|
use_response_file($1);
|
|
last ARG;
|
|
};
|
|
|
|
dump_symbols_for_file($_);
|
|
}
|
|
}
|