--- a/imgtools/buildrom/tools/cdfparser.pm Wed Jun 16 16:51:40 2010 +0300
+++ b/imgtools/buildrom/tools/cdfparser.pm Wed Jun 23 16:56:47 2010 +0800
@@ -1,439 +1,439 @@
-#
-# Copyright (c) 1997-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:
-#
-
-# This package contains routines to read the information from the Component Description Files.
-package cdfparser;
-
-# Include Module package to use APIs to parse an XML file.
-use genericparser;
-
-require Exporter;
-@ISA=qw(Exporter);
-@EXPORT=qw(
- CreateCDFFileBinaryMapFromDir
- GetBinaries
- GetCDFFileName
- LoadCDF
- GetDynamicDependencies
- GetBinaryInfo
- GetIncludedFeatureList
- GetExcludedFeatureList
-);
-
-use strict;
-
-# Map between the CDF File Name and the corresponding list of binaries
-# This is required so that one can fetch the list of binaries for a particular CDF file.
-my %binaryCDFFileMap=();
-
-# Include Feature List
-# The list of features to be included for a given binary.
-my @includeFeatureList;
-
-# Exclude Feature List
-# The list of features to be excluded for a given binary.
-my @excludeFeatureList;
-
-# List that contains the complete information of each binary
-my %binaryInfo=();
-
-my $warning_level = 0;
-
-# Absolute path that contains the CDF Files
-my @cdfDirectories;
-
-# To extract the cdf files from the directory specified as input. The default directory is chosen if no
-# input is specified.
-sub CreateCDFFileBinaryMapFromDir
-{
-
- my @acdfDirList = @_;
- # To store the list of cdf file names specified under the directory
- my @cdfFileList;
-
- if ((scalar @acdfDirList) != 0)
- {
- foreach my $acdfDir (@acdfDirList)
- {
- opendir DIR, "$acdfDir";
- if(not grep /$acdfDir/i, @cdfDirectories)
- {
- push @cdfDirectories, $acdfDir;
- }
-
- push (@cdfFileList, (grep /\.cdf/i, readdir DIR));
- foreach my $filename (@cdfFileList)
- {
- &CreateCDFFileBinaryMap(lc($filename), $acdfDir);
- $binaryCDFFileMap{$filename}{path} = $acdfDir;
- }
- }
- }
-}
-
-# To create a mapping between the CDF file name and the corresponding list of binaries
-sub CreateCDFFileBinaryMap
-{
- my ($cdffilename, $aCdfDir) = @_;
-
- if( defined $binaryCDFFileMap{$cdffilename} )
- {
- return;
- }
-
- my $path;
- if( defined $aCdfDir)
- {
- $path = "$aCdfDir\\$cdffilename";
- }
- else
- {
- $path = $cdffilename;
- }
-
- my $rootNode = &genericparser::getRootElement($path);
- $binaryCDFFileMap{$cdffilename}{root} = $rootNode;
-
- my @binaryList = &genericparser::getChildElements($rootNode);
-
- my $binaryInfoRef;
- foreach my $binary (@binaryList)
- {
- my $filename = &genericparser::getAttrValue($binary, "id");
- push @{$binaryCDFFileMap{$cdffilename}{binaries}}, $filename;
-# This is required so that one can fetch the CDF file name in which the binary is present
- $binaryInfoRef = \%{$binaryInfo{$filename}};
- $binaryInfoRef->{"filename"} = $cdffilename;
- }
-}
-
-# To get the complete list of binaries present in a given CDF file
-# Input Parameter : CDF filename
-# Returns the complete list of binaries
-sub GetBinaries
-{
- my $cdffilename = shift;
- if (exists $binaryCDFFileMap{$cdffilename})
- {
- return @{$binaryCDFFileMap{$cdffilename}{binaries}};
- }
- else
- {
- return undef;
- }
-}
-
-
-# To get the name of the CDF file that contains the input binary
-# Input Parameter : Binary Name
-# Returns the CDF file name
-sub GetCDFFileName
-{
- my $aBinary = lc(shift);
-
- if (exists $binaryInfo{$aBinary})
- {
- my $binInfo = \%{$binaryInfo{$aBinary}};
- return $binInfo->{filename};
- }
- else
- {
- return undef;
- }
-
-}
-
-#Loads all the specified CDF files.
-sub LoadCDF
-{
- my @cdfFileList = @_;
-
- foreach my $afile (@cdfFileList)
- {
- CreateCDFFileBinaryMap($afile);
- my $rootNode = $binaryCDFFileMap{$afile}{root};
-
- # Get the total list of files present in the cdf file.
- my @binaryList = &genericparser::getChildElements($rootNode);
-
- # Hash Reference to the hash map binaryInfo
- my $binaryInfoHashRef;
-
- foreach my $binaryNode (@binaryList)
- {
- my $fileId = &genericparser::getAttrValue($binaryNode, "id");
- $binaryInfoHashRef = \%{$binaryInfo{$fileId}};
- &setBinaryInfo($binaryInfoHashRef, $binaryNode);
- }
- }
-
-}
-
-#Sets the information of the CDF file to a hash map
-sub setBinaryInfo
-{
- my ($aBinaryInfoRef, $aBinaryNode) = @_;
-
- # Set the File attributes
- $aBinaryInfoRef->{"id"} = &genericparser::getAttrValue($aBinaryNode, "id");
- $aBinaryInfoRef->{"customisable"} = &genericparser::getAttrValue($aBinaryNode, "customisable");
- $aBinaryInfoRef->{"addressable"} = &genericparser::getAttrValue($aBinaryNode, "addressable");
- $aBinaryInfoRef->{"compress"} = &genericparser::getAttrValue($aBinaryNode, "compress");
- $aBinaryInfoRef->{"type"} = &genericparser::getAttrValue($aBinaryNode, "type");
- $aBinaryInfoRef->{"plugin_name"} = &genericparser::getAttrValue($aBinaryNode, "plugin_name");
-
- # Check for the plugin, setting the plugin type as ECOM_PLUGIN
-
- if (defined $aBinaryInfoRef->{"plugin_name"})
- {
- $aBinaryInfoRef->{"IsFoundInCDF"} = 1;
- $aBinaryInfoRef->{"source"} = "ABI_DIR\\BUILD_DIR\\$aBinaryInfoRef->{id}";
- $aBinaryInfoRef->{"plugin_name"} =~ s/$aBinaryInfoRef->{plugin_name}/ECOM/;
- }
-
- else {
-
- # Get all the nodes of element 'file'
- my @children = &genericparser::getChildElements($aBinaryNode);
-
- foreach my $childNode (@children)
- {
- $aBinaryInfoRef->{"IsFoundInCDF"} = 1;
-
- if (&genericparser::getElementName($childNode) eq "source")
- {
- $aBinaryInfoRef->{"source"} = &genericparser::getElementValue($childNode);
- }
-
- if (&genericparser::getElementName($childNode) eq "destination")
- {
- $aBinaryInfoRef->{"destination"} = &genericparser::getElementValue($childNode);
- }
-
- if (&genericparser::getElementName($childNode) eq "features")
- {
- # The children nodes will specify the list of features
- my @aFeatureNodes = &genericparser::getChildElements($childNode);
- foreach my $aFeatureChildNode (@aFeatureNodes)
- {
- # A list of features can be listed out either for supported case or for the prevented case.
- if (&genericparser::getElementName($aFeatureChildNode) eq "supports")
- {
- my @aSupportedFeatureNodes = &genericparser::getChildElements($aFeatureChildNode);
- foreach my $aSuppChildNode (@aSupportedFeatureNodes)
- {
- my %feat = ();
- my $featureName = &genericparser::getAttrValue($aSuppChildNode, "name");
- my $featureUID = &genericparser::getAttrValue($aSuppChildNode, "uid");
- if (defined ($featureName) and ($featureName ne ""))
- {
- $feat{name} = $featureName ;
- $feat{uid} = undef;
- }
- elsif(defined ($featureUID) and ($featureUID ne ""))
- {
- if(&featureparser::ValidateUIDValue($featureUID))
- {
- $featureUID = &featureparser::ConvertHexToDecimal($featureUID);
- $feat{uid} = $featureUID;
- $feat{name} = undef;
- }
- else
- {
- print "The uid value $featureUID specified for the Include feature list for the Binary, $aBinaryInfoRef->{id}, is not a valid number\n";
- }
- }
- else
- {
- print ("Warning: Feature $featureName has both name and Uid mentioned\n") if ($warning_level < 2);
- next;
- }
-
- $feat{include} = 1;
- push @includeFeatureList, \%feat;
-
- }
- }
- if (&genericparser::getElementName($aFeatureChildNode) eq "prevents")
- {
- my @aPreventedFeatureNodes = &genericparser::getChildElements($aFeatureChildNode);
- foreach my $aPreventedChildNode (@aPreventedFeatureNodes)
- {
- my %feat = ();
- my $featureName = &genericparser::getAttrValue($aPreventedChildNode, "name");
- my $featureUID = &genericparser::getAttrValue($aPreventedChildNode, "uid");
- if (defined ($featureName) and ($featureName ne ""))
- {
- $feat{name} = $featureName ;
- $feat{uid} = undef;
- }
- elsif(defined ($featureUID) and ($featureUID ne ""))
- {
- if(&featureparser::ValidateUIDValue($featureUID))
- {
- $featureUID = &featureparser::ConvertHexToDecimal($featureUID);
- $feat{uid} = $featureUID;
- $feat{name} = undef;
- }
- else
- {
- print "The uid value $featureUID specified for the Exclude feature list for the Binary, $aBinaryInfoRef->{id}, is not a valid number\n";
- }
- }
- else
- {
- print "Warning: Feature $featureName has both name and Uid mentioned\n" if ($warning_level < 2);
- next;
- }
-
- $feat{exclude} = 1;
- push @excludeFeatureList, \%feat;
-
- }
- push @{$aBinaryInfoRef->{"prevents"}}, (&genericparser::getElementValue($aFeatureChildNode));
- }
- }
- }
-
- if (&genericparser::getElementName($childNode) eq "dynamicdependencies")
- {
- # The children nodes will contain the file name.
- my @aDynDependNodes = &genericparser::getChildElements($childNode);
-
- foreach my $aDynDependChildNode (@aDynDependNodes)
- {
- # There can be a list of binaries for dynamic dependencies
- if (&genericparser::getElementName($aDynDependChildNode) eq "depend")
- {
- push @{$aBinaryInfoRef->{"depend"}}, (&genericparser::getElementValue($aDynDependChildNode));
- }
- }
- }
-
- if (&genericparser::getElementName($childNode) eq "localisation")
- {
- # The children nodes will contain the language code
- my @aLocalisationNodes = &genericparser::getChildElements($childNode);
-
- foreach my $aLocalisationChildNode (@aLocalisationNodes)
- {
- # There can be a list of binaries for dynamic dependencies
- if (&genericparser::getElementName($aLocalisationChildNode) eq "default")
- {
- $aBinaryInfoRef->{"default"} = &genericparser::getElementValue($aLocalisationChildNode);
- }
- if (&genericparser::getElementName($aLocalisationChildNode) eq "language")
- {
- push @{$aBinaryInfoRef->{"language"}}, (&genericparser::getElementValue($aLocalisationChildNode));
- }
- }
- }
-
- if (&genericparser::getElementName($childNode) eq "options")
- {
- # The children nodes will contain the option details
- my @aOptionNodes = &genericparser::getChildElements($childNode);
- foreach my $aOptionChildNode (@aOptionNodes)
- {
- if (&genericparser::getElementName($aOptionChildNode) eq "multilinguify")
- {
- $aBinaryInfoRef->{"multilinguify"} = &genericparser::getElementValue($aOptionChildNode);
- }
- if (&genericparser::getElementName($aOptionChildNode) eq "stack")
- {
- $aBinaryInfoRef->{"stack"} = &genericparser::getElementValue($aOptionChildNode);
- }
- if (&genericparser::getElementName($aOptionChildNode) eq "heapmin")
- {
- $aBinaryInfoRef->{"heapmin"} = &genericparser::getElementValue($aOptionChildNode);
- }
- if (&genericparser::getElementName($aOptionChildNode) eq "heapmax")
- {
- $aBinaryInfoRef->{"heapmax"} = &genericparser::getElementValue($aOptionChildNode);
- }
- if (&genericparser::getElementName($aOptionChildNode) eq "fixed")
- {
- $aBinaryInfoRef->{"fixed"} = &genericparser::getElementValue($aOptionChildNode);
- }
- if (&genericparser::getElementName($aOptionChildNode) eq "priority")
- {
- $aBinaryInfoRef->{"priority"} = &genericparser::getElementValue($aOptionChildNode);
- }
- if (&genericparser::getElementName($aOptionChildNode) eq "uid1")
- {
- $aBinaryInfoRef->{"uid1"} = &genericparser::getElementValue($aOptionChildNode);
- }
- if (&genericparser::getElementName($aOptionChildNode) eq "uid2")
- {
- $aBinaryInfoRef->{"uid2"} = &genericparser::getElementValue($aOptionChildNode);
- }
- if (&genericparser::getElementName($aOptionChildNode) eq "uid3")
- {
- $aBinaryInfoRef->{"uid3"} = &genericparser::getElementValue($aOptionChildNode);
- }
- if (&genericparser::getElementName($aOptionChildNode) eq "dll")
- {
- $aBinaryInfoRef->{"dll"} = &genericparser::getElementValue($aOptionChildNode);
- }
- if (&genericparser::getElementName($aOptionChildNode) eq "dlldatatop")
- {
- $aBinaryInfoRef->{"dlldatatop"} = &genericparser::getElementValue($aOptionChildNode);
- }
- }
- }
- }
- }
-}
-
-# To get the complete list of information for a given binary
-# Input Parameter : Binary
-# Returns the detailed information for each binary
-sub GetBinaryInfo
-{
- my $aBinary = shift;
- my $aBinaryInfoHash = \%{$binaryInfo{$aBinary}};
- if ($aBinaryInfoHash->{IsFoundInCDF})
- {
- return $aBinaryInfoHash;
- }
- return undef;
-}
-
-# To get the complete list of dynamic dependencies for a given binary
-# Input Parameter : Binary
-# Returns the complete list of dynamic dependencies
-sub GetDynamicDependencies
-{
- my $aBinary = shift;
-
- my $bin = \%{$binaryInfo{$aBinary}};
-
- return \@{$bin->{"depend"}};
-}
-
-#Returns the included feature list
-sub GetIncludedFeatureList
-{
- return \@includeFeatureList;
-}
-
-#Returns the excluded feature list
-sub GetExcludedFeatureList
-{
- return \@excludeFeatureList;
-}
-
-1;
+#
+# Copyright (c) 1997-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:
+#
+
+# This package contains routines to read the information from the Component Description Files.
+package cdfparser;
+
+# Include Module package to use APIs to parse an XML file.
+use genericparser;
+
+require Exporter;
+@ISA=qw(Exporter);
+@EXPORT=qw(
+ CreateCDFFileBinaryMapFromDir
+ GetBinaries
+ GetCDFFileName
+ LoadCDF
+ GetDynamicDependencies
+ GetBinaryInfo
+ GetIncludedFeatureList
+ GetExcludedFeatureList
+);
+
+use strict;
+
+# Map between the CDF File Name and the corresponding list of binaries
+# This is required so that one can fetch the list of binaries for a particular CDF file.
+my %binaryCDFFileMap=();
+
+# Include Feature List
+# The list of features to be included for a given binary.
+my @includeFeatureList;
+
+# Exclude Feature List
+# The list of features to be excluded for a given binary.
+my @excludeFeatureList;
+
+# List that contains the complete information of each binary
+my %binaryInfo=();
+
+my $warning_level = 0;
+
+# Absolute path that contains the CDF Files
+my @cdfDirectories;
+
+# To extract the cdf files from the directory specified as input. The default directory is chosen if no
+# input is specified.
+sub CreateCDFFileBinaryMapFromDir
+{
+
+ my @acdfDirList = @_;
+ # To store the list of cdf file names specified under the directory
+ my @cdfFileList;
+
+ if ((scalar @acdfDirList) != 0)
+ {
+ foreach my $acdfDir (@acdfDirList)
+ {
+ opendir DIR, "$acdfDir";
+ if(not grep /$acdfDir/i, @cdfDirectories)
+ {
+ push @cdfDirectories, $acdfDir;
+ }
+
+ push (@cdfFileList, (grep /\.cdf/i, readdir DIR));
+ foreach my $filename (@cdfFileList)
+ {
+ &CreateCDFFileBinaryMap(lc($filename), $acdfDir);
+ $binaryCDFFileMap{$filename}{path} = $acdfDir;
+ }
+ }
+ }
+}
+
+# To create a mapping between the CDF file name and the corresponding list of binaries
+sub CreateCDFFileBinaryMap
+{
+ my ($cdffilename, $aCdfDir) = @_;
+
+ if( defined $binaryCDFFileMap{$cdffilename} )
+ {
+ return;
+ }
+
+ my $path;
+ if( defined $aCdfDir)
+ {
+ $path = "$aCdfDir\/$cdffilename";
+ }
+ else
+ {
+ $path = $cdffilename;
+ }
+
+ my $rootNode = &genericparser::getRootElement($path);
+ $binaryCDFFileMap{$cdffilename}{root} = $rootNode;
+
+ my @binaryList = &genericparser::getChildElements($rootNode);
+
+ my $binaryInfoRef;
+ foreach my $binary (@binaryList)
+ {
+ my $filename = &genericparser::getAttrValue($binary, "id");
+ push @{$binaryCDFFileMap{$cdffilename}{binaries}}, $filename;
+# This is required so that one can fetch the CDF file name in which the binary is present
+ $binaryInfoRef = \%{$binaryInfo{$filename}};
+ $binaryInfoRef->{"filename"} = $cdffilename;
+ }
+}
+
+# To get the complete list of binaries present in a given CDF file
+# Input Parameter : CDF filename
+# Returns the complete list of binaries
+sub GetBinaries
+{
+ my $cdffilename = shift;
+ if (exists $binaryCDFFileMap{$cdffilename})
+ {
+ return @{$binaryCDFFileMap{$cdffilename}{binaries}};
+ }
+ else
+ {
+ return undef;
+ }
+}
+
+
+# To get the name of the CDF file that contains the input binary
+# Input Parameter : Binary Name
+# Returns the CDF file name
+sub GetCDFFileName
+{
+ my $aBinary = lc(shift);
+
+ if (exists $binaryInfo{$aBinary})
+ {
+ my $binInfo = \%{$binaryInfo{$aBinary}};
+ return $binInfo->{filename};
+ }
+ else
+ {
+ return undef;
+ }
+
+}
+
+#Loads all the specified CDF files.
+sub LoadCDF
+{
+ my @cdfFileList = @_;
+
+ foreach my $afile (@cdfFileList)
+ {
+ CreateCDFFileBinaryMap($afile);
+ my $rootNode = $binaryCDFFileMap{$afile}{root};
+
+ # Get the total list of files present in the cdf file.
+ my @binaryList = &genericparser::getChildElements($rootNode);
+
+ # Hash Reference to the hash map binaryInfo
+ my $binaryInfoHashRef;
+
+ foreach my $binaryNode (@binaryList)
+ {
+ my $fileId = &genericparser::getAttrValue($binaryNode, "id");
+ $binaryInfoHashRef = \%{$binaryInfo{$fileId}};
+ &setBinaryInfo($binaryInfoHashRef, $binaryNode);
+ }
+ }
+
+}
+
+#Sets the information of the CDF file to a hash map
+sub setBinaryInfo
+{
+ my ($aBinaryInfoRef, $aBinaryNode) = @_;
+
+ # Set the File attributes
+ $aBinaryInfoRef->{"id"} = &genericparser::getAttrValue($aBinaryNode, "id");
+ $aBinaryInfoRef->{"customisable"} = &genericparser::getAttrValue($aBinaryNode, "customisable");
+ $aBinaryInfoRef->{"addressable"} = &genericparser::getAttrValue($aBinaryNode, "addressable");
+ $aBinaryInfoRef->{"compress"} = &genericparser::getAttrValue($aBinaryNode, "compress");
+ $aBinaryInfoRef->{"type"} = &genericparser::getAttrValue($aBinaryNode, "type");
+ $aBinaryInfoRef->{"plugin_name"} = &genericparser::getAttrValue($aBinaryNode, "plugin_name");
+
+ # Check for the plugin, setting the plugin type as ECOM_PLUGIN
+
+ if (defined $aBinaryInfoRef->{"plugin_name"})
+ {
+ $aBinaryInfoRef->{"IsFoundInCDF"} = 1;
+ $aBinaryInfoRef->{"source"} = "ABI_DIR\/BUILD_DIR\/$aBinaryInfoRef->{id}";
+ $aBinaryInfoRef->{"plugin_name"} =~ s/$aBinaryInfoRef->{plugin_name}/ECOM/;
+ }
+
+ else {
+
+ # Get all the nodes of element 'file'
+ my @children = &genericparser::getChildElements($aBinaryNode);
+
+ foreach my $childNode (@children)
+ {
+ $aBinaryInfoRef->{"IsFoundInCDF"} = 1;
+
+ if (&genericparser::getElementName($childNode) eq "source")
+ {
+ $aBinaryInfoRef->{"source"} = &genericparser::getElementValue($childNode);
+ }
+
+ if (&genericparser::getElementName($childNode) eq "destination")
+ {
+ $aBinaryInfoRef->{"destination"} = &genericparser::getElementValue($childNode);
+ }
+
+ if (&genericparser::getElementName($childNode) eq "features")
+ {
+ # The children nodes will specify the list of features
+ my @aFeatureNodes = &genericparser::getChildElements($childNode);
+ foreach my $aFeatureChildNode (@aFeatureNodes)
+ {
+ # A list of features can be listed out either for supported case or for the prevented case.
+ if (&genericparser::getElementName($aFeatureChildNode) eq "supports")
+ {
+ my @aSupportedFeatureNodes = &genericparser::getChildElements($aFeatureChildNode);
+ foreach my $aSuppChildNode (@aSupportedFeatureNodes)
+ {
+ my %feat = ();
+ my $featureName = &genericparser::getAttrValue($aSuppChildNode, "name");
+ my $featureUID = &genericparser::getAttrValue($aSuppChildNode, "uid");
+ if (defined ($featureName) and ($featureName ne ""))
+ {
+ $feat{name} = $featureName ;
+ $feat{uid} = undef;
+ }
+ elsif(defined ($featureUID) and ($featureUID ne ""))
+ {
+ if(&featureparser::ValidateUIDValue($featureUID))
+ {
+ $featureUID = &featureparser::ConvertHexToDecimal($featureUID);
+ $feat{uid} = $featureUID;
+ $feat{name} = undef;
+ }
+ else
+ {
+ print "The uid value $featureUID specified for the Include feature list for the Binary, $aBinaryInfoRef->{id}, is not a valid number\n";
+ }
+ }
+ else
+ {
+ print ("Warning: Feature $featureName has both name and Uid mentioned\n") if ($warning_level < 2);
+ next;
+ }
+
+ $feat{include} = 1;
+ push @includeFeatureList, \%feat;
+
+ }
+ }
+ if (&genericparser::getElementName($aFeatureChildNode) eq "prevents")
+ {
+ my @aPreventedFeatureNodes = &genericparser::getChildElements($aFeatureChildNode);
+ foreach my $aPreventedChildNode (@aPreventedFeatureNodes)
+ {
+ my %feat = ();
+ my $featureName = &genericparser::getAttrValue($aPreventedChildNode, "name");
+ my $featureUID = &genericparser::getAttrValue($aPreventedChildNode, "uid");
+ if (defined ($featureName) and ($featureName ne ""))
+ {
+ $feat{name} = $featureName ;
+ $feat{uid} = undef;
+ }
+ elsif(defined ($featureUID) and ($featureUID ne ""))
+ {
+ if(&featureparser::ValidateUIDValue($featureUID))
+ {
+ $featureUID = &featureparser::ConvertHexToDecimal($featureUID);
+ $feat{uid} = $featureUID;
+ $feat{name} = undef;
+ }
+ else
+ {
+ print "The uid value $featureUID specified for the Exclude feature list for the Binary, $aBinaryInfoRef->{id}, is not a valid number\n";
+ }
+ }
+ else
+ {
+ print "Warning: Feature $featureName has both name and Uid mentioned\n" if ($warning_level < 2);
+ next;
+ }
+
+ $feat{exclude} = 1;
+ push @excludeFeatureList, \%feat;
+
+ }
+ push @{$aBinaryInfoRef->{"prevents"}}, (&genericparser::getElementValue($aFeatureChildNode));
+ }
+ }
+ }
+
+ if (&genericparser::getElementName($childNode) eq "dynamicdependencies")
+ {
+ # The children nodes will contain the file name.
+ my @aDynDependNodes = &genericparser::getChildElements($childNode);
+
+ foreach my $aDynDependChildNode (@aDynDependNodes)
+ {
+ # There can be a list of binaries for dynamic dependencies
+ if (&genericparser::getElementName($aDynDependChildNode) eq "depend")
+ {
+ push @{$aBinaryInfoRef->{"depend"}}, (&genericparser::getElementValue($aDynDependChildNode));
+ }
+ }
+ }
+
+ if (&genericparser::getElementName($childNode) eq "localisation")
+ {
+ # The children nodes will contain the language code
+ my @aLocalisationNodes = &genericparser::getChildElements($childNode);
+
+ foreach my $aLocalisationChildNode (@aLocalisationNodes)
+ {
+ # There can be a list of binaries for dynamic dependencies
+ if (&genericparser::getElementName($aLocalisationChildNode) eq "default")
+ {
+ $aBinaryInfoRef->{"default"} = &genericparser::getElementValue($aLocalisationChildNode);
+ }
+ if (&genericparser::getElementName($aLocalisationChildNode) eq "language")
+ {
+ push @{$aBinaryInfoRef->{"language"}}, (&genericparser::getElementValue($aLocalisationChildNode));
+ }
+ }
+ }
+
+ if (&genericparser::getElementName($childNode) eq "options")
+ {
+ # The children nodes will contain the option details
+ my @aOptionNodes = &genericparser::getChildElements($childNode);
+ foreach my $aOptionChildNode (@aOptionNodes)
+ {
+ if (&genericparser::getElementName($aOptionChildNode) eq "multilinguify")
+ {
+ $aBinaryInfoRef->{"multilinguify"} = &genericparser::getElementValue($aOptionChildNode);
+ }
+ if (&genericparser::getElementName($aOptionChildNode) eq "stack")
+ {
+ $aBinaryInfoRef->{"stack"} = &genericparser::getElementValue($aOptionChildNode);
+ }
+ if (&genericparser::getElementName($aOptionChildNode) eq "heapmin")
+ {
+ $aBinaryInfoRef->{"heapmin"} = &genericparser::getElementValue($aOptionChildNode);
+ }
+ if (&genericparser::getElementName($aOptionChildNode) eq "heapmax")
+ {
+ $aBinaryInfoRef->{"heapmax"} = &genericparser::getElementValue($aOptionChildNode);
+ }
+ if (&genericparser::getElementName($aOptionChildNode) eq "fixed")
+ {
+ $aBinaryInfoRef->{"fixed"} = &genericparser::getElementValue($aOptionChildNode);
+ }
+ if (&genericparser::getElementName($aOptionChildNode) eq "priority")
+ {
+ $aBinaryInfoRef->{"priority"} = &genericparser::getElementValue($aOptionChildNode);
+ }
+ if (&genericparser::getElementName($aOptionChildNode) eq "uid1")
+ {
+ $aBinaryInfoRef->{"uid1"} = &genericparser::getElementValue($aOptionChildNode);
+ }
+ if (&genericparser::getElementName($aOptionChildNode) eq "uid2")
+ {
+ $aBinaryInfoRef->{"uid2"} = &genericparser::getElementValue($aOptionChildNode);
+ }
+ if (&genericparser::getElementName($aOptionChildNode) eq "uid3")
+ {
+ $aBinaryInfoRef->{"uid3"} = &genericparser::getElementValue($aOptionChildNode);
+ }
+ if (&genericparser::getElementName($aOptionChildNode) eq "dll")
+ {
+ $aBinaryInfoRef->{"dll"} = &genericparser::getElementValue($aOptionChildNode);
+ }
+ if (&genericparser::getElementName($aOptionChildNode) eq "dlldatatop")
+ {
+ $aBinaryInfoRef->{"dlldatatop"} = &genericparser::getElementValue($aOptionChildNode);
+ }
+ }
+ }
+ }
+ }
+}
+
+# To get the complete list of information for a given binary
+# Input Parameter : Binary
+# Returns the detailed information for each binary
+sub GetBinaryInfo
+{
+ my $aBinary = shift;
+ my $aBinaryInfoHash = \%{$binaryInfo{$aBinary}};
+ if ($aBinaryInfoHash->{IsFoundInCDF})
+ {
+ return $aBinaryInfoHash;
+ }
+ return undef;
+}
+
+# To get the complete list of dynamic dependencies for a given binary
+# Input Parameter : Binary
+# Returns the complete list of dynamic dependencies
+sub GetDynamicDependencies
+{
+ my $aBinary = shift;
+
+ my $bin = \%{$binaryInfo{$aBinary}};
+
+ return \@{$bin->{"depend"}};
+}
+
+#Returns the included feature list
+sub GetIncludedFeatureList
+{
+ return \@includeFeatureList;
+}
+
+#Returns the excluded feature list
+sub GetExcludedFeatureList
+{
+ return \@excludeFeatureList;
+}
+
+1;