windows-nt/Source/XPSP1/NT/admin/darwin/data/sdk/sdkplace.pl
2020-09-26 16:20:57 +08:00

126 lines
4 KiB
Perl

###################################################
# See layout.txt for explanation of what this does.
###################################################
open(hLAYOUT, $ARGV[0]) || die "Can't open $ARGV[0]";
open(hPLACEFIL, ">placefil.txt") || die "Can't open placefil.txt";
open(hMAKE, ">layout.inc") || die "Can't open layout.inc";
open(hPOSTMAKE, ">sdkmake.inc") || die "Can't open sdkmake.inc";
print(hPLACEFIL "# --------- DO NOT EDIT THIS FILE ------------ DO NOT EDIT THIS FILE ---------\n");
print(hPLACEFIL "# --------- DO NOT EDIT --- see layout.txt --- DO NOT EDIT -------------------\n");
print(hPLACEFIL "# --------- DO NOT EDIT THIS FILE ------------ DO NOT EDIT THIS FILE ---------\n");
print(hMAKE "# --------- DO NOT EDIT THIS FILE ------------ DO NOT EDIT THIS FILE ---------\n");
print(hMAKE "# --------- DO NOT EDIT --- see layout.txt --- DO NOT EDIT -------------------\n");
print(hMAKE "# --------- DO NOT EDIT THIS FILE ------------ DO NOT EDIT THIS FILE ---------\n");
print(hLAYOUT "# --------- DO NOT EDIT THIS FILE ------------ DO NOT EDIT THIS FILE ---------\n");
print(hLAYOUT "# --------- DO NOT EDIT --- see layout.txt --- DO NOT EDIT -------------------\n");
print(hLAYOUT "# --------- DO NOT EDIT THIS FILE ------------ DO NOT EDIT THIS FILE ---------\n");
while($_ = <hLAYOUT>) {
if (/^[ \t]*REM/i) {
s/-+//g;
print $_;
}
elsif (/^[ \t]*$/) {
}
else {
$DUPEFILE="";
if (/^[0-9]/)
{
$DUPEFILE=substr($_,0,1);
print "Creating special rules for same-name file ($DUPEFILE) in multiple locations.\n";
s/^.//;
}
$PLACEFILE=$_;
$SOURCE=$_;
$PLACEFILE =~ s/.*[ \t]+//;
$PLACEFILE =~ s/\\$//;
$PLACEFILE =~ s/\n//;
$PLACEFILE =~ s/^.$//;
$_ = $PLACEFILE;
if (!(/^retail$/i)) {
if (/^$/) {
$PLACEFILE =~ s/^/sdk/;
}
else {
$PLACEFILE =~ s/^/sdk\\/ ;
}
}
$SOURCE =~ s/[ \t]+.*\n//;
# replace environment variable syntax with makefile. %var% -> $(var)
$SOURCEMAKE = $SOURCEENV = $SOURCE;
$SOURCEMAKE =~ s/%([_A-Z-]+)%/\$($1)/gi;
#print SOURCE."\=".$SOURCE."\n";
#print PLACEFILE."\=".$PLACEFILE."\n";
#print "\n";
print "Source: $SOURCEENV\n";
open(FILELIST, "dir /on /b $SOURCEENV|");
$ONCE = 0;
while (($FILENAME = <FILELIST>) || !$ONCE) {
if (! $ONCE)
{
$ONCE = 1;
#
# We need to handle lines in layout.txt that have wildcard characters in them. e.g. ActionTe.*, Error.*
# In order to do that, we need to extract the dir for the files. This needs to be done only once for each
# line because the dir will be the same for all the files that match the wildcard character. Then all we
# need to do during each iteration of the loop is tag on the name of the file to the end of the dir.
#
$SOURCEDIR = $SOURCEMAKE;
$SOURCEDIR =~ s/[^\\]+$//;
}
$_ = $FILENAME =~ s/\n$//;
if (/^$/)
{
print "File has not been built yet.\n";
$FILENAME = $SOURCEMAKE;
$FILENAME =~ s/.+\\//g;
}
#
# Append the filename to the dir to get the fullpath to the file.
#
$SOURCEMAKE = $SOURCEDIR.$FILENAME;
$POSTMAKE=0;
$_ = $SOURCEMAKE;
if (/_NTTREE/i | /_NTPOSTBLD/i) {
$SOURCEMAKE =~ s/_NTTREE/_NTPOSTBLD/i;
$POSTDEPENDENCY ="$POSTDEPENDENCY $PLACEFILE\\$FILENAME$DUPEFILE";
print(hPOSTMAKE "$PLACEFILE\\$FILENAME$DUPEFILE : \n\tif not exist $PLACEFILE md $PLACEFILE\n\tcopy $SOURCEMAKE \$@\n");
$POSTMAKE=1;
}
else {
$DEPENDENCY ="$DEPENDENCY \$(O)\\$FILENAME$DUPEFILE";
print(hMAKE "\$(O)\\$FILENAME$DUPEFILE : $SOURCEMAKE\n\tcopy $SOURCEMAKE \$@\n\t\$(BINPLACE_CMD)\n");
print(hPLACEFIL "$FILENAME$DUPEFILE $DUPEFILE$PLACEFILE\n");
}
if ($DUPEFILE) {
print(hPOSTMAKE "$PLACEFILE\\$FILENAME : $DUPEFILE$PLACEFILE\\$FILENAME$DUPEFILE\n\tif not exist $PLACEFILE md $PLACEFILE\n\tcopy $DUPEFILE$PLACEFILE\\$FILENAME$DUPEFILE \$@\n");
$POSTDEPENDENCY = "$POSTDEPENDENCY $PLACEFILE\\$FILENAME"
}
print $FILENAME."\n";
}
close FILELIST;
}
}
print(hPOSTMAKE "sdklayout : $POSTDEPENDENCY\n");
print(hMAKE "layout : $DEPENDENCY\n");
close hMAKE;
close hPOSTMAKE;
close hLAYOUT;