#-----------------------------------------------------------------// # 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 <>>> 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")) { # &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 - 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 =head1 METHODS =head2 =head1 SEE ALSO =head1 AUTHOR > =cut 1;