build/tools/targets_from_mmp.pl
changeset 0 beb51793110d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/targets_from_mmp.pl	Mon Jan 18 21:35:57 2010 +0200
@@ -0,0 +1,183 @@
+#
+# Copyright (c) 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:
+#
+#!/usr/bin/perl
+
+# 
+# ==============================================================================
+#  Name        : targets_from_mmp.pl
+#  Description : This script provides search functionality for target components
+#                from mmp-files found from the environment.
+#  Version     : 1
+# ==============================================================================
+# 
+
+use strict;
+use Cwd;
+use File::Find;
+
+use Getopt::Std;
+use vars qw($opt_o $opt_i $opt_p $opt_s );
+
+# -----------------------------------------------------------
+# Check the arguments and if not any or too many print guide.
+# -----------------------------------------------------------
+if (( $#ARGV < 0) || ($#ARGV > 5))
+{
+         print <<USAGE;
+         
+Usage:    targets_from_mmp.pl [-p component] [-o output-file] [-s] [-i input-file]
+
+   -p     prints the mmp-file(s) related to component.
+   -i     specify the input file from where to search for
+          mmp-target relation (value is "targets_from_mmps.txt"
+          if else not specified).
+   -s     scans the environment and prints the output to
+          "targets_from_mmps.txt" or to separately specified
+          file (with option -o).
+   -o     output-file where to write scanning results.
+ 
+ At least one option is required.
+ 
+Examples: targets_from_mmp.pl -s
+          targets_from_mmp.pl -s -o targets_from_mmps.txt
+          targets_from_mmp.pl -p clock.dll
+          targets_from_mmp.pl -p clock.dll -i targets_from_mmps.txt
+USAGE
+	exit -1;
+}
+
+# ---------------
+# Collect options
+# ---------------
+getopts("o:i:p:s");
+
+my ($inputfile, $outputfile);
+
+# -----------------------------------------------------------
+# If output-file is defined in arguments open specified file
+# for printing the targets found from mmp-files.
+# -----------------------------------------------------------
+if ($opt_s)
+{
+	if ($opt_o)
+	{
+		$outputfile = $opt_o;
+	}
+	else
+	{
+		$outputfile = "targets_from_mmps.txt";
+	}
+	
+	open (OUTPUT, ">$outputfile");
+	print "\nWriting targets of mmp-files into \"$outputfile\".\n";
+	
+	find(\&doFind, cwd);
+}
+
+# ----------------------------------------------------
+# If special input file is defined.
+# ----------------------------------------------------
+if ($opt_i)
+{
+	$inputfile = $opt_i;
+}
+else
+{
+	$inputfile = "targets_from_mmps.txt";
+}
+
+# ----------------------------------------------------
+# If component to search is defined in arguments print
+# indication of that on screen.
+# ----------------------------------------------------
+if ($opt_p)
+{
+	open (INPUT, $inputfile) or die "\nInputfile \"$inputfile\" not found, please check the filename or scan the environment first!\n";
+	#print "\nSearching mmp-file for target \"$opt_p\" from \"$inputfile\"...\n\n";
+	
+	my $found_indicator=0;
+	
+	foreach my $line (<INPUT>)
+	{
+		if ($line =~ m/(.*) : $opt_p/i)
+		{
+			print "\n $opt_p -->\n" if ($found_indicator == 0);
+			$found_indicator++;
+			print "    $1";
+		}
+	}
+	
+	print "\nCould not find target \"$opt_p\" from any mmp-file (from \"$inputfile\")!\n" if ($found_indicator == 0);
+	
+	print "\n";
+	close INPUT;
+}
+
+# --------------------------------------------
+# Function to find the targets from mmp-files.
+# --------------------------------------------
+sub doFind
+{
+	my $file = $File::Find::name;
+	
+	$file =~ s,/,\\,g;
+	return unless -f $file;
+	
+	return unless $file =~ /(?i)\.mmp$/;
+	
+	open F, $file or return;
+	#print $file . "\n";
+
+	if ($file =~ m/^\S:(.*)/i)
+	{
+		$file = $1;
+	}
+	
+	my ($line, $foundSomething);
+	
+	$foundSomething = "false";
+	
+	while ($line=<F>)
+	{
+		if ($line=~ m/^[\s|\t]*(?i)TARGET[\s|\t]+(\S*).*$/)
+		{
+			# If output-file is defined print all findings to that.
+			if ($outputfile)
+			{
+
+								
+				print OUTPUT "$file : $1\n";
+			}
+			
+			# If component to search is defined and found
+			# print corresponding mmp-file on screen.
+			
+			$foundSomething = "true";
+		}
+	}
+	
+	if ($foundSomething eq "false")
+	{
+		#print "no TARGET found from $file\n";    
+	}
+	
+	close F;
+}
+
+if ($outputfile)
+{
+	close OUTPUT;
+}