--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/gencmd.pl Mon Jan 18 21:35:57 2010 +0200
@@ -0,0 +1,274 @@
+#
+# Copyright (c) 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:
+# Generate xml that can give input for symbian tbs build system
+#
+# ============================================================================
+# Name : gencmd.pl
+# Part of : Generate cmd file from input file
+# Origin : S60 2.0,NMP
+# Created : Tue Oct 6 11:32:47 2003
+# Version : 1.0
+# Description:
+# Generate xml that can give input for symbian tbs build system
+#
+#
+# structure of input file:
+# <[build]> open specific build tag, not required, multiply allowed ( like <[build]><[build1]> )
+# [build] is given with parameter -b
+# if [build] not match with given -b parameter, all lines inside this tag will ignore
+# <\> close specific build tag
+#
+# <#[name]> open task block
+# cd \ specify directory where followed lines will be launch
+# command.cmd command that will launch in above directory. command can be whatever (perl, cmd, exe...)
+# cd \temp redefine directory where followed lines will be launch
+# command2.cmd command that will launch in above directory. command can be whatever (perl, cmd, exe...)
+# <\#> close task block, close also specific build tag if open
+#
+# <parallel> open parallel block, all task blocks that located inside same parallel block will be run parallel in tbs
+# <\parallel> close parallel block, close also task block and specific build tag
+#
+# comment (\\,#) and empty lines ingnore
+#
+# example:
+#
+# <parallel> 1st parallel block
+# <#commonengine> first task
+# cd \S60\commonengine\group
+# call bldmake bldfiles -k command that will lauch 1st state
+# call abld export -k command that will lauch 2nd state
+# <\#>
+#
+# <#bldvariant> second task
+# <S60_3_1> specify directory for 'S60_3_1' build
+# cd \S60\misc\release\bldvariant\Series_60_3_1_elaf\group
+# <\>
+# <S60_3_2><S60_3_3> specify directory for 'S60_3_2' and 'S60_3_3' build
+# cd \S60\misc\release\bldvariant\elaf\group
+# <\>
+# call bldmake bldfiles -k command that will lauch 1st state
+# call abld export -k command that will lauch 2nd state
+# call abld export -w command that will lauch 3rd state
+# <\#>
+# <\parallel>
+#
+# <parallel> 2nd parallel block
+# <#build_platforms>
+# cd \s60\build_platforms\group
+# call bldmake bldfiles -k command that will lauch 4th state
+# call abld export -k command that will lauch 5th state
+# <\#>
+# <\parallel>
+#
+
+use strict;
+use File::Find; # for finding
+use File::Basename; # for fileparse
+use Getopt::Long;
+
+#
+# Variables...
+#
+my $version = "V1.0";
+my $inputfile; # input filename
+my $build; # S60_2X
+my $outputfile; # input filename
+my $component = "";
+my ($cmdfile, $xmlfile, $product_name);
+my $skip = 0;
+my ($c, $i, $j);
+
+if ( !GetOptions('i=s' => \$inputfile, 'b=s' => \$build, 'o=s' =>\$outputfile))
+{
+ &error_msg("Invalid arguments\n");
+}
+
+#
+# Hello text
+#
+hello();
+
+$build =~ tr/A-Z/a-z/; #Change all capitals to small
+
+open (INPUT,"$inputfile") or &error_msg("Cannot open $inputfile");
+ open (XML_FILE,">$outputfile") or &error_msg("Cannot open $outputfile");
+ pre_xml(\*XML_FILE);
+ gen_xml_file(\*XML_FILE);
+ post_xml(\*XML_FILE);
+ close XML_FILE;
+close INPUT;
+
+sub gen_xml_file {
+ my ($outputfile)=@_;
+ my $parallel = 0;
+ my $component_name = "";
+ my $component_path = "\\";
+ my @component_command;
+ my %component_parallel;
+ my $id = 1;
+ my $stage = 1;
+
+ while (<INPUT>) {
+ next if (/^\/\//); # Skip comment lines
+ next if (/^#/); # Skip comment lines
+ next if (/^ *$/); # Skip empty lines
+
+ # $_ =~ s/\//\\/g; #Change / marks to \
+ $_ =~ tr/A-Z/a-z/; #Change all capitals to small
+
+ chomp; #Remove line feed and carriage return
+
+# parallel block opened, components should build parallel
+ if (/^<parallel>/){
+ $parallel = 1;
+ next;
+ }
+# parallel block closed, write components that can build parallel to output file
+ if (/^<\\parallel>/){
+ my $loop = 1;
+ my $line = 0;
+ while ($loop) {
+ my $found = 0;
+ foreach $c (keys %component_parallel)
+ {
+ my @temp;
+# print " $c : $i = $component_parallel{$c}[$i] : \n";
+ @temp=keys %{$component_parallel{$c}[$line]};
+ $j = "";
+ $j = @temp[0];
+ if ($j ne "") {
+ print $outputfile "\t\t<Execute ID=\"$id\" Stage=\"$stage\" Component=\"$c\" Cwd=\"$j\" CommandLine=\"$component_parallel{$c}[$line]{$j}\"/>\n";
+# print " \;command path = $j:command = $component_parallel{$c}[$line]{$j}\;\n";
+ $found = 1;
+ $id++;
+ }
+ }
+ $line++;
+
+ if (!$found) {
+ $loop = 0;
+ }
+ else {
+ $stage++;
+
+ }
+ }
+
+# clear variables
+ %component_parallel =();
+ $component_path = "\\";
+ $parallel = 0;
+ next;
+ }
+# component block end
+ if (/^<\\#/){
+ if (!$skip) {
+ $component_parallel{$component_name}=[@component_command];
+ }
+ $skip = 0;
+ @component_command = ();
+ next;
+ }
+# block end
+ if (/^<\\>/) {
+ $skip = 0;
+ next;
+ }
+
+ next if ($skip);
+ if (!/^</) {
+# get path for xml
+ if (/^cd /){
+ $component_path = $_;
+ $component_path =~ s/^cd //;
+ next;
+ }
+ my $rec = {};
+# store command to @component_command variable
+ $rec->{$component_path} = $_;
+ push (@component_command, $rec);
+ next;
+ }
+
+# get component name for xml
+ if (/^<\#/){
+ $component_name = $_;
+ $component_name =~ s/^<\#//;
+ $component_name =~ s/>\Z//;
+ next;
+ }
+
+# check build version, if not match skip next lines
+ elsif (!/<$build>/){
+ $skip = 1;
+ next;
+ }
+ }
+}
+
+
+sub hello
+{
+print "\nThis is gencmd.pl Version $version (C)Nokia Corporation 2002-2003\n";
+}
+
+sub error_msg ($){
+ my($ErrorMsg);
+ ($ErrorMsg)=@_;
+ my $given_command=$0;
+ $given_command =~ s/.*\\(\w+\.\w+)$/$1/;
+ print "";
+ print "\n";
+ print "Error: $ErrorMsg \n\n";
+ print "Usage: \n$given_command -b <build_name> -i <input file name> -o <output file>\n";
+ print "Example: \n$given_command bldmefirst.txt -b S60_3_1 -i data\bldmelast.txt -o \epoc32\tools\s60Build\bldmelast.xml\n";
+ print "Example2: \n$given_command bldmefirst.txt -b S60_3_1_western -i data\variant_build.txt -o \epoc32\tools\s60Build\variant_build_western.xml\n";
+ print "\n";
+ die "\n";
+}
+
+# write pre information to output file
+sub pre_xml {
+ my ($outputfile)=@_;
+ print $outputfile "<?xml version=\"1.0\"?>\n";
+ print $outputfile "\t<!DOCTYPE Build [\n";
+ print $outputfile "\t<!ELEMENT Product (Commands)>\n";
+ print $outputfile "\t<!ATTLIST Product name CDATA #REQUIRED>\n";
+ print $outputfile "\t<!ELEMENT Commands (Execute+ | SetEnv*)>\n";
+ print $outputfile "\t<!ELEMENT Execute EMPTY>\n";
+ print $outputfile "\t<!ATTLIST Execute ID CDATA #REQUIRED>\n";
+ print $outputfile "\t<!ATTLIST Execute Stage CDATA #REQUIRED>\n";
+ print $outputfile "\t<!ATTLIST Execute Component CDATA #REQUIRED>\n";
+ print $outputfile "\t<!ATTLIST Execute Cwd CDATA #REQUIRED>\n";
+ print $outputfile "\t<!ATTLIST Execute CommandLine CDATA #REQUIRED>\n";
+ print $outputfile "\t<!ELEMENT SetEnv EMPTY>\n";
+ print $outputfile "\t<!ATTLIST SetEnv Order ID #REQUIRED>\n";
+ print $outputfile "\t<!ATTLIST SetEnv Name CDATA #REQUIRED>\n";
+ print $outputfile "\t<!ATTLIST SetEnv Value CDATA #REQUIRED>\n";
+ print $outputfile "]>\n\n";
+ print $outputfile "<Product Name=\"$product_name\">\n";
+ print $outputfile "\t<Commands>\n";
+ print $outputfile "\t\t<!--Set Env-->\n";
+ print $outputfile "\t\t<SetEnv Order=\"1\" Name=\"EPOCROOT\" Value=\"\\\"/>\n";
+ print $outputfile "\t\t<SetEnv Order=\"2\" Name=\"PATH\" Value=\"\\epoc32\\gcc\\bin\;\\epoc32\\tools\;\%PATH\%\"/>\n\n";
+}
+
+# write post information to output file
+sub post_xml {
+ my ($outputfile)=@_;
+ print $outputfile "\t</Commands>\n";
+ print $outputfile "</Product>\n";
+}
+