--- a/imgtools/buildrom/tools/externaltools.pm Wed Jun 16 16:51:40 2010 +0300
+++ b/imgtools/buildrom/tools/externaltools.pm Wed Jun 23 16:56:47 2010 +0800
@@ -1,165 +1,189 @@
-#
-# Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "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:
-# This package invokes single and multiple external tools
-#
-
-package externaltools;
-
-require Exporter;
-@ISA=qw (Exporter);
-@EXPORT=qw (
- loadTools
- runExternalTool
-
-);
-
-use Modload; # Dynamically loads the module
-my %invocations; # Indexed by invocation name;
-
-#Set the Module path to load perl modules
-{
- my $epocToolsPath = $ENV{EPOCROOT}."epoc32\\tools\\";
- Load_SetModulePath($epocToolsPath);
-}
-
-# Get all the external tool perl module files to load them
-sub loadTools{
-
- my $toolList = shift;
- my @toolModules = split(/,/,$toolList);
- foreach my $tool (@toolModules) {
- # An optional command line can be passed to the tool if it is of the form "<toolname>[:<cmdline>]"
- if ($tool !~ /^([^:]+)(:(.*))?$/) {
- print "No tool specified as parameter for external tool invocation\n";
- }
- my $toolName = $1;
- my $toolCmdLine = $3;
- &Load_ModuleL($toolName);
- my $toolDetailsMap = $toolName.'::' . $toolName.'_info';
- update(&$toolDetailsMap, $toolCmdLine);
- }
-}
-
-#Initialises information from external tool
-sub update
-{
- my ($info, $toolCmdLine) = @_;
- my $toolName;
- my $toolStage;
-
- # name - name of the tool. used to associate with appropriate oby tool
- # keyword
- # invocation - stage when tool shall be invoked.
- # multiple - routine to invoke for multiple invocation
- # single - routine to invoke for single invocation
- # initialize - optional routine to initialize tool before main invocation.
- #
- if (defined ($info->{name})) {
- $toolName = $info->{name};
- }
- if (defined ($info->{invocation})) {
- $toolStage = lc $info->{invocation};
- }
-
- push @{$invocations{$toolStage}}, $info;
-
- if (defined ($info->{initialize}))
- {
- &{$$info{'initialize'}}($toolCmdLine);
- }
-}
-
-# Called between the buildrom stage to invoke single or multiple invocation
-sub runExternalTool {
-
- my ($stageName,$OBYData) = @_;
- $stageName = lc $stageName;
- my @toolInfoList = @{$invocations{$stageName}}; # Collect Tools with respect to its stagename.
-
- foreach my $tool (@toolInfoList) { # Traverse for the tools
-
- if (exists($tool->{single})) {#Check if single invocation exists
- if (defined ($OBYData)) {
- invoke_single($OBYData, $tool);
- }
- else {
- print "Empty OBYData array reference in Single Invocation\n";
- }
-
- }#End Single if
-
- if (exists($tool->{multiple})) { #Check if multiple invocation exists
- if (defined ($OBYData)) {
- # Called from appropriate stage to invoke multiple invocation
- invoke_multiple($OBYData, $tool);
- }
- else {
- print "Empty OBYData Line in Multiple Invocation\n";
- }
-
- }#End Multiple if
-
- }#End of tool traversal
-
-}#End of Method
-
-#Runs Tool for each line of the OBY file
-#Gets modified line and adds to OBY line data reference
-sub invoke_multiple
-{
- my ($OBYDataRef,$tool) = @_;
- my $modifiedOBYLine;
- my $toolName;
- my $index = 0;# Index each OBY line
- my $arrayLength = scalar(@$OBYDataRef);
- my $OBYLineRef;
-
- while ($index < $arrayLength) {
-
- $OBYLineRef = \$OBYDataRef->[$index];# Get the line reference
-
- if ($$OBYLineRef =~/tool=(\w+)/){ # Match for 'tool' keyword
- $toolName = $1;
-
- if ($toolName eq $tool->{name}) {# Match the tool name
- my $routine=$tool->{multiple};
- $modifiedOBYLine = &$routine($$OBYLineRef); #Invoke multiple Invocation, get modified line
-
- if (defined ($modifiedOBYLine)) { # If line is not empty
- $$OBYLineRef = $modifiedOBYLine; # Modify the line reference with new line
- }
-
- }#End of if toolname match
-
- }#End of if 'tool' keyword match
-
- $index++; # For each line of OBY file.
-
- }#End of oby line traversal <while>
-
-}
-
-#Runs Tool only once.
-#Add new data to the obydata array reference.
-sub invoke_single {
-
- my ($OBYDataRef,$tool) = @_;
- my $routine = $tool->{single};
- &$routine($OBYDataRef);#Invoke single Invocation, update new data
-}
-
-
-
-1;
\ No newline at end of file
+#
+# Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "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:
+# This package invokes single and multiple external tools
+#
+
+package externaltools;
+
+require Exporter;
+@ISA=qw (Exporter);
+@EXPORT=qw (
+ loadTools
+ runExternalTool
+
+);
+
+use flexmodload; # Dynamically loads the module
+use IPC::Open3;
+my %invocations; # Indexed by invocation name;
+
+# Get all the external tool perl module files to load them
+sub loadTools{
+
+ my $toolList = shift;
+ my @toolModules = split(/,/,$toolList);
+ foreach my $tool (@toolModules) {
+ # An optional command line can be passed to the tool if it is of the form "<toolname>[:<cmdline>]"
+ if ($tool !~ /^([^:]+)(:(.*))?$/) {
+ print "No tool specified as parameter for external tool invocation\n";
+ }
+ my $toolName = $1;
+ my $toolCmdLine = $3;
+ if($toolName =~ /configpaging/i){
+ my %info = (name=>"configpaging", args=>$toolCmdLine );
+ push @{$invocations{"invocationpoint2"}}, \%info;
+ }else{
+ &FlexLoad_ModuleL($toolName);
+ my $toolDetailsMap = $toolName.'::' . $toolName.'_info';
+ update(&$toolDetailsMap, $toolCmdLine);
+ }
+
+ }
+}
+
+#Initialises information from external tool
+sub update
+{
+ my ($info, $toolCmdLine) = @_;
+ my $toolName;
+ my $toolStage;
+
+ # name - name of the tool. used to associate with appropriate oby tool
+ # keyword
+ # invocation - stage when tool shall be invoked.
+ # multiple - routine to invoke for multiple invocation
+ # single - routine to invoke for single invocation
+ # initialize - optional routine to initialize tool before main invocation.
+ #
+ if (defined ($info->{name})) {
+ $toolName = $info->{name};
+ }
+ if (defined ($info->{invocation})) {
+ $toolStage = lc $info->{invocation};
+ }
+
+ push @{$invocations{$toolStage}}, $info;
+
+ if (defined ($info->{initialize}))
+ {
+ &{$$info{'initialize'}}($toolCmdLine);
+ }
+}
+
+# Called between the buildrom stage to invoke single or multiple invocation
+sub runExternalTool {
+
+ my ($stageName,$OBYData) = @_;
+ $stageName = lc $stageName;
+ my @toolInfoList = @{$invocations{$stageName}}; # Collect Tools with respect to its stagename.
+
+ foreach my $tool (@toolInfoList) { # Traverse for the tools
+ if($tool->{name} eq "configpaging"){
+ my $pid ;
+ my $args = $tool->{args};
+
+ open CONFIG, "| configpaging $args >cfgp_out.oby" or die "* Can't execute cpp";
+
+ foreach (@$OBYData){
+ chomp ;
+ print CONFIG $_."\n";
+ }
+ print CONFIG ":q\n"; #terminate the program
+
+ close CONFIG;
+
+ my $config_status = $?;
+ die "* configpaging failed\n" if ($config_status != 0 || !-f "cfgp_out.oby");
+
+ if(open(INTF,"cfgp_out.oby")){
+ @$OBYData = <INTF>;
+ close INTF;
+ }
+ unlink("cfgp_out.oby") or die "cannot delete cfgp_out.oby";
+ next ;
+ }
+ if (exists($tool->{single})) {#Check if single invocation exists
+ if (defined ($OBYData)) {
+ invoke_single($OBYData, $tool);
+ }
+ else {
+ print "Empty OBYData array reference in Single Invocation\n";
+ }
+
+ }#End Single if
+
+ if (exists($tool->{multiple})) { #Check if multiple invocation exists
+ if (defined ($OBYData)) {
+ # Called from appropriate stage to invoke multiple invocation
+ invoke_multiple($OBYData, $tool);
+ }
+ else {
+ print "Empty OBYData Line in Multiple Invocation\n";
+ }
+
+ }#End Multiple if
+
+ }#End of tool traversal
+
+}#End of Method
+
+#Runs Tool for each line of the OBY file
+#Gets modified line and adds to OBY line data reference
+sub invoke_multiple
+{
+ my ($OBYDataRef,$tool) = @_;
+ my $modifiedOBYLine;
+ my $toolName;
+ my $index = 0;# Index each OBY line
+ my $arrayLength = scalar(@$OBYDataRef);
+ my $OBYLineRef;
+
+ while ($index < $arrayLength) {
+
+ $OBYLineRef = \$OBYDataRef->[$index];# Get the line reference
+
+ if ($$OBYLineRef =~/tool=(\w+)/){ # Match for 'tool' keyword
+ $toolName = $1;
+
+ if ($toolName eq $tool->{name}) {# Match the tool name
+ my $routine=$tool->{multiple};
+ $modifiedOBYLine = &$routine($$OBYLineRef); #Invoke multiple Invocation, get modified line
+
+ if (defined ($modifiedOBYLine)) { # If line is not empty
+ $$OBYLineRef = $modifiedOBYLine; # Modify the line reference with new line
+ }
+
+ }#End of if toolname match
+
+ }#End of if 'tool' keyword match
+
+ $index++; # For each line of OBY file.
+
+ }#End of oby line traversal <while>
+
+}
+
+#Runs Tool only once.
+#Add new data to the obydata array reference.
+sub invoke_single {
+
+ my ($OBYDataRef,$tool) = @_;
+ my $routine = $tool->{single};
+ &$routine($OBYDataRef);#Invoke single Invocation, update new data
+}
+
+
+
+1;