diff -r 7c11c3d8d025 -r 60be34e1b006 deprecated/buildtools/buildsystemtools/ParseXML.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/deprecated/buildtools/buildsystemtools/ParseXML.pm Wed Oct 27 16:03:51 2010 +0800 @@ -0,0 +1,205 @@ +# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +package ParseXML; + +use strict; +use Carp; +use XML::Parser; + +# Package variables - these can also be accessed the from package "SubHandlers" +use vars qw($gDataSource @gCommands @gSetEnv); + +# ParseXMLData +# +# Inputs +# $iDataSource - XML Command file. +# +# Outputs +# @gCommands - Contains commands. Each command has various attributes. +# @gSetEnv - Contains environment vars. Each var has a key and value. +# +# Description +# This function parses the XML file and returns two arrays. +sub ParseXMLData +{ + my ($iDataSource) = @_; + + eval { $gDataSource = File::Spec->rel2abs($iDataSource); }; + + undef @gCommands; + undef @gSetEnv; + + # Create a new XML Parser + my $iParser = new XML::Parser(Style=>'Subs', Pkg=>'SubHandlers', ErrorContext => 2); + # Supply the XML Parser the data source + $iParser->parsefile($iDataSource); + + return \@gCommands, \@gSetEnv; +} + + + +package SubHandlers; +use FreezeThaw qw(freeze thaw); + +# Execute +# +# Inputs +# +# Outputs +# +# Description +# This function handles the Execute tag in the XML +sub Execute +{ + my $iExpat = shift; my $iElement = shift; + + my (%iAttr); + + # Read the attributes + while (@_) { + my $iAtt = shift; + my $iVal = shift; + $iAttr{$iAtt} = $iVal; + } + + # Read in the attributes into temporary variables + my $iID = $iAttr{'ID'}; # ignored + my $iStage = $iAttr{'Stage'}; + my $iComp = $iAttr{'Component'}; + my $iCwd = $iAttr{'Cwd'}; + my $iCommandLine = $iAttr{'CommandLine'}; + my $iExitOnScanlogError = $iAttr{'ExitOnScanlogError'}; + + # Replace the magic words with values in the commandline + if ($ParseXML::gDataSource) { + $iCommandLine =~ s/%%%this_file%%%/$ParseXML::gDataSource/g; + } else { + $iCommandLine =~ s/%%%this_file%%%/this_file/g; + } + + # Replace the server side environment variables with values in the commandline + $iCommandLine =~ s/%%(\w+)%%/$ENV{$1}/g; + # Replace the server side environment variables with values in the cwd + $iCwd =~ s/%%(\w+)%%/$ENV{$1}/g; + + # Store the data about the command in a temporary hash + my %temp = ( + 'Type' => 'Execute', + 'Stage' => $iStage, + 'Component' => $iComp, + 'Cwd' => $iCwd, + 'CommandLine' => $iCommandLine, + 'ExitOnScanlogError' => $iExitOnScanlogError, + ); + push @ParseXML::gCommands, \%temp; +} + + +# Product +# +# Inputs +# +# Outputs +# +# Description +# This function handles the Product tag in the XML +sub Product +{ + my $iExpat = shift; my $iElement = shift; + + my (%iAttr); + + # Read the attributes + while (@_) { + my $iAtt = shift; + my $iVal = shift; + $iAttr{$iAtt} = $iVal; + } + + my $iName = $iAttr{'Name'}; + + print "$iElement = $iName\n"; +} + +# SetEnv +# +# Inputs +# +# Outputs +# +# Description +# This function handles the SetEnv tag in the XML +sub SetEnv +{ + my $iExpat = shift; my $iElement = shift; + + my (%iAttr); + + # Read the attributes + while (@_) { + my $iAtt = shift; + my $iVal = shift; + $iAttr{$iAtt} = $iVal; + } + + # Read in the attributes to temporary variables + my $iName = $iAttr{'Name'}; + my $iValue = $iAttr{'Value'}; + my $iOrder = $iAttr{'Order'}; # Ignored + + # Replace the server side environment variables with values in the environment variable value + $iValue =~ s/%%(\w+)%%/$ENV{$1}/g; + + # Store the data about the Environment + my %temp = ( + 'Name' => $iName, + 'Value' => $iValue, + ); + push @ParseXML::gSetEnv, \%temp; +} + +# Exit +# +# Inputs +# +# Outputs +# +# Description +# This function handles the Exit tag in the XML which cause the client to exit +sub Exit +{ + my $iExpat = shift; my $iElement = shift; + my (%iAttr); + + # Read the attributes + while (@_) { + my $iAtt = shift; + my $iVal = shift; + $iAttr{$iAtt} = $iVal; + } + + # Read in the attributes into temporary variables + my $iStage = $iAttr{'Stage'}; + + # Store the data about the command in a temporary hash + my %temp = ( + 'Type' => 'Exit', + 'Stage' => $iStage + ); + push @ParseXML::gCommands, \%temp; +} +1;