|
|
package GetIniSetting;
# # GetIniSetting.pm # # Just a utility to read the main.usa.ini file (or whatever branch / lang) # and return the requested information. # # Version 1.0 MikeCarl 07/21/00 Write initial module #
use strict; use lib $ENV{ "RazzleToolPath" }; use lib $ENV{ "RazzleToolPath" } . "\\PostBuildScripts"; use Logmsg;
# # CheckIniFile # # Arguments: none # # Purpose: validates existence of the appropriate ini file # # Returns: true if found, undef otherwise # sub CheckIniFile {
# declare locals my( $BranchName, $Language );
$BranchName = $ENV{ "_BuildBranch" }; $Language = $ENV{ "lang" };
return &CheckIniFileEx( $BranchName, $Language );
}
# # CheckIniFileEx # # Arguments: $BranchName, $Language # # Purpose: validates existence of the appropriate ini file using branch and # language as passed # # Returns: true if found, undef otherwise # sub CheckIniFileEx {
# get passed args my( $BranchName, $Language ) = @_;
# declare locals my( $IniFileName );
$IniFileName = $ENV{ "RazzleToolPath" } . "\\PostBuildScripts\\" . "$BranchName.$Language.ini";
if ( ! -e $IniFileName ) { logmsg( "Ini file $IniFileName not found ..." ); return; }
logmsg( "Ini file $IniFileName found ..." );
return 1;
}
# # CheckIniFileQuietEx # # Arguments: $BranchName, $Language # # Purpose: validates existence of the appropriate ini file using branch and # language as passed. the difference between this and CheckIniFileEx # is that we do not log to screen or log file. # # Returns: true if found, undef otherwise # sub CheckIniFileQuietEx {
# get passed args my( $BranchName, $Language ) = @_;
# declare locals my( $IniFileName );
$IniFileName = $ENV{ "RazzleToolPath" } . "\\PostBuildScripts\\" . "$BranchName.$Language.ini";
if ( ! -e $IniFileName ) { return; }
return 1;
}
# # GetSetting # # Arguments: @FieldNames # # Purpose: reads the given field name from the appropriate branch / lang ini # file. this file is determined through the _BuildBranch and lang # environment variables. the FieldNames array holds the field and # subfields to be matched, i.e. ( 'ReleaseServers', 'X86FRE' ) # # Returns: $FieldValue or undef # sub GetSetting {
# get passed args my( @FieldNames ) = @_;
# declare locals my( $BranchName, $Language );
# set up ini file name $BranchName = $ENV{ "_BuildBranch" }; $Language = $ENV{ "lang" };
# call GetSettingEx with the newly gotten parameters return &GetSettingEx( $BranchName, $Language, @FieldNames );
}
# # GetSettingQuietEx # # Arguments: @FieldNames, $BranchName, $Language # # Purpose: reads the given field name from the appropriate branch / lang ini # file. # # Returns: $FieldValue or undef # sub GetSettingQuietEx {
# get passed args my( $BranchName, $Language, @FieldNames ) = @_;
# declare locals my( $IniFileName );
$IniFileName = $ENV{ "RazzleToolPath" } . "\\PostBuildScripts\\" . "$BranchName.$Language.ini";
# check variables if ( !$BranchName || !$Language || ( ! -e $IniFileName ) ) { # error, don't log as we're quiet return; }
ParseFileQuiet( $BranchName, $Language, $IniFileName, @FieldNames );
}
sub ParseFileQuiet {
# get passed args my( $BranchName, $Language, $IniFileName, @FieldNames ) = @_;
# declare locals my( @IniFileLines, $Line ); my( $ThisField, $ThisValue ); my( $Item, $LongFieldName );
# get the field names foreach $Item ( @FieldNames ) { if ( $LongFieldName ) { $LongFieldName .= "::$Item"; } else { $LongFieldName = $Item; } }
# open and read the file unless ( open( INFILE, $IniFileName ) ) { # error, don't log as we're quiet return; } @IniFileLines = <INFILE>; close( INFILE );
# parse file for the requested field foreach $Line ( @IniFileLines ) { # remove \n and any trailing whitespace $Line =~ s/\s+$//; if ( $Line =~ /^\;/ ) { next; } # # now we want to see if there is #include statement, and if so # begin reading the other file # if ( $Line =~ /^\#include/i ) { # get the name of the file to include. by definition, it must be # in postbuildscripts also my( $Junk, $IncludeFile ); ( $Junk, $IncludeFile ) = split( /\s+/, $Line, 2 ); $IncludeFile = $ENV{ "RazzleToolPath" } . "\\PostBuildScripts\\" . $IncludeFile; # print( "Include file is \'$IncludeFile\'\n" ); my( $ReturnValue ) = &ParseFileQuiet( $BranchName, $Language, $IncludeFile, @FieldNames ); if ( $ReturnValue ) { return( $ReturnValue ); } # if we're here, we didn't find the field in the included file next; } ( $ThisField, $ThisValue ) = split( /\=/, $Line, 2 ); # check if this is the requested field if ( defined $ThisField && $ThisField =~ /^\Q$LongFieldName\E$/i ) { # if so, return the associated value # dbgmsg( "Found value $ThisValue for field $ThisField" ); return( $ThisValue ); } }
# we didn't find the requested field # note that we don't want to log an error here, caller can deal with that return;
}
# # GetSettingEx # # Arguments: @FieldNames, $BranchName, $Language # # Purpose: reads the given field name from the appropriate branch / lang ini # file. # # Returns: $FieldValue or undef # sub GetSettingEx {
# get passed args my( $BranchName, $Language, @FieldNames ) = @_;
# declare locals my( $IniFileName );
$IniFileName = $ENV{ "RazzleToolPath" } . "\\PostBuildScripts\\" . "$BranchName.$Language.ini";
# check variables if ( !$BranchName || !$Language || ( ! -e $IniFileName ) ) { errmsg( "Failed to see ini file $IniFileName ..." ); return; }
ParseFile( $BranchName, $Language, $IniFileName, @FieldNames );
}
sub ParseFile {
# get passed args my( $BranchName, $Language, $IniFileName, @FieldNames ) = @_;
# declare locals my( @IniFileLines, $Line ); my( $ThisField, $ThisValue ); my( $Item, $LongFieldName );
# get the field names foreach $Item ( @FieldNames ) { if ( $LongFieldName ) { $LongFieldName .= "::$Item"; } else { $LongFieldName = $Item; } }
# open and read the file unless ( open( INFILE, $IniFileName ) ) { errmsg( "Failed to open ini file $IniFileName for read ..." ); return; } @IniFileLines = <INFILE>; close( INFILE );
# parse file for the requested field foreach $Line ( @IniFileLines ) { # remove \n and any trailing whitespace $Line =~ s/\s+$//; if ( $Line =~ /^\;/ ) { next; } # # now we want to see if there is #include statement, and if so # begin reading the other file # if ( $Line =~ /^\#include/i ) { # get the name of the file to include. by definition, it must be # in postbuildscripts also my( $Junk, $IncludeFile ); ( $Junk, $IncludeFile ) = split( /\s+/, $Line, 2 ); $IncludeFile = $ENV{ "RazzleToolPath" } . "\\PostBuildScripts\\" . $IncludeFile; # print( "Include file is \'$IncludeFile\'\n" ); my( $ReturnValue ) = &ParseFileQuiet( $BranchName, $Language, $IncludeFile, @FieldNames ); if ( $ReturnValue ) { return( $ReturnValue ); } # if we're here, we didn't find the field in the included file next; } ( $ThisField, $ThisValue ) = split( /\=/, $Line, 2 ); # check if this is the requested field if ( $ThisField =~ /^\Q$LongFieldName\E$/i ) { # if so, return the associated value dbgmsg( "Found value $ThisValue for field $ThisField" ); return( $ThisValue ); } }
# we didn't find the requested field # note that we don't want to log an error here, caller can deal with that return;
}
1;
|