Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

213 lines
5.2 KiB

@REM -----------------------------------------------------------------
@REM
@REM spinfs.cmd - JeremyD
@REM Update layout.inf and drvindex.inf for SP skus
@REM
@REM Copyright (c) Microsoft Corporation. All rights reserved.
@REM
@REM -----------------------------------------------------------------
@perl -x "%~f0" %*
@goto :EOF
#!perl
use strict;
use lib $ENV{RAZZLETOOLPATH} . "\\PostBuildScripts";
use lib $ENV{RAZZLETOOLPATH};
use lib $ENV{RAZZLETOOLPATH} . "\\PostBuildScripts\\svcpack";
use PbuildEnv;
use ParseArgs;
use SP;
use Utils;
sub Usage { print<<USAGE; exit(1) }
<<Insert your usage message here>>
USAGE
parseargs('?' => \&Usage);
my $sp_cab_tag = 'SP1';
my $sp_cab_file = 'SP1.cab';
my $cache;
sub is_sp {
my $file = shift;
if (!$cache->{files}) {
my $fh = IO::File->new("$ENV{_NTPOSTBLD}\\SP\\data\\files.txt", 'r');
while (!$fh->eof) {
my $line = $fh->getline;
chomp($line);
my ($cdpath, $filename) = split /\t/, $line;
$cache->{files}{lc $filename} = $cdpath;
}
}
return $cache->{files}{lc $file};
}
sub is_sp_driver {
my $file = shift;
if (!$cache->{drivers}) {
my $fh = IO::File->new("$ENV{_NTPOSTBLD}\\SP\\data\\drivers.txt", 'r');
while (!$fh->eof) {
my $line = $fh->getline;
chomp($line);
$cache->{drivers}{lc $line} = $line;
}
}
return $cache->{drivers}{lc $file};
}
sub update_drvindex {
my $sku = shift;
my @files;
my $drvindex = Utils::inf_file($sku, 'drvindex.inf');
my $spdrvindex = "$ENV{_NTPOSTBLD}\\SP\\$sku\\drvindex.inf";
open FILE, "$drvindex" or die "unable to open $drvindex: $!";
my @input = <FILE>;
close FILE;
open FILE, ">$spdrvindex" or die "unable to open $spdrvindex: $!";
my $read_flag = 0;
for (@input) {
chomp;
if (/^\[driver\]$/i) {
$read_flag = 1;
}
elsif (/^\[cabs\]$/i) {
print FILE "[$sp_cab_tag]\n";
print FILE "$_\n" for @files;
print FILE "\n";
}
elsif (/^\[/) {
$read_flag = 0;
}
else {
if ($read_flag) {
if (is_sp_driver($_)) {
push @files, $_;
next;
}
}
}
s/(CabFiles=)(.*)/$1$sp_cab_tag,$2/i;
print FILE $_, "\n";
}
print FILE "$sp_cab_tag=$sp_cab_file\n";
close FILE;
}
sub update_layout {
my $sku = shift;
my @files;
my $layout = Utils::inf_file($sku, 'layout.inf');
my $splayout = "$ENV{_NTPOSTBLD}\\SP\\$sku\\layout.inf";
open FILE, "$layout" or die "unable to open $layout: $!";
my @input = <FILE>;
close FILE;
open FILE, ">$splayout" or die "unable to open $splayout: $!";
my $read_flag = 0;
for (@input) {
if (/^\[sourcedisksfiles(.*)\]$/i) {
$read_flag = 1;
}
elsif (/^\[/) {
$read_flag = 0;
}
else {
if ($read_flag) {
my ($file) = /^([^\s=]+)/;
if (is_sp($file) or is_sp_driver($file)) {
s/(=\s*)[12],/${1}100,/;
}
}
}
print FILE $_;
}
print FILE "\n[SourceDisksFiles]\nSP1.cab = 100,,22222,,,,_x,39,0,0\n";
close FILE;
}
sub update_dosnet {
my $sku = shift;
my @files;
my $dosnet = Utils::inf_file($sku, 'dosnet.inf');
my $spdosnet = "$ENV{_NTPOSTBLD}\\SP\\$sku\\dosnet.inf";
open FILE, "$dosnet" or die "unable to open $dosnet: $!";
my @input = <FILE>;
close FILE;
open FILE, ">$spdosnet" or die "unable to open $spdosnet: $!";
my $read_flag = 0;
my $spcab_flag = 0;
for (@input) {
print FILE $_;
}
print FILE "\n[Files]\nd1,SP1.cab\n";
close FILE;
}
sub update_txtsetup {
my $sku = shift;
my @files;
my $txtsetup = Utils::inf_file($sku, 'txtsetup.sif');
my $sptxtsetup = "$ENV{_NTPOSTBLD}\\SP\\$sku\\txtsetup.sif";
open FILE, "$txtsetup" or die "unable to open $txtsetup: $!";
my @input = <FILE>;
close FILE;
open FILE, ">$sptxtsetup" or die "unable to open $sptxtsetup: $!";
my $read_flag = 0;
for (@input) {
if (/^\[sourcedisksfiles(.*)\]$/i) {
$read_flag = 1;
}
elsif (/^\[/) {
$read_flag = 0;
}
else {
if ($read_flag) {
my ($file) = /^([^\s=]+)/;
if (is_sp($file) or is_sp_driver($file)) {
s/(=\s*)[12],/${1}100,/;
}
}
}
s/(DriverCabName=.*)/$1,$sp_cab_file/i;
print FILE $_;
if (/driver.cab = 16/) {
print FILE "$sp_cab_file = 16\n";
}
}
print FILE "\n[SourceDisksFiles]\n$sp_cab_file = 100,,22222,,,,_x,39,0,0\n";
close FILE;
}
for my $sku (SP::sp_skus()) {
Utils::mkdir("$ENV{_NTPOSTBLD}\\SP\\$sku");
update_layout($sku);
update_drvindex($sku);
update_dosnet($sku);
update_txtsetup($sku);
}