Windows-Server-2003/tools/cksku.pm

224 lines
5.6 KiB
Perl
Raw Normal View History

2024-08-04 01:28:15 +02:00
#-----------------------------------------------------------------//
# Script: cksku.pm
#
# (c) 2000 Microsoft Corporation. All rights reserved.
#
# Purpose: This script Checks if the given SKU is valid for the given
# language and architechture per %RazzleToolPath%\\codes.txt
# and prodskus.txt.
#
# Version: <1.00> 06/28/2000 : Suemiao Rossognol
#-----------------------------------------------------------------//
###-----Set current script Name/Version.----------------//
package cksku;
$VERSION = '1.00';
###-----Require section and extern modual.---------------//
require 5.003;
use strict;
use lib $ENV{ "RazzleToolPath" };
use lib $ENV{ "RazzleToolPath" }."\\PostBuildScripts";
no strict 'vars';
no strict 'subs';
no strict 'refs';
use GetParams;
use Logmsg;
use ParseTable;
use cklang;
###-----Fields function.----------------------------------//
sub Fields{
my ( $pLang, $pArch, $pSku ) = @_;
my %skus = &cksku::GetSkus(uc($lang), lc($arch));
join(" ", keys(%skus));
}
###-----CkSku function.------------------------------------//
### Return value:
### 1 = SKU verifies ok
### 0 = SKU does not verify
sub CkSku
{
my ( $pSku, $pLang, $pArch ) = @_;
$pSku = lc( $pSku );
my %validSkus = &GetSkus( $pLang, $pArch );
if ($pSku =~ /\;/) {
my @sku = split/\;/,$pSku;
# Returning false if even 1 of the given skus is not valid
foreach (@sku) {
return 0 if (!$validSkus{$_}) ;
}
return 1;
}
if( $validSkus{ $pSku } ){ return 1; }
return 0;
}
sub GetSkus
{
my ( $pLang, $pArch ) = @_;
my (%validSkus, @skus, $theSku);
$pLang = "USA" if( $ENV{_COVERAGE_BUILD} && uc $pLang eq "COV" );
if ( !&ValidateParams( \$pLang, \$pArch ) ) {
return;
}
$pLang = uc( $pLang );
$pArch = lc( $pArch );
###(1)Validate Architechtue by prodskus.txt file.---------//
my %skuHash=();
parse_table_file("$ENV{\"RazzleToolPath\"}\\prodskus.txt", \%skuHash );
if( !exists( $skuHash{$pLang}->{ $pArch } ) ){
wrnmsg("Language $pLang and architecture $pArch combination not listed in prodskus.txt.");
}
# Override language variable if _BuildSku is set
my (@sku,%sku);
if ( $ENV{_BuildSku} ) {
#$pLang=uc( $ENV{_BuildSku} );
@sku = split/\;/ , $ENV{_BuildSku};
%sku = map { $_=>1 } @sku ;
}
###(2)Get Skus.--------------------------------------//
@skus= split( /\;/, $skuHash{$pLang}->{ $pArch } );
(%validSkus)=();
for $theSku( @skus )
{
next if( $theSku eq "-" );
if (%sku) {
if ( $sku{$theSku} ) {
$validSkus{ lc($theSku) }=1;
}
} else {
$validSkus{ lc($theSku) }=1;
}
}
return(%validSkus);
}
#--------------------------------------------------------------//
#Function Usage
#--------------------------------------------------------------//
sub Usage
{
print <<USAGE;
Checks if the given SKU is valid for the given language and
architechture per %RazzleToolPath%\\codes.txt and prodskus.txt.
Usage: $0 -t:sku [ -l:lang ] [ -a:arch ]
-t Product SKU. SKU is one of per, pro, srv, ads.
-l Language. Default value is USA. Overridden if _BuildSku is set.
-a Architecture. Default value is %_BuildArch%.
/? Displays usage
Examples:
perl $0 -t:pro -l:jpn -a:x86 ->>>> returns 0 (valid)
perl $0 -t:ads -l:ara -a:ia64 ->>>> returns 1 (invalid)
Example script usage (cmd):
1. perl \%RAZZLETOOLPATH\%\\cksku.pm -t:\%SKU\% -l:\%LANG\%
if \%errorlevel\% EQU 0 (set prods=\%prods\% \%SKU\%)
REM With SKU=srv, LANG=RU prods will be set to srv
REM With SKU=ads, LANG=RU prods will be empty
2.
set prods=
for /F \"tokens=*\" \%\%. in ('perl \%RAZZLETOOLPATH\%\\cksku.pm -l:\%LANG\% -o') do set prods=\%\%.
REM the prods will be equal to "per pro srv" for LANG=RU.
USAGE
exit(1);
}
###-----Cmd entry point for script.-------------------------------//
if (eval("\$0 =~ /" . __PACKAGE__ . "\\.pm\$/i"))
{
# <run perl.exe GetParams.pm /? to get the complete usage for GetParams.pm>
&GetParams ('-n', '','-o', 't:l:a:o', '-p', 'sku lang arch field', @ARGV);
#Validate or Set default
if( !&ValidateParams( \$lang, \$arch ) ) {exit(1); }
if ($field){
print &cksku::Fields(uc($lang), lc($arch), $sku);
}
$rtno = &cksku::CkSku( lc($sku), uc($lang), lc($arch) );
exit( !$rtno );
}
###---------------------------------------------------------------//
sub GetParams
{
#Call pm getparams with specified arguments
&GetParams::getparams(@_);
#Call the usage if specified by /?
if ($HELP) {
&Usage();
}
}
###--------------------------------------------------------------//
sub ValidateParams
{
my ( $pLang, $pArch ) = @_;
if( !${$pLang} ){
$$pLang = "USA";
} else {
if ( !&cklang::CkLang( $$pLang ) ) {
return 0;
}
}
if( !${$pArch} ){ ${$pArch} = $ENV{ '_BuildArch' }; }
if ( lc($$pArch) ne "x86" && lc($$pArch) ne "amd64" && lc($$pArch) ne "ia64" )
{
errmsg("Invalid architecture $$pArch.");
return 0;
}
return 1;
}
###-------------------------------------------------------------//
=head1 NAME
B<cksku> - Check SKU
=head1 SYNOPSIS
perl cksku.pm -t:ads [-l:jpn] [-a x86]
=head1 DESCRIPTION
Check sku ads with language jpn and architechture x86
=head1 INSTANCES
=head2 <myinstances>
<Description of myinstances>
=head1 METHODS
=head2 <mymathods>
<Description of mymathods>
=head1 SEE ALSO
=head1 AUTHOR
<Suemiao Rossignol <suemiaor@microsoft.com>>
=cut
1;