imgtools/buildrom/tools/externaltools.pm
changeset 590 360bd6b35136
parent 0 044383f39525
child 626 ac03b93ca9c4
--- 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;