diff -r e8cf0ceec61a -r bab959d5bc37 split_sysdef.pl
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/split_sysdef.pl Tue May 18 15:36:51 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;
+