# HG changeset patch # User Simon Howkins # Date 1275919461 -3600 # Node ID 86434e6d987372398c92d45d57a665ccb58063c5 # Parent 41e4f69f652f81b0d355a4ddecbbdbdb1c65525b# Parent 20205e7ab525b5a24e6b6ed1c391a4ffcf2bd512 Merge in tools for manipulating sytem defintions from their own repo. diff -r 41e4f69f652f -r 86434e6d9873 common/tools/generate_package_defs.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/generate_package_defs.pl Mon Jun 07 15:04:21 2010 +0100 @@ -0,0 +1,71 @@ +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); + } + 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 \""; + 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); + } +} + diff -r 41e4f69f652f -r 86434e6d9873 common/tools/generate_system_models.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/generate_system_models.pl Mon Jun 07 15:04:21 2010 +0100 @@ -0,0 +1,84 @@ +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 http://developer.symbian.org/oss/MCL/sftools/fbf/projects/packages"); +my $updatehifi_cmd = "hg -R packages update -r HighFidelityModel"; +print "$updatehifi_cmd\n"; +system($updatehifi_cmd); +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); + +my $packages_changeset = ''; + +# 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 $updatehifi_cmd = "hg -R packages update -r HighFidelityModel -C"; + print "$updatehifi_cmd\n"; + system($updatehifi_cmd); + if (!$packages_changeset) + { + $packages_changeset = `hg -R packages identify -i`; + chomp $packages_changeset; + print "-->$packages_changeset<--\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"; + 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"); + my $updatesysdef_cmd = "copy /Y $codeline\\system_model.xml platforms\\$codeline\\single\\sysdefs\\auto\\system_model.xml"; + print "$updatesysdef_cmd\n"; + system($updatesysdef_cmd); + system("hg -R platforms add"); # just in case this is a new platform + my $diff_cmd = "hg -R platforms diff --stat"; + print "$diff_cmd\n"; + my @diff_output = `$diff_cmd`; + if (@diff_output) + { + system("hg -R platforms add"); + system("hg -R platforms commit -m \"Add auto generated $codeline system model (packages\@$packages_changeset)\" -u\"Dario Sestito \""); + system("hg -R platforms push http://darios:symbian696b\@developer.symbian.org/oss/MCL/sftools/fbf/projects/platforms"); + + } +} + diff -r 41e4f69f652f -r 86434e6d9873 common/tools/split_sysdef.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/split_sysdef.pl Mon Jun 07 15:04:21 2010 +0100 @@ -0,0 +1,141 @@ +# Copyright (c) 2009 Symbian Foundation Ltd +# 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: +# Symbian Foundation Ltd - initial contribution. +# +# Contributors: +# +# Description: +# Split a system model file into many package model files (one per package) + +use strict; +use Getopt::Long; +use XML::DOM; + +my $DEFAULT_OUTDIR = "models"; + +my $sysdef = ''; +my $outdir = $DEFAULT_OUTDIR; +my $help = 0; +GetOptions(( + 'sysdef=s' => \$sysdef, + 'outdir:s' => \$outdir, + 'help!' => \$help +)); + +$help = 1 if (!$sysdef); + +if ($help) +{ + print "Split a system model file into many package model files (one per package)\n"; + print "Usage: perl split_sysdef.pl --sysdef=FILE [OPTIONS]\n"; + print "where:\n"; + print "\tFILE is the input file to split\n"; + print "and OPTIONS are:\n"; + print "\t--outdir=DIR Generate package model files under DIR (default: $DEFAULT_OUTDIR)\n"; + exit(0); +} + +mkdir("$outdir") if (!-d$outdir); + +my $parser = new XML::DOM::Parser; +my $doc = $parser->parsefile ($sysdef); + +# fix bldFile and mrp paths +for my $unit ( $doc->getElementsByTagName("unit") ) +{ + my $bldfile = $unit->getAttribute("bldFile"); + if ($bldfile) + { + $bldfile =~ s,\\,/,g; + $bldfile = "/$bldfile" if ( $bldfile !~ m,^/, ); + $bldfile = "/sf$bldfile" if ( $bldfile !~ m,^/sf, ); + if ($bldfile =~ m,^/sf/(os|mw|app|tools|ostools|adaptation)/,) + { + $unit->setAttribute("bldFile", $bldfile); + } + else + { + print "WARNING: unexpected path in bldFile: $bldfile. Keeping as is\n"; + } + } + + my $mrp = $unit->getAttribute("mrp"); + if ($mrp) + { + $mrp =~ s,\\,/,g; + $mrp = "/$mrp" if ( $mrp !~ m,^/, ); + $mrp = "/sf$mrp" if ( $mrp !~ m,^/sf, ); + if ($mrp =~ m,^/sf/(os|mw|app|tools|ostools|adaptation)/,) + { + $unit->setAttribute("mrp", $mrp); + } + else + { + print "WARNING: unexpected path in mrp: $mrp. Keeping as is\n" ; + } + } +} + +my $packagedef_header = ''; +my $packagedef_trailer = ''; + +my $systemdefinition = $doc->getElementsByTagName("SystemDefinition")->item(0); +my $systemdefinition_attributes = $systemdefinition->getAttributes(); +my $systemdefinition_attributes_tostring = ''; +for ($systemdefinition_attributes->getValues) {$systemdefinition_attributes_tostring .= " ".$_->getName."=\"".$_->getValue."\"";} +$packagedef_header .= "\n"; +$packagedef_trailer = "\n".$packagedef_trailer; + +my $systemmodel = $systemdefinition->getElementsByTagName("systemModel")->item(0); +my $systemmodel_attributes = $systemmodel->getAttributes(); +my $systemmodel_attributes_tostring = ''; +for ($systemmodel_attributes->getValues) {$systemmodel_attributes_tostring .= " ".$_->getName."=\"".$_->getValue."\"";} +$packagedef_header .= "\n"; +$packagedef_trailer = "\n".$packagedef_trailer; + +for my $layer ( $systemmodel->getElementsByTagName("layer") ) +{ + my $layer_name = $layer->getAttribute("name"); + + my $layer_attributes = $layer->getAttributes(); + my $layer_attributes_tostring = ''; + for ($layer_attributes->getValues) {$layer_attributes_tostring .= " ".$_->getName."=\"".$_->getValue."\"";} + my $layer_header = "\n"; + my $layer_trailer = "\n"; + + for my $block ( $layer->getElementsByTagName("block") ) + { + my $block_name = $block->getAttribute("name"); + + mkdir("$outdir/$layer_name") if (!-d "$outdir/$layer_name"); + mkdir("$outdir/$layer_name/$block_name") if (!-d "$outdir/$layer_name/$block_name"); + + # what source code doesn't belong to this package ? + for my $unit ( $block->getElementsByTagName("unit") ) + { + my $bldinf = $unit->getAttribute("bldFile"); + if ($bldinf and $bldinf !~ m,^/sf/$layer_name/$block_name,) + { + print "WARNING: $bldinf is in package: $layer_name/$block_name\n"; + } + } + + open(FILE, ">$outdir/$layer_name/$block_name/package_definition.xml"); + print FILE $doc->getXMLDecl->toString."\n" if ($doc->getXMLDecl); + print FILE $doc->getDoctype->toString."\n" if ($doc->getDoctype); + print FILE $packagedef_header; + print FILE $layer_header; + print FILE $block->toString; + print FILE $layer_trailer; + print FILE $packagedef_trailer; + close(FILE); + } +} + +$doc->dispose; +