sbsv2/raptor/bin/createrfifile.pl
changeset 0 044383f39525
child 3 e1eecf4d390d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/bin/createrfifile.pl	Tue Oct 27 16:36:35 2009 +0000
@@ -0,0 +1,114 @@
+#
+# Copyright (c) 2008-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: 
+#
+
+use strict;
+use File::Basename;
+use Getopt::Long;
+
+my $verbose = 0;
+my ($rfifile, $excludepath) = "";
+GetOptions ('v' => \$verbose, 'o=s' => \$rfifile, 'x=s' => \$excludepath);
+
+if (!$rfifile || @ARGV < 1)
+	{
+	print (STDERR "\ncreaterfifile.pl\n");
+	print STDERR << 'END_OF_HELP';
+
+Usage: createrfifile.pl [-v] -o outputfile.rfi [-x excludepath] rss_cpp_deps_file_1.d rss_cpp_deps_file_n.d
+
+Takes one or more files containing CPP dependency output from the preprocessing of a .rss file and
+generates a "combined resource" .rfi that can  be consumed by CDB.
+Optionally takes an exclusion path under which "found" dependencies can be ignored.
+
+END_OF_HELP
+	exit(0);
+	}
+
+my @depfiles = @ARGV;
+
+my $exclude = $excludepath;
+if ($exclude)
+	{
+	$exclude =~ s/\\/\//g;			# Ensure consistent slashes
+	$exclude =~ s/\/\//\//g;		# Remove double slashes
+	$exclude = quotemeta($exclude);	# Convert for regex match
+	}
+
+print ("RFI : exclude under - \"$exclude\"\n") if ($verbose);
+
+my @resources;
+my %loggedresources;
+foreach my $depfile (@depfiles)
+	{
+	open DEPFILE, "< $depfile" or die "\nRFI : Cannot read \"$depfile\"!\n\n";
+	while (<DEPFILE>)
+		{
+		# .d file format - whitespace at front is key, path format varies depending on platform
+		# the aim is to get a list of the "real" files. Missing files can appear "unpathed"
+		#
+		#Audio.rsc: M:/src/common/techview/apps/audio/Src/Audio.rss \
+		#  M:/epoc32/include/variant/Symbian_OS.hrh \
+		#  M://epoc32/include/techview/eikon.rh \
+		#  M://epoc32/include/techview/eikon.hrh M://epoc32/include/uikon.hrh \
+		#  M://epoc32/include/techview/controls.hrh \
+		#  M://epoc32/include/eikcolor.hrh \
+		#  M://epoc32/include/techview/techview.hrh M://epoc32/include/uikon.rh \
+		#  M://epoc32/include/badef.rh M://epoc32/include/baerrrsvr.rh \
+		#  M://epoc32/include/techview/controls.rh M://epoc32/include/gulftflg.hrh \
+		#  M://epoc32/include/eikcore.rsg M://epoc32/include/eikcoctl.rsg \
+		#  M://epoc32/include/eikctl.rsg M://epoc32/include/eikfile.rsg \
+		#  M://epoc32/include/eikprint.rsg M://epoc32/include/audio.mbg \
+		#  M:/src/common/techview/apps/audio/Src/Audio.hrh \
+		#  M:/src/common/techview/apps/audio/Src/NewAudio.rls
+		
+		s/^.*\.\w+\://;
+		s/\\$//;
+		s/^\s+//;
+		s/\s+$//;
+		s/\/\//\//g;
+		chomp $_;
+		next if !/\S/;	
+	
+		my @dependencies = split;	
+		foreach my $dependency (@dependencies)
+			{
+			next if ($exclude && $dependency =~ /^$exclude/i);
+			print ("WARNING: Could not find dependency \"$dependency\" in \"$depfile\"\n") if (!-e $dependency and $verbose);		
+			print ("RFI : processing - \"$dependency\"\n") if ($verbose);
+			
+			if (!defined $loggedresources{$dependency})
+				{
+				push @resources, $dependency;
+				$loggedresources{$dependency} = 1;
+				}
+			}
+		}
+	close DEPFILE;
+	}
+
+open RFIFILE, "> $rfifile" or die "\nRFI : Cannot write \"$rfifile\"!\n\n";
+foreach my $resource (@resources)
+	{
+	print RFIFILE "\n\n/* GXP ***********************\n";
+	print RFIFILE " * ".basename($resource)."\n";
+	print RFIFILE " ****************************/\n\n";
+	
+	open RESOURCE, "< $resource" or die "\nCannot read \"$resource\"!\n\n";
+	print RFIFILE $_ while (<RESOURCE>);
+	close RESOURCE;
+	}
+close RFIFILE;
+