321 lines
7.3 KiB
Batchfile
321 lines
7.3 KiB
Batchfile
|
@echo off
|
||
|
REM ------------------------------------------------------------------
|
||
|
REM
|
||
|
REM chgsfcinf.cmd
|
||
|
REM Change SFC INF file for system files protection for MUI language neutral
|
||
|
REM resource file
|
||
|
REM
|
||
|
REM Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
REM
|
||
|
REM ------------------------------------------------------------------
|
||
|
perl -x "%~f0" %*
|
||
|
goto :EOF
|
||
|
#!perl
|
||
|
use strict;
|
||
|
use File::Basename;
|
||
|
use IO::File;
|
||
|
|
||
|
use lib $ENV{RAZZLETOOLPATH} . "\\PostBuildScripts";
|
||
|
use lib $ENV{RAZZLETOOLPATH};
|
||
|
use PbuildEnv;
|
||
|
use ParseArgs;
|
||
|
use Logmsg;
|
||
|
use cksku;
|
||
|
require Exporter;
|
||
|
|
||
|
BEGIN {
|
||
|
$ENV{SCRIPT_NAME} = 'chgsfcinf.cmd';
|
||
|
}
|
||
|
|
||
|
sub Usage { print<<USAGE; exit(1) }
|
||
|
cghsfcinf [-p Path_of_SFCGEN.INF ]
|
||
|
|
||
|
|
||
|
USAGE
|
||
|
|
||
|
# Global variables
|
||
|
|
||
|
my ($Neutral_LogDir);
|
||
|
my( $INFPath);
|
||
|
my( $LogFilename );
|
||
|
my( $TempDir );
|
||
|
my( $nttree, $razpath, $TempDir, $fNeedGenerateCMF, $lang);
|
||
|
|
||
|
##################
|
||
|
#
|
||
|
# parse command line
|
||
|
#
|
||
|
##################
|
||
|
parseargs( '?' => \&Usage,
|
||
|
'p:' => \$INFPath,
|
||
|
'l:' => \$lang
|
||
|
);
|
||
|
|
||
|
&Main();
|
||
|
|
||
|
#
|
||
|
# Check if Language Neutral is enabled or not
|
||
|
#
|
||
|
sub IsLGNActivated()
|
||
|
{
|
||
|
my ($MUI_MAGIC, $Result);
|
||
|
|
||
|
$Result = 0;
|
||
|
|
||
|
$MUI_MAGIC= $ENV{ "MUI_MAGIC" };
|
||
|
|
||
|
if ( defined($MUI_MAGIC))
|
||
|
{
|
||
|
$Result=1;
|
||
|
}
|
||
|
return $Result
|
||
|
|
||
|
}
|
||
|
sub IsCMFActivated()
|
||
|
{
|
||
|
my ($MUI_MAGIC_CMF, $Result);
|
||
|
|
||
|
$Result = 0;
|
||
|
|
||
|
$MUI_MAGIC_CMF= $ENV{ "MUI_MAGIC_CMF" };
|
||
|
|
||
|
if ( defined($MUI_MAGIC_CMF))
|
||
|
{
|
||
|
$Result=1;
|
||
|
}
|
||
|
return $Result
|
||
|
}
|
||
|
sub Main
|
||
|
{
|
||
|
|
||
|
# /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
|
||
|
# Begin Main code section
|
||
|
# /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
|
||
|
# Return when you want to exit on error
|
||
|
#
|
||
|
|
||
|
my ($Mylang, $Line, $MyError, $Result,$SectionName);
|
||
|
my( $Sectionname,@ItemsList , @ItemsInSection, $nStart, $nEnd);
|
||
|
my (@MuiWildCardList, $Items_No, $Index, $BackupName, $FileName);
|
||
|
|
||
|
if (! &IsLGNActivated())
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
if ( ! defined($lang))
|
||
|
{
|
||
|
$lang = $ENV{LANG};
|
||
|
if (! defined($lang))
|
||
|
{
|
||
|
$lang="usa";
|
||
|
}
|
||
|
}
|
||
|
$Mylang="\L$lang";
|
||
|
if ( ($Mylang ne "usa" ) && ($Mylang ne "psu" ) )
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
#
|
||
|
# Check If CMF is enabled
|
||
|
#
|
||
|
$fNeedGenerateCMF=&IsCMFActivated();
|
||
|
|
||
|
$nttree = $ENV{ "_NTPostBld" };
|
||
|
$razpath= $ENV{ "RazzleToolPath" };
|
||
|
$TempDir = $ENV{ "TMP" };
|
||
|
|
||
|
|
||
|
|
||
|
$Logmsg::DEBUG = 0; # set to 1 to activate logging of dbgmsg's
|
||
|
$LogFilename = $ENV{ "LOGFILE" };
|
||
|
|
||
|
if ( ! defined( $LogFilename ) )
|
||
|
{
|
||
|
$TempDir = $ENV{ "TMP" };
|
||
|
$LogFilename = "$TempDir\\$0.log";
|
||
|
}
|
||
|
$Neutral_LogDir = $nttree."\\build_logs\\LgNeutral";
|
||
|
|
||
|
$MyError = 0;
|
||
|
#
|
||
|
# Check Language Neutral working directory
|
||
|
#
|
||
|
if ( ! -d $Neutral_LogDir)
|
||
|
{
|
||
|
system( "md $Neutral_LogDir");
|
||
|
}
|
||
|
|
||
|
unless (-d $Neutral_LogDir)
|
||
|
{
|
||
|
errmsg("Fatal: Directory $Neutral_LogDir does not exist");
|
||
|
$MyError=1;
|
||
|
}
|
||
|
#
|
||
|
# Check SFC INF File
|
||
|
#
|
||
|
if (! defined($INFPath))
|
||
|
{
|
||
|
$INFPath = $nttree."\\congeal_scripts\\sfcgen.inf";
|
||
|
}
|
||
|
if (! -e $INFPath)
|
||
|
{
|
||
|
errmsg("Fatal: SFC INF file: $INFPath doesn't exist");
|
||
|
$MyError = 1;
|
||
|
}
|
||
|
if ($MyError != 0 )
|
||
|
{
|
||
|
exit(1);
|
||
|
}
|
||
|
unless ( open(INFILE, $INFPath) )
|
||
|
{
|
||
|
errmsg("Fatal: Can't open $INFPath");
|
||
|
exit(1);
|
||
|
}
|
||
|
@ItemsList =<INFILE>;
|
||
|
close(INFILE);
|
||
|
|
||
|
$SectionName="FILELIST.HEADERFILES";
|
||
|
|
||
|
if (!&ReadSection($SectionName,\@ItemsList,\@ItemsInSection,\$nStart,\$nEnd))
|
||
|
{
|
||
|
errmsg(" Can't Read $SectionName of $INFPath");
|
||
|
exit(1);
|
||
|
}
|
||
|
#
|
||
|
# Check if *.mui/*.cmf in the section
|
||
|
#
|
||
|
if ($fNeedGenerateCMF)
|
||
|
{
|
||
|
@MuiWildCardList=grep /\s*\*\.cmf/i , @ItemsInSection;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
@MuiWildCardList=grep /\s*\*\.mui/i , @ItemsInSection;
|
||
|
}
|
||
|
$Items_No=scalar(@MuiWildCardList);
|
||
|
#
|
||
|
# Do nothing if items already exitsts
|
||
|
#
|
||
|
if ($Items_No != 0)
|
||
|
{
|
||
|
logmsg( " *.MUI/.CMF already in $INFPath, no action needed");
|
||
|
exit(0);
|
||
|
}
|
||
|
#
|
||
|
# Add *.mui to sfcgen.INF
|
||
|
#
|
||
|
|
||
|
# Backup the origional one.
|
||
|
|
||
|
|
||
|
$BackupName = $Neutral_LogDir."sfcgen.inf.bak";
|
||
|
if ( system ("copy/y $INFPath $BackupName") != 0 )
|
||
|
{
|
||
|
#errmsg(" Can't backup $INFPath to $BackupName");
|
||
|
exit(1);
|
||
|
}
|
||
|
# Add the entry
|
||
|
|
||
|
logmsg("INF: $INFPath");
|
||
|
|
||
|
system("attrib -r $INFPath");
|
||
|
#system("del /f $INFPath");
|
||
|
#logmsg("Reset Readonly Mode for $INFPath");
|
||
|
|
||
|
unless ( open(OUTFILE, ">$INFPath") )
|
||
|
{
|
||
|
errmsg(" Can not open output for $INFPath");
|
||
|
exit(1);
|
||
|
}
|
||
|
|
||
|
$Index = -1;
|
||
|
|
||
|
foreach $Line (@ItemsList)
|
||
|
{
|
||
|
chomp($Line);
|
||
|
$Index++;
|
||
|
if ($Index == ($nStart + 1) )
|
||
|
{
|
||
|
if ($fNeedGenerateCMF)
|
||
|
{
|
||
|
print ( OUTFILE "*.cmf\n" );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
print ( OUTFILE "*.mui\n" );
|
||
|
}
|
||
|
}
|
||
|
print (OUTFILE "$Line\n");
|
||
|
}
|
||
|
close (OUTFILE);
|
||
|
|
||
|
logmsg ("add *.mui/.cmf to $INFPath successfully");
|
||
|
|
||
|
|
||
|
# /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
|
||
|
# End Main code section
|
||
|
# /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
|
||
|
}
|
||
|
|
||
|
sub ReadSection
|
||
|
{
|
||
|
|
||
|
my ($Section, $pItemsList, $pItemsInSection, $pnStart, $pnEnd) = @_;
|
||
|
my ($Index, $SectionStart, $SectionEnd, $Line, $Line_Org, $ReadFlag, $Result);
|
||
|
|
||
|
$ReadFlag = "FALSE";
|
||
|
$Index= -1;
|
||
|
$SectionStart = -1;
|
||
|
$SectionEnd = -1;
|
||
|
$Result = 0;
|
||
|
|
||
|
#
|
||
|
# Read The section
|
||
|
#
|
||
|
foreach $Line_Org (@$pItemsList)
|
||
|
{
|
||
|
$Line = $Line_Org;
|
||
|
chomp($Line);
|
||
|
$Index++;
|
||
|
if ( (length($Line) == 0) || (substr($Line,0,1) eq ";") || (substr($Line,0,1) eq "#") )
|
||
|
{
|
||
|
if ( $ReadFlag eq "TRUE" )
|
||
|
{
|
||
|
push (@$pItemsInSection, $Line_Org);
|
||
|
}
|
||
|
next;
|
||
|
}
|
||
|
if ( $Line =~ /^\[/ )
|
||
|
{
|
||
|
$ReadFlag = "FALSE";
|
||
|
if ( $SectionStart != -1)
|
||
|
{
|
||
|
$SectionEnd = $Index-1;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
if ( $Line =~ /^\[$Section\]/ ) # pattern in $Section !!!
|
||
|
{
|
||
|
logmsg("Section Found");
|
||
|
$ReadFlag = "TRUE";
|
||
|
$SectionStart=$Index;
|
||
|
}
|
||
|
if ($ReadFlag eq "TRUE")
|
||
|
{
|
||
|
push(@$pItemsInSection, $Line_Org);
|
||
|
}
|
||
|
}
|
||
|
if ( $SectionStart != -1)
|
||
|
{
|
||
|
if ( $SectionEnd == -1)
|
||
|
{
|
||
|
$SectionEnd = $Index;
|
||
|
}
|
||
|
$Result = 1;
|
||
|
$$pnStart = $SectionStart;
|
||
|
$$pnEnd = $SectionEnd;
|
||
|
}
|
||
|
return $Result;
|
||
|
}
|
||
|
|