imagingtestenv/imagingtesttools/Build/winsMmBuild.pl
author hgs
Fri, 22 Oct 2010 10:31:17 +0530
changeset 6 d5507cf6801c
parent 0 5752a19fdefe
permissions -rw-r--r--
201037_01

# Copyright (c) 2004-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:
#

# Full build equiv that builds WINSCW targets only

use strict;

my $ARGC = @ARGV;
if  (($ARGV[0] eq "-h") ||
     ($ARGV[0] eq "--h") ||
     ($ARGV[0] eq "-help") ||
     ($ARGV[0] eq "--help") ||
     ($ARGV[0] eq "help")
	 )
	{
	print "\n";
	print "winsMmBuild - Builds for WINSCW only\n\n";
	print "Syntax :	winsMmBuild [-x] [-k] [-c] [-dir=directory] [-a3flog]\n";
	print "-cw		WINSCW build - NOTE: does nothing as this is default\n";
	print "-x		include optional elements\n";
	print "-f		build A3F DevSound instead of DevSound\n";
	print "-l		build Legacy DevSound instead of A3F (ignored if -f given)\n";
	print "-k		keep going\n";
	print "-c		clean build\n";
	print "-dir		location of TestTools\\Build directory\n";
	print "-a3flog		enables A3F logging\n";
	print "-iclTestdata	builds ICL test data\n";
	exit 0;
	}


use Getopt::Long;
my %optctl = ();
keys(%optctl)=5;
unless (GetOptions (\%optctl, "x", "f", "l", "c", "cw" , "k", "dir=s", "a3flog","iclTestdata")) 
  {exit 1;}

my $ccover_target = "winscw";

	my $targetToolsDir = "..\\..\\..\\..\\..\\TargetTools\\Build";
	my $testToolsDir = "..\\..\\mmtesttools\\Build";
	my $targetToolsExists = 0;
	if (-d $targetToolsDir)
		{
		$targetToolsExists = 1;
		print "TargetTools directory exists: $targetToolsDir\n"
		}

# main 
	{
	
	##################  A3F Section #######################################
	my $a3f_define = 'SYMBIAN_MULTIMEDIA_A3FDEVSOUND';
	my $search_item = '#define\s+'.$a3f_define;  # looking for this
	my $hrh_filename = "$ENV{EPOCROOT}epoc32\\include\\variant\\Symbian_OS.hrh"; # assign hrh file and location
	my $found_search_item = 0; #false
	my $iclTest = " --iclTestdata " if ($optctl{"iclTestdata"});
	# print "HRH filename is : $hrh_filename\n";
	
 	if ($optctl{"f"})
	 	{
	 	# This displays the content of the hash table
	 	# use it to confirm the "f" entry has been added.
	 	#
	 	#  my $key;  # holds the command line options
	 	#  my $value; # redundant for hash entry as only a key is used.
		#  while (($key, $value) = each(%optctl))
		#  	{
		#   	print $key.", ".$value."\n";
		#  	}

		# opens up the hrh file for reading
		open(FILEHANDLE, "<", $hrh_filename) or die "Unable to open $hrh_filename for reading. $!\n";

		my @file_data=<FILEHANDLE>; # read all file data into array

		#check the contents of the array (i.e. the contents of the file)
		for(@file_data)
			{
			# print "$_\n";  #display the line in the file
			
			# search line for string of interest: =~ is equals, !~ is not equal
			if(($_ =~ m/$search_item/i))
				{
				$found_search_item = 1;  #found the macro 
				# print "Search item found: $_\n";    #display the line containing the search item
				}
			else
				{
				# Search item not found, do nothing
				}
			} #for loop 

		close(FILEHANDLE) or die "Can't close file $hrh_filename.\n";  # readonly file
		
		if(!$found_search_item)  #search item has not been found
			{
			# print warning
			print "Modifying file $hrh_filename to enable A3F as -f flag has been used.\n";
			
			# open file for append
			open(FILEHANDLE, ">>", $hrh_filename) or die "Unable to open $hrh_filename for appending. $!\n";
			print FILEHANDLE "\n#define $a3f_define\n"; # append macro to the file

			close(FILEHANDLE) or die "Can't close appended file $hrh_filename.\n";  # readonly file
			}
			
	 	# Now remove the "f" from the hash table so there is no chance of it being passed
	 	# to anything called in this file.
	 	######## NOTE removal of flag from Hash table ############
	 	delete($optctl{f});   
	 	
	 	# This displays the content of the hash table
	 	# use it to confirm the "f" entry has been removed.
	 	#
		# while (($key, $value) = each(%optctl))
		#  	{
		#  	print $key.", ".$value."\n";
		#  	}
		
	 	} # if $optctl{"f"}
 	elsif ($optctl{"l"})
 		{
 		 ########### Remove the macro from the hrh as "-f" is not specified  ###############
 		
 		$found_search_item = 0 ; # false
		# opens up the original hrh file for reading
		open(FILEHANDLE, "<", $hrh_filename) or die "Unable to open $hrh_filename for reading. $!\n";

		# temporary file
		my $temp_hrh_filename = "$ENV{EPOCROOT}epoc32\\include\\variant\\temp_Symbian_OS.hrh";
		# open temporary file for writing
		open(TEMPFILEHANDLE, ">", $temp_hrh_filename) or die "can't open tempory file $temp_hrh_filename. $!\n";
		
		my @file_data=<FILEHANDLE>; # read all original hrh file data into array

		#check the contents of the array (i.e. the contents of the file)
		for(@file_data)
			{
			# print "$_\n";  #display the line in the file
			
			# search line for string of interest: =~ is equals, !~ is not equal
			if(($_ =~ m/(.*)$search_item(.*)/i))
				{
				#display a warning message (only do so once)
				if( !$found_search_item )
					{
					print "Modifying file $hrh_filename to disable A3F as -l flag has been used.\n";
					}
				
				# write line excluding the #define bit to temp file. (to preserve any other bits in this line. e.g.: comment delimiters)
				print TEMPFILEHANDLE $1." ".$2."\n";
				$found_search_item = 1 ; # true
				# Do not write line to the file as we want to remove it.
				}
			else
				{
				print TEMPFILEHANDLE $_;  # copy unchanged line to temporary file
				}
			} #for loop 

		close(FILEHANDLE) or die "Can't close file $hrh_filename.$!\n";  # readonly file
		close(TEMPFILEHANDLE) or die "Can't close file $temp_hrh_filename. $!\n";  # temp file
		if($found_search_item)
			{
			my $orig_hrh_filename = "$ENV{EPOCROOT}epoc32\\include\\variant\\orig.hrh";
			rename($hrh_filename, $orig_hrh_filename) or die "can't rename $hrh_filename to $orig_hrh_filename: $!\n";
			rename($temp_hrh_filename, $hrh_filename)  or die "can't rename $temp_hrh_filename to $hrh_filename: $!\n";
			unlink $orig_hrh_filename;  # delete the original as it is no longer needed
			}
		else
			{
			unlink $temp_hrh_filename;  # no changes to be made so delete the temporary file
			}
		
 		}  # main else for A3F
 	
	##################  End A3F Section ####################################
	
	##################  A3F Logging Section ####################################

	my $search_item = "SYMBIAN_MULTIMEDIA_A3F_ENABLE_LOGGING";  # looking for this	
	my $hrh_filename = "$ENV{EPOCROOT}epoc32\\include\\variant\\Symbian_OS.hrh"; # assign hrh file and location
	my $found_search_item = 0; #false
	
 	if ($optctl{"a3flog"})
	 	{
		# opens up the hrh file for reading
		open(FILEHANDLE, "<", $hrh_filename) or die "Unable to open $hrh_filename for reading. $!\n";

		my @file_data=<FILEHANDLE>; # read all file data into array

		#check the contents of the array (i.e. the contents of the file)
		for(@file_data)
			{
			# search line for string of interest: =~ is equals, !~ is not equal
			if(($_ =~ m/$search_item/i))
				{
				$found_search_item = 1;  #found the macro 
				}
			else
				{
				# Search item not found, do nothing
				}
			} #for loop 

		close(FILEHANDLE) or die "Can't close file $hrh_filename.\n";  # readonly file
		
		if(!$found_search_item)  #search item has not been found
			{
			# open file for append
			open(FILEHANDLE, ">>", $hrh_filename) or die "Unable to open $hrh_filename for appending. $!\n";
			print FILEHANDLE "\n#define $search_item\n"; # append macro to the file
			close(FILEHANDLE) or die "Can't close appended file $hrh_filename.\n";  # readonly file
			}
			
	 	# Now remove the "log" from the hash table so there is no chance of it being passed
	 	# to anything called in this file.
	 	######## NOTE removal of flag from Hash table ############
	 	delete($optctl{log});   		
	 	} # if $optctl{"log"}
 	else
 		{
 		 ########### Remove the macro from the hrh as "-a3flog" is not specified  ###############
 		
 		$found_search_item = 0 ; # false
		# opens up the original hrh file for reading
		open(FILEHANDLE, "<", $hrh_filename) or die "Unable to open $hrh_filename for reading. $!\n";

		# temporary file
		my $temp_hrh_filename = "$ENV{EPOCROOT}epoc32\\include\\variant\\temp_Symbian_OS.hrh";
		# open temporary file for writing
		open(TEMPFILEHANDLE, ">", $temp_hrh_filename) or die "can't open tempory file $temp_hrh_filename. $!\n";
		
		my @file_data=<FILEHANDLE>; # read all original hrh file data into array

		#check the contents of the array (i.e. the contents of the file)
		for(@file_data)
			{
			# search line for string of interest: =~ is equals, !~ is not equal
			if(($_ =~ m/$search_item/i))
				{
				#display a warning message
				print "Removing $_ from file $hrh_filename as -a3flog flag has not been used to indicate an A3F logging build is required.\n";
				$found_search_item = 1 ; # true
				# Do not write line to the file as we want to remove it.
				}
			else
				{
				# Ensure the last newline after the macro is not written to the file.
				# the last new line was added by the macro append in the previous section.
				# The asssumes the macro is the last entry in the file. If it is not then 
				# the if statement should be removed and the print statement left on its own
				# to copy the last line to file.
				if(!$found_search_item)  
					{
					print TEMPFILEHANDLE $_;  # copy unchanged line to temporary file
					}
				}
			} #for loop 

		close(FILEHANDLE) or die "Can't close file $hrh_filename.$!\n";  # readonly file
		close(TEMPFILEHANDLE) or die "Can't close file $temp_hrh_filename. $!\n";  # temp file
		if($found_search_item)
			{
			my $orig_hrh_filename = "$ENV{EPOCROOT}epoc32\\include\\variant\\orig.hrh";
			rename($hrh_filename, $orig_hrh_filename) or die "can't rename $hrh_filename to $orig_hrh_filename: $!\n";
			rename($temp_hrh_filename, $hrh_filename)  or die "can't rename $temp_hrh_filename to $hrh_filename: $!\n";
			unlink $orig_hrh_filename;  # delete the original as it is no longer needed
			}
		else
			{
			unlink $temp_hrh_filename;  # no changes to be made so delete the temporary file
			}
		
 		}  # main else for A3F
 		
	##################  End A3F Logging Section ####################################
	

	my $optional = "-x " if ($optctl{"x"});
	my $keep = "-k " if ($optctl{"k"});
	my $target = ""; # default to all
	my $build = "winscw";

	if($optctl{"dir"})
		{
		my $dir = $optctl{"dir"};
		chdir $dir or die "Can't cd $dir - $!";
		}


	if($optctl{"cw"})
		{
		$build = "winscw";
		}

	my $command;

	# mmbuild [-x] [-k] setup
	$command = "mmbuild " . $optional . $keep . "setup". $iclTest;
	(system ($command)==0 )or die "Couldn't execute $command";
	
	if ($optctl{"c"})
		{
		# mmbuild -t clean (throw away result - so we ignore any no-export errors)
		$command = "mmbuild -t clean >\$NULL 2>&1";
		print $command, "\n";
		(system ($command)==0 )or die "Couldn't execute $command";
		}



	# mmbuild [-k] build
	$command = "mmbuild ". $keep. "build " . $build. $iclTest;
	(system ($command)==0 )or die "Couldn't execute $command";

	# mmbuild -t [-k] build
	$command = "mmbuild -t ". $keep. "build ". $build. $iclTest;
	(system ($command)==0 )or die "Couldn't execute $command";

	# mmbuild -t  -b[-k] build
	$command = "mmbuild -t -b ". $keep. "build ". $build. $iclTest;
	(system ($command)==0 )or die "Couldn't execute $command";

	}