generate_system_models.pl
author Dario Sestito <darios@symbian.org>
Wed, 07 Apr 2010 12:06:14 +0100
changeset 1060 14f4464f36ae
child 1061 3088608c1558
permissions -rw-r--r--
Add generate_system_models.pl

use strict;

my $SYSDEFTOOLS_PATH = "packages\\sysdeftools";
my $XALAN_J = "java -jar $SYSDEFTOOLS_PATH\\xalan.jar";
my $XALAN_C = "packages\\sysmodelgen\\rsc\\installed\\Xalan\\Xalan.exe";

system("rmdir /S /Q tmp") if (-d "tmp");
mkdir("tmp");
chdir("tmp");

print "\n\n### CLONE FCL/sftools/fbf/projects/packages REPO ###\n";
system("hg clone -r HighFidelityModel http://developer.symbian.org/oss/FCL/sftools/fbf/projects/packages");
my $changeset = `hg -R packages identify -i`;
chomp $changeset;
print "-->$changeset<--\n";
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
my $timestamp = sprintf "%4d%02d%02d%02d%02d%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec;
#print "\n\n### CLONE MCL/sf/os/buildtools REPO ###\n";
#system("hg clone -r RCL_3 http://developer.symbian.org/oss/MCL/sf/os/buildtools");
print "\n\n### CLONE FCL/sftools/fbf/projects/platforms REPO ###\n";
system("hg clone -r default http://developer.symbian.org/oss/FCL/sftools/fbf/projects/platforms");

# get the codelines from the packages repo
opendir(DIR, "packages");
my @codelines = grep(($_ !~ /^\.\.?$/ and $_ =~ /^symbian/), readdir(DIR));
close(DIR);

# loop over codelines
for my $codeline (@codelines)
{
	mkdir($codeline);
	
	my $ROOT_SYSDEF = "packages\\$codeline\\os\\deviceplatformrelease\\foundation_system\\system_model\\system_definition.xml";

	# Full model in schema 3.0.0 format, including all of the test units.
	print "\n\n### GENERATE FULL MODEL ###\n";
	my $full_cmd = "$XALAN_C -o $codeline\\full_system_model_3.0.xml $ROOT_SYSDEF $SYSDEFTOOLS_PATH\\joinsysdef.xsl";
	print "$full_cmd\n";
	system($full_cmd);

	# Filter the model to remove the test and techview units
	print "\n\n### REMOVE UNDESIRED UNITS ###\n";
	my $filter_cmd = "$XALAN_C -o $codeline\\system_model_3.0.xml -p filter \"'!test,!techview'\" -p filter-type 'has' $codeline\\full_system_model_3.0.xml $SYSDEFTOOLS_PATH\\filtering.xsl";
	print "$filter_cmd\n";
	system($filter_cmd);

	# Downgrade the model to schema 2.0.1 for use with Helium and Raptor
	print "\n\n### DOWNGRADE TO SCHEMA 2.0.1 ###\n";
	my $downgrade_cmd = "$XALAN_C -o $codeline\\system_model.xml $codeline\\system_model_3.0.xml $SYSDEFTOOLS_PATH\\sysdefdowngrade.xsl";
	print "$downgrade_cmd\n";
	system($downgrade_cmd);

	print "\n\n### PUSH TO PLATFORMS REPOSITORY (auto) ###\n";
	my $isdifferent = 1;
	#compare to latest
	if (-d "platforms\\$codeline\\single\\sysdefs\\auto")
	{
		opendir(DIR, "platforms\\$codeline\\single\\sysdefs\\auto");
		my @files = grep(($_ !~ /^\.\.?$/ and $_ =~ /^model_/), readdir(DIR));
		@files = sort { $b cmp $a } @files;
		close(DIR);
		
		my $mostrecent = shift @files;
		print "mostrecent $mostrecent\n";
		
		#compare
		my $file1 = '';
		my $file2 = '';
		{
			local $/ = undef;
			open(FILE1, "platforms\\$codeline\\single\\sysdefs\\auto\\$mostrecent");
			{
				$file1 = <FILE1>;
			}
			close(FILE1);
			open(FILE2, "$codeline\\system_model.xml");
			{
				$file2 = <FILE2>;
			}
			close(FILE2);
		}
		$isdifferent = 0 if ($file1 eq $file2);
	}
	if ($isdifferent)
	{
		mkdir("platforms\\$codeline") if (!-d "platforms\\$codeline");
		mkdir("platforms\\$codeline\\single") if (!-d "platforms\\$codeline\\single");
		mkdir("platforms\\$codeline\\single\\sysdefs") if (!-d "platforms\\$codeline\\single\\sysdefs");
		mkdir("platforms\\$codeline\\single\\sysdefs\\auto") if (!-d "platforms\\$codeline\\single\\sysdefs\\auto");
		system("copy $codeline\\system_model.xml platforms\\$codeline\\single\\sysdefs\\auto\\model_$timestamp\_$changeset.xml");
		system("hg -R platforms add");
		system("hg -R platforms commit -m \"Add auto generated $codeline system model (packages\@$changeset)\" -u\"Dario Sestito <darios\@symbian.org>\"");
		#system("hg -R platforms push http://darios:symbian696b\@developer.symbian.org/oss/FCL/sftools/fbf/projects/platforms");
	}
}