build/tools/add_build_definition_filter.pl
changeset 0 beb51793110d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/add_build_definition_filter.pl	Mon Jan 18 21:35:57 2010 +0200
@@ -0,0 +1,125 @@
+#
+# Copyright (c) 2007 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:
+#
+
+use strict;
+use File::Find;     # for finding
+use File::Basename; # for fileparse
+use File::Copy 'copy';
+use File::Path;    
+use Getopt::Long;
+
+my (@sysdeffiles, @filters);
+
+if ( !GetOptions(
+	'i=s' => \@sysdeffiles,
+	'f:s' => \@filters
+	))
+{
+	&error_msg("Invalid arguments!\n");
+}
+
+if (!scalar (@filters)){	&error_msg("No filter(s) to set!\n")};
+if (!scalar (@sysdeffiles)){	&error_msg("No files to set filters\n")};
+
+my $checkfilters = "";
+foreach (@filters) {
+	next if ($_ !~ /\w/i);
+	$checkfilters .=$_;
+	$checkfilters .=",";
+}
+# no filters to add
+if ($checkfilters eq "") {die "nothing to do\n";};
+
+foreach my $file (@sysdeffiles) {
+	eval {set_filters($file);};
+	if ($@) {
+		print "failed $@ \n";
+	}
+}
+
+sub set_filters {
+	my $sysdeffile = shift;
+	my @updated_data;
+	
+ 	open (ORIG,"${sysdeffile}") or die("Cannot open $sysdeffile");
+	my @orig_data=<ORIG>;
+	close ORIG;
+
+	copy($sysdeffile, $sysdeffile.".orig");
+	
+	foreach (@orig_data) {
+		chomp;
+		if ($_ =~ /(<configuration)/i) {
+			my $filterline = getfilterline($_);
+			$_ =~ s/^.*filter=?\"/$&${filterline}/i;
+			$_ =~ s/,\"/\"/i;
+		}
+		push @updated_data, $_."\n";
+	}
+
+	open (UPDATED, ">${sysdeffile}");
+  print UPDATED @updated_data;
+	close UPDATED;
+}
+
+sub getfilterline {
+	my $conffilter = shift;
+	my $newfilterline = ""; 
+
+	$conffilter =~ s/.*filter=\"//i;
+	$conffilter =~ s/\".*//i;
+	
+	my @oldfilters = split(',', $conffilter);
+	
+	foreach (@filters) {
+		my $match = 0;
+		next if ($_ !~ /\w/i);
+# check if filter is defined already
+		foreach my $old (@oldfilters) {
+			if ($old eq $_) {
+				$match = 1;
+				last;
+			}
+		}
+# add filter only if it is new
+		if (!$match) {
+			$newfilterline .= $_;
+			$newfilterline .=",";
+		}
+		
+	}
+
+# remove last ',' if filters are not existed before
+	if (! scalar (@oldfilters) && $newfilterline ne "") {
+		$newfilterline =~ s/,$//i
+	}
+	
+	return $newfilterline;
+}
+
+sub error_msg ($){
+  my($ErrorMsg);
+  ($ErrorMsg)=@_;
+  my $given_command=$0;
+  $given_command =~ s/.*\\(\w+\.\w+)$/$1/;
+  print "Error: $ErrorMsg \n";
+	print "Usage: \n$given_command -f <filter> -i <systemdefinition xml file>\n";
+	print "           -f <filter> (multible allowed)\n";
+	print "           -i <sysdef file> (multible allowed)\n";
+	print "Example: \n$given_command -f test -i \\S60_SystemBuild.xml\n";
+	print "\n";  
+	die "\n";  
+}