--- 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 <<USAGE_EOF;
-Usage:
- features [options] <xml database> [<xml database> <xml database> ...]
-
-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[=<destination path>] - generates only header file
- -i or --ibyfile[=<destination path>] - generates only IBY file
- -d or --datfile[=<destination path>] - generates only features.DAT file
- -c or --convert[=<destination path>] - 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:
- <header file> - $EPOCROOT\\epoc32\\include\\
- <iby file> - $EPOCROOT\\epoc32\\rom\\include\\
- <features.dat file> - 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 <<USAGE_EOF;
+Usage:
+ features [options] <xml database> [<xml database> <xml database> ...]
+
+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[=<destination path>] - generates only header file
+ -i or --ibyfile[=<destination path>] - generates only IBY file
+ -d or --datfile[=<destination path>] - generates only features.DAT file
+ -c or --convert[=<destination path>] - 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:
+ <header file> - ${epocroot}epoc32\/include\/
+ <iby file> - ${epocroot}epoc32\/rom\/include\/
+ <features.dat file> - 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
+}