--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/buildrom/tools/features.pl Tue Oct 27 16:36:35 2009 +0000
@@ -0,0 +1,303 @@
+#
+# 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
+}