diff -r c7c26511138f -r 360bd6b35136 imgtools/buildrom/tools/features.pl --- a/imgtools/buildrom/tools/features.pl Wed Jun 16 16:51:40 2010 +0300 +++ b/imgtools/buildrom/tools/features.pl Wed Jun 23 16:56:47 2010 +0800 @@ -1,303 +1,315 @@ -# -# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). -# All rights reserved. -# 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: -# Nokia Corporation - initial contribution. -# -# Contributors: -# -# Description: -# - -# features tool version -use constant TOOL_VERSION=>"0.2"; - -# global variables -my $PerlLibPath; # fully qualified pathname of the directory containing our Perl modules -my $ibyPath; # destination path for the iby files -my $hdrPath; # destination path for the header files -my $datPath; # destination path for the features.DAT file -my $convPath; # destination path for the feature registry database convertion -my $epocroot = $ENV{EPOCROOT}; # epcoroot directory - -# -# xml database file name(s) -# -my @xmlDBFile; - -# -# flags to suppress the output files -# 0x01 = generate header files only -# 0x02 = genereate iby files only -# 0x04 = generate dat files only -# 0x08 = convert feature registry database to feature manager database -# -use constant FLG_GENHDR=>0x01; -use constant FLG_GENIBY=>0x02; -use constant FLG_GENDAT=>0x04; -use constant FLG_CONVFR=>0x08; -my $flagOut = 0; - -use FindBin; # for FindBin::Bin -BEGIN { -# check user has a version of perl that will cope - require 5.005_03; -# establish the path to the Perl libraries - $PerlLibPath = $FindBin::Bin; # X:/epoc32/tools - $PerlLibPath .= "/"; -} -use lib $PerlLibPath; -# Includes the validation perl modules for XML validation against the given DTD. -use lib "$PerlLibPath/build/lib"; -# Include routines to create the feature header and iby files. -use features; - -# -# main - Tool entry function -# -{ - # Default path settings - &processPath(\$epocroot); - &features::set_DefaultPath($epocroot, \$hdrPath, \$ibyPath, \$datPath, \$convPath); - - # Process the command line arguments - if(&process_cmdline_arguments()) { - # Open the xml database - if(&features::open_Database(@xmlDBFile)) { - - # Generate the header file in the appropriate format with the featureset attributes - &features::generate_Headerfile($hdrPath) if($flagOut&FLG_GENHDR); - - # Generate the obey file in the appropriate format with the featureset attributes - &features::generate_Obeyfile($ibyPath) if($flagOut&FLG_GENIBY); - - # Generate the feature dat file - &features::generate_DATfile($datPath) if($flagOut&FLG_GENDAT); - - # Convert the feature registry database to feature manager database - &features::convert_FeatRegToFeatMgr($convPath,@xmlDBFile) if($flagOut&FLG_CONVFR); - } - } -} - -# -# Process the command line arguments -# -sub process_cmdline_arguments -{ - my $helpCmd = 0; - - foreach my $arg (@ARGV) - { - if( ($arg =~ /^--(\S+)$/) or ($arg =~ /^-([ridc]=.+)$/) ) - { - $arg = $1; - if( (($arg =~ /^hdrfile$/i) || ($arg =~ /^hdrfile=(.+)/i)) or ($arg =~ /^r=(.+)/) ) { - # option to generate only header files - if($1) { - $hdrPath = $1; - processPath(\$hdrPath); - } - $flagOut |= FLG_GENHDR; - } - elsif( (($arg =~ /^ibyfile$/i) || ($arg =~ /^ibyfile=(.+)/i)) or ($arg =~ /^i=(.+)/) ) { - # option to generate only iby files - if($1) { - $ibyPath = $1; - processPath(\$ibyPath); - } - $flagOut |= FLG_GENIBY; - } - elsif( (($arg =~ /^datfile$/i) || ($arg =~ /^datfile=(.+)/i)) or ($arg =~ /^d=(.+)/) ) { - # option to generate only dat files - if($1) { - $datPath = $1; - processPath(\$datPath); - } - $flagOut |= FLG_GENDAT; - } - elsif( (($arg =~ /^convert$/i) || ($arg =~ /^convert=(.+)/i)) or ($arg =~ /^c=(.+)/) ) { - # option to convert feature registry database - if($1) { - $convPath = $1; - processPath(\$convPath); - } - $flagOut |= FLG_CONVFR; - } - elsif( $arg =~ /^verbose$/i ) { - # option to enable verbose mode - &printTitle(); - &features::set_VerboseMode(); - } - elsif( $arg =~ /^strict$/i ) { - # option to enable strict mode - &features::set_StrictMode(); - } - elsif( $arg =~ /^help$/i ) { - # print the usage on console - $helpCmd = 1; - } - elsif( $arg =~ /^version$/i ) { - # print the title on console - &printTitle(); - return 1 if(scalar(@ARGV) == 1); # if this is the only option - } - else - { - print "Error: Unknown parameter $arg\n"; - return 0; - } - next; - } - elsif( $arg =~ /^-(\S+)$/ ) - { - my @flags = split("",$1); - - foreach my $opt (@flags) { - if( $opt =~ /^r/i ) { - # option to generate only header files - $flagOut |= FLG_GENHDR; - } - elsif( $opt =~ /^i/i ) { - # option to generate only iby files - $flagOut |= FLG_GENIBY; - } - elsif( $opt =~ /^d/i ) { - # option to generate only dat files - $flagOut |= FLG_GENDAT; - } - elsif( $opt =~ /^c/i ) { - # option to convert feature registry database - $flagOut |= FLG_CONVFR; - } - elsif( $opt =~ /^v/i ) { - # option to enable verbose mode - &printTitle(); - &features::set_VerboseMode(); - } - elsif( $opt =~ /^s/i ) { - # option to enable strict mode - &features::set_StrictMode(); - } - elsif( $opt =~ /^h/i ) { - # print the usage on console - $helpCmd = 1; - } - else - { - print "Error: Unknown option $opt\n"; - return 0; - } - } - next; - } - - next if(xmlfile($arg)); - next if(xmlfile("$arg.xml")); - next if(xmlfile("$epocroot"."epoc32/rom/include/$arg")); - - print "Error: Cannot find xml file: $arg\n"; - } - - # process the help command - if($helpCmd) { - &print_usage(); - return 1 if(scalar(@ARGV) == 1); # if this is the only option - } - - if(!@xmlDBFile) { - # xml database is must here - print "Error: No xml database given\n"; - &print_usage() if(!$helpCmd); - return 0; - } - - # if the suppress output option is not passed then generate both - $flagOut = (FLG_GENHDR|FLG_GENIBY|FLG_GENDAT|FLG_CONVFR) if(!$flagOut); - - return 1; -} - -# --Utility Functions - -# -# check whether the given file exists -# @param - file name for the existance check -# -sub xmlfile -{ - my ($file) = shift; - - if(-e $file) { - push @xmlDBFile, $file; - return 1; - } - return 0; -} - -# -# Process the given absolute path -# Add backslash at the end if required -# @param - path to be processed -# -sub processPath -{ - my ($path) = shift; - - return if( $$path =~ /(\\$)/ ); - return if( $$path =~ /(\/$)/ ); - $$path .= "/"; -} - -# -# Print the title -# -sub printTitle -{ - print "FEATURES - Features manager tool V".TOOL_VERSION."\n"; - print "Copyright (c) 2009 Nokia Corporation.\n\n" -} - -# -# print the usage of this tool -# -sub print_usage -{ -#........1.........2.........3.........4.........5.........6.........7..... - &printTitle(); - print < [ ...] - -Generation of C++ header file and IBY file for the given featuremanger -database file. It also generates features DAT file for the given -featuemanager/featureregistry database file - -Options: - -r or --hdrfile[=] - generates only header file - -i or --ibyfile[=] - generates only IBY file - -d or --datfile[=] - generates only features.DAT file - -c or --convert[=] - converts feature registry database - - -s or --strict - enable strict mode - -v or --verbose - enable verbose mode - -h or --help - displays this help - - --version - displays the tools version - -Ex: option combination \"-ri\" generates header and IBY files - -Default destination paths: -
- $EPOCROOT\\epoc32\\include\\ - - $EPOCROOT\\epoc32\\rom\\include\\ - - generates in current directory - -Note: The conversion(--convert) of feature registry database requires the -feature registry dtd file(featureuids.dtd) in $EPOCROOT\\epoc32\\tools\\ -USAGE_EOF -} +#!/usr/bin/perl +# +# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# 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: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +# features tool version +use constant TOOL_VERSION=>"0.3"; + +# global variables +my $PerlLibPath; # fully qualified pathname of the directory containing our Perl modules +my $PerlEPOCPath; # fully qualified pathname of the directory containing epoc tools +my $ibyPath; # destination path for the iby files +my $hdrPath; # destination path for the header files +my $datPath; # destination path for the features.DAT file +my $convPath; # destination path for the feature registry database convertion +my $epocroot = &get_epocroot; # epcoroot directory + +# +# xml database file name(s) +# +my @xmlDBFile; + +# +# flags to suppress the output files +# 0x01 = generate header files only +# 0x02 = genereate iby files only +# 0x04 = generate dat files only +# 0x08 = convert feature registry database to feature manager database +# +use constant FLG_GENHDR=>0x01; +use constant FLG_GENIBY=>0x02; +use constant FLG_GENDAT=>0x04; +use constant FLG_CONVFR=>0x08; +my $flagOut = 0; + +use FindBin; # for FindBin::Bin +BEGIN { +# check user has a version of perl that will cope + require 5.005_03; +# establish the path to the Perl libraries + $PerlLibPath = $FindBin::Bin; + $PerlLibPath =~ s/\\/\//g; + $PerlLibPath .= "\/" unless $PerlLibPath =~ /\/$/; + + $PerlEPOCPath = $ENV{EPOCROOT}; + $PerlEPOCPath =~ s/\\/\//g; + $PerlEPOCPath .= "\/" unless $PerlEPOCPath =~ /\/$/; + $PerlEPOCPath .= "epoc32\/tools\/"; +} + +# Includes the validation perl modules for XML validation against the given DTD. +use lib "${PerlEPOCPath}build/lib"; +use lib $PerlEPOCPath; +use lib $PerlLibPath; + +# Include routines to create the feature header and iby files. +use features; + +use romutl; +# +# main - Tool entry function +# +{ + # Default path settings + &processPath(\$epocroot); + &features::set_DefaultPath($epocroot, \$hdrPath, \$ibyPath, \$datPath, \$convPath); + + # Process the command line arguments + if(&process_cmdline_arguments()) { + # Open the xml database + if(&features::open_Database(@xmlDBFile)) { + + # Generate the header file in the appropriate format with the featureset attributes + &features::generate_Headerfile($hdrPath) if($flagOut&FLG_GENHDR); + + # Generate the obey file in the appropriate format with the featureset attributes + &features::generate_Obeyfile($ibyPath) if($flagOut&FLG_GENIBY); + + # Generate the feature dat file + &features::generate_DATfile($datPath) if($flagOut&FLG_GENDAT); + + # Convert the feature registry database to feature manager database + &features::convert_FeatRegToFeatMgr($convPath,@xmlDBFile) if($flagOut&FLG_CONVFR); + } + } +} + +# +# Process the command line arguments +# +sub process_cmdline_arguments +{ + my $helpCmd = 0; + + foreach my $arg (@ARGV) + { + if( ($arg =~ /^--(\S+)$/) or ($arg =~ /^-([ridc]=.+)$/) ) + { + $arg = $1; + if( (($arg =~ /^hdrfile$/i) || ($arg =~ /^hdrfile=(.+)/i)) or ($arg =~ /^r=(.+)/) ) { + # option to generate only header files + if($1) { + $hdrPath = $1; + processPath(\$hdrPath); + } + $flagOut |= FLG_GENHDR; + } + elsif( (($arg =~ /^ibyfile$/i) || ($arg =~ /^ibyfile=(.+)/i)) or ($arg =~ /^i=(.+)/) ) { + # option to generate only iby files + if($1) { + $ibyPath = $1; + processPath(\$ibyPath); + } + $flagOut |= FLG_GENIBY; + } + elsif( (($arg =~ /^datfile$/i) || ($arg =~ /^datfile=(.+)/i)) or ($arg =~ /^d=(.+)/) ) { + # option to generate only dat files + if($1) { + $datPath = $1; + processPath(\$datPath); + } + $flagOut |= FLG_GENDAT; + } + elsif( (($arg =~ /^convert$/i) || ($arg =~ /^convert=(.+)/i)) or ($arg =~ /^c=(.+)/) ) { + # option to convert feature registry database + if($1) { + $convPath = $1; + processPath(\$convPath); + } + $flagOut |= FLG_CONVFR; + } + elsif( $arg =~ /^verbose$/i ) { + # option to enable verbose mode + &printTitle(); + &features::set_VerboseMode(); + } + elsif( $arg =~ /^strict$/i ) { + # option to enable strict mode + &features::set_StrictMode(); + } + elsif( $arg =~ /^help$/i ) { + # print the usage on console + $helpCmd = 1; + } + elsif( $arg =~ /^version$/i ) { + # print the title on console + &printTitle(); + return 1 if(scalar(@ARGV) == 1); # if this is the only option + } + else + { + print "Error: Unknown parameter $arg\n"; + return 0; + } + next; + } + elsif( $arg =~ /^-(\S+)$/ ) + { + my @flags = split("",$1); + + foreach my $opt (@flags) { + if( $opt =~ /^r/i ) { + # option to generate only header files + $flagOut |= FLG_GENHDR; + } + elsif( $opt =~ /^i/i ) { + # option to generate only iby files + $flagOut |= FLG_GENIBY; + } + elsif( $opt =~ /^d/i ) { + # option to generate only dat files + $flagOut |= FLG_GENDAT; + } + elsif( $opt =~ /^c/i ) { + # option to convert feature registry database + $flagOut |= FLG_CONVFR; + } + elsif( $opt =~ /^v/i ) { + # option to enable verbose mode + &printTitle(); + &features::set_VerboseMode(); + } + elsif( $opt =~ /^s/i ) { + # option to enable strict mode + &features::set_StrictMode(); + } + elsif( $opt =~ /^h/i ) { + # print the usage on console + $helpCmd = 1; + } + else + { + print "Error: Unknown option $opt\n"; + return 0; + } + } + next; + } + + next if(xmlfile($arg)); + next if(xmlfile("$arg.xml")); + next if(xmlfile("$epocroot"."epoc32/rom/include/$arg")); + + print "Error: Cannot find xml file: $arg\n"; + } + + # process the help command + if($helpCmd) { + &print_usage(); + return 1 if(scalar(@ARGV) == 1); # if this is the only option + } + + if(!@xmlDBFile) { + # xml database is must here + print "Error: No xml database given\n"; + &print_usage() if(!$helpCmd); + return 0; + } + + # if the suppress output option is not passed then generate both + $flagOut = (FLG_GENHDR|FLG_GENIBY|FLG_GENDAT|FLG_CONVFR) if(!$flagOut); + + return 1; +} + +# --Utility Functions + +# +# check whether the given file exists +# @param - file name for the existance check +# +sub xmlfile +{ + my ($file) = shift; + + if(-e $file) { + push @xmlDBFile, $file; + return 1; + } + return 0; +} + +# +# Process the given absolute path +# Add backslash at the end if required +# @param - path to be processed +# +sub processPath +{ + my ($path) = shift; + + return if( $$path =~ /(\\$)/ ); + return if( $$path =~ /(\/$)/ ); + $$path .= "/"; +} + +# +# Print the title +# +sub printTitle +{ + print "FEATURES - Features manager tool V".TOOL_VERSION."\n"; + print "Copyright (c) 2009 Nokia Corporation.\n\n" +} + +# +# print the usage of this tool +# +sub print_usage +{ +#........1.........2.........3.........4.........5.........6.........7..... + &printTitle(); + print < [ ...] + +Generation of C++ header file and IBY file for the given featuremanger +database file. It also generates features DAT file for the given +featuemanager/featureregistry database file + +Options: + -r or --hdrfile[=] - generates only header file + -i or --ibyfile[=] - generates only IBY file + -d or --datfile[=] - generates only features.DAT file + -c or --convert[=] - converts feature registry database + + -s or --strict - enable strict mode + -v or --verbose - enable verbose mode + -h or --help - displays this help + + --version - displays the tools version + +Ex: option combination \"-ri\" generates header and IBY files + +Default destination paths: +
- ${epocroot}epoc32\/include\/ + - ${epocroot}epoc32\/rom\/include\/ + - generates in current directory + +Note: The conversion(--convert) of feature registry database requires the +feature registry dtd file(featureuids.dtd) in ${epocroot}epoc32\/tools\/ +USAGE_EOF +}