Symbian/SysDefToText/SysDefToText.pm
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 18 Jan 2010 21:35:57 +0200
changeset 0 beb51793110d
permissions -rw-r--r--
Revision: 201002 Kit: 201003

#
# 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__