common/tools/generate_package_defs.pl
author Simon Howkins <simonh@symbian.org>
Tue, 10 Aug 2010 18:11:17 +0100
changeset 1206 4518bca1baf0
parent 1193 70d88996e8cd
child 1216 137bf94d93a3
permissions -rw-r--r--
Improved diagnostic output: when the build fails because a package cannot be cloned into the build drive, it says which package and the repo source and destination. Improved caching logic, so that it doesn't depend on network availability as much. Improved indentation.

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 MCL/sftools/fbf/projects/packages REPO ###\n";
system("hg clone -r default http://developer.symbian.org/oss/MCL/sftools/fbf/projects/packages");
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 MCL/sftools/fbf/projects/platforms REPO ###\n";
system("hg clone -r default http://developer.symbian.org/oss/MCL/sftools/fbf/projects/platforms");

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

# get the changeset from the platform repo 
my $platform_changeset = `hg -R platforms identify -i`;
chomp $platform_changeset;
print "-->$platform_changeset<--\n";

# loop over codelines
for my $codeline (@codelines)
{
	mkdir($codeline);
	
	# Split model into package models
	print "\n\n### SPLIT MODEL INTO PACKAGE MODELS ###\n";
	my $updatedefault_cmd = "hg -R packages update -r default";
	print "$updatedefault_cmd\n";
	system($updatedefault_cmd);
	my $rmdir_cmd = "del /S packages\\$codeline\\package_definition.xml >nul";
	print "$rmdir_cmd\n";
	system($rmdir_cmd);
	my $splitmodel_cmd = "perl ..\\split_sysdef.pl -s platforms\\$codeline\\single\\sysdefs\\system_model.xml -o packages\\$codeline";
	print "$splitmodel_cmd\n";
	system($splitmodel_cmd);
	if ($codeline eq 'symbian3') # also update CompilerCompatibility
	{
		my $rmdir2_cmd = "del /S  packages\\CompilerCompatibility\\package_definition.xml >nul";
		print "$rmdir2_cmd\n";
		system($rmdir2_cmd);
		my $splitmodel2_cmd = "perl ..\\split_sysdef.pl -s platforms\\$codeline\\single\\sysdefs\\system_model.xml -o packages\\CompilerCompatibility";
		print "$splitmodel2_cmd\n";
		system($splitmodel2_cmd);
	}
	if ($codeline eq 'symbian4') # also update tip_pbc (package based contribution) branch
	{
		my $rmdir3_cmd = "del /S  packages\\tip_pbc\\package_definition.xml >nul";
		print "$rmdir3_cmd\n";
		system($rmdir3_cmd);
		my $splitmodel3_cmd = "perl ..\\split_sysdef.pl -s platforms\\$codeline\\single\\sysdefs\\system_model.xml -o packages\\tip_pbc";
		print "$splitmodel3_cmd\n";
		system($splitmodel3_cmd);
	}
	my $addremove_cmd = "hg -R packages addremove";
	print "$addremove_cmd\n";
	system($addremove_cmd);
	my $diff_cmd = "hg -R packages diff --stat";
	print "$diff_cmd\n";
	my @diff_output = `$diff_cmd`;
	if (@diff_output)
	{
		my $commit_cmd = "hg -R packages commit -m \"Update package models from latest system model  (platform\@$platform_changeset)\" -u\"Dario Sestito <darios\@symbian.org>\"";
		print "$commit_cmd\n";
		system($commit_cmd);
		my $push_cmd = "hg -R packages push http://darios:symbian696b\@developer.symbian.org/oss/MCL/sftools/fbf/projects/packages";
		print "$push_cmd\n";
		#system($push_cmd);
	}
}