windows-nt/Source/XPSP1/NT/admin/admt/buildtools/getdeps.pl
2020-09-26 16:20:57 +08:00

66 lines
1.9 KiB
Perl

$VCBINDIR = "D:\\DevStudio\\VC\\Bin";
$NONREDIST = "KERNEL32.DLL,GDI32.DLL,ADVAPI32.DLL,RPCRT4.DLL,MPR.DLL,OLE32.DLL,COMCTL32.DLL,USER32.DLL,NETAPI32.DLL,VERSION.DLL,COMDLG32.DLL";
$numfiles = 0;
$usage = 0;
while ($_ = $ARGV[0], /.+/) {
shift;
last if /^--$/;
/^[-|\/][\?|H]/i && ($usage = 1) ||
/^[-|\/]F(.+)/i && ($outputfile = $1) ||
/(.+)/ && ($imagefile[$numfiles++] = $1);
}
($imagefile[0] && !$usage) || die "Usage: GetDeps.pl [-F<Output FileName>] <EXE or DLL image files>\n";
if ( $outputfile ) {
open (OUTFILE, ">$outputfile") || die "Error opening $outputfile: $!\n";
}
for ($index = 0; $index < $numfiles; $index++) {
$nonredist_list = "";
$redist_list = "";
if ( $outputfile ) {
print "$imagefile[$index]\n";
}
open (INPIPE, "$VCBINDIR\\DumpBin.exe /imports $imagefile[$index] |") ||
print "Error running DumpBin.exe on $imagefile[$index]: $!\n" && next;
while (<INPIPE>) {
if ( /^\s+(\w+\.\w+)$/ ) {
$depfile = $1;
if ( $NONREDIST =~ /$depfile/i ) {
if ( $nonredist_list ) {
$nonredist_list = "$nonredist_list, $depfile";
}
else {
$nonredist_list = "$depfile";
}
}
else {
if ( $redist_list ) {
$redist_list = "$redist_list, $depfile";
}
else {
$redist_list = "$depfile";
}
}
}
}
close INPIPE;
if ( $outputfile ) {
print OUTFILE "\nDependencies for $imagefile[$index]:\n";
($nonredist_list) && print OUTFILE "Non-Redistributable: $nonredist_list\n";
($redist_list) && print OUTFILE "Redistributable: $redist_list\n";
}
else {
print "\nDependencies for $imagefile[$index]:\n";
($nonredist_list) && print "Non-Redistributable: $nonredist_list\n";
($redist_list) && print "Redistributable: $redist_list\n";
}
}
exit 0;