Symbian/SysDefToText/SysDefToText.pm
changeset 0 beb51793110d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Symbian/SysDefToText/SysDefToText.pm	Mon Jan 18 21:35:57 2010 +0200
@@ -0,0 +1,219 @@
+#
+# 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:
+#
+# This module converts new-style System Definition XML files to the older
+# .TXT file format (i.e. files of the type GT.TXT, Techview.TXT etc.)
+
+package SysDefToText;
+use strict;
+use SysDefCollector;
+use SysDefParser;
+
+# ConvertFile
+#
+# Inputs
+#   Name of XML file to read
+#   Configuration name
+#
+# Outputs
+#   Writes data to Text File
+#   Writes to log file, if filename defined.
+#
+# Description
+#   This is the "top level" subroutine for the conversion of a "SysDef" .XML file to an old format "Text" file.
+#
+sub ConvertFile
+{
+    my ($configname, $XMLfile, $outfile, $logfile) = @_;
+
+#    my $XMLhandle = \*XMLFILE;
+    my $outhandle = \*OUTFILE;
+    my $loghandle = \*LOGFILE;
+
+#    open $XMLhandle, "<$XMLfile" or die "Cannot open input file: $XMLfile";
+    open $outhandle, ">$outfile" or die "Cannot open output file: $outfile";
+    if (defined $logfile)
+    {
+        open $loghandle, ">$logfile" or die "Cannot open logfile: $logfile";
+        print $loghandle "Processing: $XMLfile    Output to: $outfile\n";
+        print $loghandle "==================================================\n";
+    }
+    else
+    {
+        $loghandle = \*STDERR;
+    }
+    
+    my $sysdef = SysDefCollector->new($configname,$loghandle);
+    my $parser = SysDefParser->new(-client => $sysdef->parserClient());
+
+		foreach my $file (@$XMLfile) {
+	    my $XMLhandle = \*file;
+	    open $XMLhandle, "<$file" or die "Cannot open input file: $file";
+	    $parser->parse($XMLhandle);
+	    close $XMLhandle;
+		}
+
+    ## Suppress this debugging!
+    ##{   # FTB just call dump() and test() routines.
+        #$sysdef->dump($loghandle);
+        #$sysdef->test($loghandle);
+    ##}
+    
+    WriteHeader($outhandle,$configname,$XMLfile);
+
+    my @list0 = $sysdef->options();          # ABLD options
+    my @list1 = $sysdef->targets();
+    WriteOptionList($outhandle,\@list0,\@list1);
+
+    my @list2 = $sysdef->components();
+    my $bootflag = $sysdef->specialInstructionsFlag();
+    WriteComponentList($outhandle,\@list2,$bootflag);
+    
+#    close XMLFILE;
+    close OUTFILE;
+    if (defined $logfile) { close LOGFILE; }
+}
+
+# WriteHeader
+#
+# Inputs
+#   Handle of Text file to which to write
+#   Configuration name
+#
+# Outputs
+#   Writes data to Text File
+#
+# Description
+#   This subroutine initiates the old format "Text" file.
+#
+sub WriteHeader
+{
+    my $fh = shift;
+    my $config = shift;
+    my $XMLfile = shift;
+    print $fh <<HEADER_TXT;
+#
+# ****************************** IMPORTANT NOTE ************************************
+#
+# This file was generated using information read from: @$XMLfile.
+# The configuration was specified as: $config
+#
+# **********************************************************************************
+#
+
+HEADER_TXT
+}
+
+# WriteOptionList
+#
+# Inputs
+#   Handle of Text file to which to write
+#   Array reference for list of ABLD Options
+#   Array reference for list of targets
+#
+# Outputs
+#   Writes data to Text File
+#
+# Description
+#   This subroutine writes out options and targets (one per line) to the old format "Text" file.
+#   Note that option lines and target lines have the same format! 
+#
+sub WriteOptionList
+{
+    my $fh = shift;
+    my $abldoptions = shift;      # Array ref.
+    my $targets = shift;          # Array ref.
+  
+    print $fh "# Optional variations in the generated scripts\n\n";
+
+    my $column2pos = 8;
+    foreach my $option (@$abldoptions)
+    {
+        my $name = '<option ????>';
+        if ($option =~ /^-(.+)/) {$name = "<option $1>"}
+        my $len = length $name;
+        while ($len > $column2pos) { $column2pos += 8; }
+        printf $fh "%-*s\t# use abld %s\n", $column2pos, $name, $option;
+    }
+
+    foreach my $target (@$targets)
+    {
+        # abld targets are only one word
+        next if ($target =~ /\w+\s+\w+/);
+        my $name;
+        if ($target =~ /(misa|mint|mcot|mtemplate|meig)/i)
+        {
+            $name = "<option arm_assp $target>";
+        } else {
+            $name = "<option $target>";
+        }
+        my $len = length $name;
+        while ($len > $column2pos) { $column2pos += 8; }
+        printf $fh "%-*s\t#\n", $column2pos, $name;
+    }
+
+    print $fh "\n";
+}
+
+# WriteComponentList
+#
+# Inputs
+#   Handle of Text file to which to write
+#   Hash reference for hash of Components
+#
+# Outputs
+#   Writes data to Text File
+#
+# Description
+#   This subroutine writes out the Name and filepath (abld_directory) for each component,
+#   one component per line, to the old format "Text" file.
+#
+sub WriteComponentList
+{
+    my $fh = shift;
+    my $listref = shift;    # Ordered array of array refs -> "Name" and "abld_directory" pairs
+    my $bootflag = shift;   # Boolean flag indicates whether default bootstrap "component" required
+    
+    print $fh "# List of components required \n";
+    print $fh "#\n# Name		abld_directory\n";
+
+    if($bootflag)
+        {
+        print $fh "#\n# Bootstrapping....\n\n";
+        print $fh "<special bldfiles E32Toolp group>			# Special installation for E32ToolP\n\n";
+        print $fh "# Components:\n";
+        }
+    print $fh "#\n";
+
+    ##print $fh "# Things which generate include files used by later components, e.g. .RSG, .MBG or .h files\n\n";
+    ##print $fh "# Everything else\n\n";
+
+    my $column2pos = 8;
+    foreach my $component (@$listref)
+    {
+        my $len = length $component->[0];
+        while ($len > $column2pos) { $column2pos += 8; }
+        my $bldfile = $component->[1];
+        if ($bldfile =~ /^\\/) {
+          $bldfile =~ s/^\\//i;
+        }
+        printf $fh "%-*s\t%s\n", $column2pos, $component->[0], $bldfile;
+    }
+}
+
+1;
+
+__END__
+