windows-nt/Source/XPSP1/NT/tools/postbuildscripts/drvmk.pl
2020-09-26 16:20:57 +08:00

142 lines
2.9 KiB
Perl

#
# Get arguments
#
use lib $ENV{RAZZLETOOLPATH};
use Logmsg;
$i=0;
for (@ARGV) {
if (/^[-\/]fl:(.*)$/i) { $flist = $1; next; }
if (/^[-\/]mk:(.*)$/i) { $mkfil = $1; next; }
if (/^[-\/]cmd1:(.*)$/i) { $cmd1 = $1; next; }
if (/^[-\/]path:(.*)$/i) { $path = $1; next; }
if (/^[-\/]relpath:(.*)$/i) { push( @relpaths, $1); next; }
if (/^[-\/]t:(.*)$/i) { $tempdir = $1; next; }
}
#print "$mkfil\n";
# Cleanup any turd temporary files
system "del /f $tempdir\\ansitmp >nul 2>nul";
$mkerr = open MKFIL, ">$mkfil";
$flerr = open FLIST, ">$flist";
if( $mkerr == 0 ){
errmsg ("Error - Could not open $mkfil for writing\n");
exit( 1 );
}
if( $flerr == 0 ){
errmsg ("Error - Could not open $flist for writing\n");
exit( 1 );
}
# Write the rule
print MKFIL "make_drv:drvindex\.gen\n\n\n";
# Write the dependencies
print MKFIL "drvindex\.gen:";
#while (<FLIST>) {
# y/\n/ /;
# print MKFIL " \\\n\t$_";
#}
# For loop to iterate throught the files
push @relpaths, "";
for( $i=0; $i <= $#relpaths; $i++ ) {
#print "$i $relpaths[$i]\n";
push @srcpaths, ($path."\\".$relpaths[$i]);
}
#print @srcpaths;
# Iterate through directories
for( $i=0; $i <= $#srcpaths; $i++ ) {
#print "$i $srcpaths[$i]\n";
$dir = $srcpaths[$i];
if (!opendir CURDIR, $dir){
errmsg ("Error - Could not open $dir\n");
close MKFIL;
close FLIST;
exit( 1 );
}
while (($curfile = readdir CURDIR) ne "" ) {
# Look for INFs
if ($curfile =~ /.*\.inf/i) {
#print "$dir\\$curfile\n";
if( $curfile =~ /layout.inf/i){
# Special case files to let in
;
}else{
#Take care of UNICODE
system "unitext -u -z $dir\\$curfile $tempdir\\ansitmp >nul";
$inffileerr=open FILE, "$tempdir\\ansitmp";
#if this was ANSI ....
if( $inffileerr == 0 ){
$inffileerr=open FILE, "$dir\\$curfile";
}
if( $inffileerr == 0 ){
errmsg ("Error - Could not open $dir\\$curfile for reading\n");
exit( 1 );
}
$matched_lines = grep { /ClassGUID(\s*)=(\s*){.*}/i and !/ClassGUID(\s*)=(\s*){00000000-0000-0000-0000-000000000000}/i } <FILE>;
# print "$dir\\$curfile ---- $matched_lines\n";
close FILE;
system "del /f $tempdir\\ansitmp >nul 2>nul";
if($matched_lines < 1){
# print "Skipping $dir\\$curfile\n";
next;
}
}
# At this point we know the file is a PNP inf.
print MKFIL " \\\n\t$relpaths[$i]$curfile";
print FLIST "$dir\\$curfile, $relpaths[$i]$curfile\n";
}
}
closedir CURDIR;
}
print MKFIL "\n\t$cmd1";
print MKFIL "\n\n";
close MKFIL;
close FLIST;
exit( 0 );