Sync BaseTools Branch (version r2271) to EDKII main trunk.
BaseTool Branch: https://edk2-buildtools.svn.sourceforge.net/svnroot/edk2-buildtools/branches/Releases/BaseTools_r2100 Signed-off-by: lgao4 Reviewed-by: hchen30 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12214 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
397
BaseTools/Source/Python/UPT/Xml/PackageSurfaceAreaXml.py
Normal file
397
BaseTools/Source/Python/UPT/Xml/PackageSurfaceAreaXml.py
Normal file
@ -0,0 +1,397 @@
|
||||
## @file
|
||||
# This file is used to parse a Package file of .PKG file
|
||||
#
|
||||
# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
|
||||
#
|
||||
# This program and the accompanying materials are licensed and made available
|
||||
# under the terms and conditions of the BSD License which accompanies this
|
||||
# distribution. The full text of the license may be found at
|
||||
# http://opensource.org/licenses/bsd-license.php
|
||||
#
|
||||
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
#
|
||||
|
||||
'''
|
||||
PackageSurfaceAreaXml
|
||||
'''
|
||||
from xml.dom import minidom
|
||||
|
||||
from Library.String import GetStringOfList
|
||||
from Library.Xml.XmlRoutines import XmlElement
|
||||
from Library.Xml.XmlRoutines import XmlNode
|
||||
from Library.Xml.XmlRoutines import XmlList
|
||||
from Library.Xml.XmlRoutines import CreateXmlElement
|
||||
from Object.POM.CommonObject import IncludeObject
|
||||
from Object.POM.CommonObject import TextObject
|
||||
from Object.POM.PackageObject import PackageObject
|
||||
from Xml.CommonXml import ClonedFromXml
|
||||
from Xml.CommonXml import PackageHeaderXml
|
||||
from Xml.CommonXml import HelpTextXml
|
||||
from Xml.CommonXml import CommonDefinesXml
|
||||
from Xml.CommonXml import LibraryClassXml
|
||||
from Xml.CommonXml import UserExtensionsXml
|
||||
from Xml.CommonXml import MiscellaneousFileXml
|
||||
from Xml.GuidProtocolPpiXml import GuidXml
|
||||
from Xml.GuidProtocolPpiXml import ProtocolXml
|
||||
from Xml.GuidProtocolPpiXml import PpiXml
|
||||
from Xml.ModuleSurfaceAreaXml import ModuleSurfaceAreaXml
|
||||
from Xml.PcdXml import PcdEntryXml
|
||||
|
||||
##
|
||||
# IndustryStandardHeaderXml
|
||||
#
|
||||
class IndustryStandardHeaderXml(object):
|
||||
def __init__(self):
|
||||
self.HeaderFile = ''
|
||||
self.HelpText = []
|
||||
|
||||
def FromXml(self, Item, Key):
|
||||
self.HeaderFile = XmlElement(Item, '%s/HeaderFile' % Key)
|
||||
for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):
|
||||
HelpTextObj = HelpTextXml()
|
||||
HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)
|
||||
self.HelpText.append(HelpTextObj)
|
||||
|
||||
Include = IncludeObject()
|
||||
Include.SetFilePath(self.HeaderFile)
|
||||
HelpTxt = TextObject()
|
||||
HelpTxt.SetString(self.HelpText)
|
||||
Include.SetHelpText(HelpTxt)
|
||||
|
||||
return Include
|
||||
|
||||
def ToXml(self, IndustryStandardHeader, Key):
|
||||
if self.HeaderFile:
|
||||
pass
|
||||
AttributeList = []
|
||||
NodeList = [['HeaderFile', IndustryStandardHeader.GetFilePath()]]
|
||||
Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
|
||||
|
||||
return Root
|
||||
|
||||
def __str__(self):
|
||||
Str = "HeaderFile = %s" % (self.HeaderFile)
|
||||
for Item in self.HelpText:
|
||||
Str = Str + "\n\t" + str(Item)
|
||||
return Str
|
||||
##
|
||||
# PackageIncludeHeaderXml
|
||||
#
|
||||
class PackageIncludeHeaderXml(object):
|
||||
def __init__(self):
|
||||
self.HeaderFile = ''
|
||||
self.CommonDefines = CommonDefinesXml()
|
||||
self.HelpText = []
|
||||
|
||||
def FromXml(self, Item, Key):
|
||||
self.HeaderFile = XmlElement(Item, '%s/HeaderFile' % Key)
|
||||
self.CommonDefines.FromXml(XmlNode(Item, '%s/HeaderFile' % Key), 'HeaderFile')
|
||||
for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):
|
||||
HelpTextObj = HelpTextXml()
|
||||
HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)
|
||||
self.HelpText.append(HelpTextObj)
|
||||
|
||||
Include = IncludeObject()
|
||||
Include.SetFilePath(self.HeaderFile)
|
||||
Include.SetSupArchList(self.CommonDefines.SupArchList)
|
||||
HelpTxt = TextObject()
|
||||
HelpTxt.SetString(self.HelpText)
|
||||
Include.SetHelpText(HelpTxt)
|
||||
|
||||
return Include
|
||||
|
||||
def ToXml(self, PackageIncludeHeader, Key):
|
||||
if self.HeaderFile:
|
||||
pass
|
||||
AttributeList = [['SupArchList', GetStringOfList(PackageIncludeHeader.GetSupArchList())], \
|
||||
['SupModList', GetStringOfList(PackageIncludeHeader.GetSupModuleList())], ]
|
||||
|
||||
HeaderFileNode = CreateXmlElement('HeaderFile', PackageIncludeHeader.FilePath, [], AttributeList)
|
||||
|
||||
NodeList = [HeaderFileNode]
|
||||
for Item in PackageIncludeHeader.GetHelpTextList():
|
||||
Tmp = HelpTextXml()
|
||||
NodeList.append(Tmp.ToXml(Item))
|
||||
|
||||
Root = CreateXmlElement('%s' % Key, '', NodeList, [])
|
||||
|
||||
return Root
|
||||
|
||||
def __str__(self):
|
||||
Str = "HeaderFile = %s\n\t%s" % (self.HeaderFile, self.CommonDefines)
|
||||
for Item in self.HelpText:
|
||||
Str = Str + "\n\t" + str(Item)
|
||||
return Str
|
||||
|
||||
##
|
||||
# PcdCheckXml
|
||||
#
|
||||
class PcdCheckXml(object):
|
||||
def __init__(self):
|
||||
self.PcdCheck = ''
|
||||
|
||||
def FromXml(self, Item, Key):
|
||||
if Key:
|
||||
pass
|
||||
self.PcdCheck = XmlElement(Item, 'PcdCheck')
|
||||
|
||||
return self.PcdCheck
|
||||
|
||||
def ToXml(self, PcdCheck, Key):
|
||||
if self.PcdCheck:
|
||||
pass
|
||||
Root = CreateXmlElement('%s' % Key, PcdCheck, [], [])
|
||||
return Root
|
||||
|
||||
def __str__(self):
|
||||
return "PcdCheck = %s" % (self.PcdCheck)
|
||||
|
||||
##
|
||||
# PackageSurfaceAreaXml
|
||||
#
|
||||
class PackageSurfaceAreaXml(object):
|
||||
def __init__(self):
|
||||
self.Package = None
|
||||
|
||||
def FromXml(self, Item, Key):
|
||||
if Key:
|
||||
pass
|
||||
#
|
||||
# Create a package object
|
||||
#
|
||||
Package = PackageObject()
|
||||
#
|
||||
# Header
|
||||
#
|
||||
Tmp = PackageHeaderXml()
|
||||
Tmp.FromXml(XmlNode(Item, '/PackageSurfaceArea/Header'), 'Header', Package)
|
||||
#
|
||||
# ClonedFrom
|
||||
#
|
||||
Tmp = ClonedFromXml()
|
||||
if XmlNode(Item, '/PackageSurfaceArea/ClonedFrom'):
|
||||
ClonedFrom = Tmp.FromXml(XmlNode(Item, '/PackageSurfaceArea/ClonedFrom'), 'ClonedFrom')
|
||||
Package.SetClonedFromList([ClonedFrom])
|
||||
#
|
||||
# LibraryClass
|
||||
#
|
||||
|
||||
for SubItem in XmlList(Item, '/PackageSurfaceArea/LibraryClassDeclarations/LibraryClass'):
|
||||
Tmp = LibraryClassXml()
|
||||
LibraryClass = Tmp.FromXml(SubItem, 'LibraryClass')
|
||||
Package.SetLibraryClassList(Package.GetLibraryClassList() + [LibraryClass])
|
||||
|
||||
if XmlList(Item, '/PackageSurfaceArea/LibraryClassDeclarations') and \
|
||||
not XmlList(Item, '/PackageSurfaceArea/LibraryClassDeclarations/LibraryClass'):
|
||||
Package.SetLibraryClassList([None])
|
||||
|
||||
#
|
||||
# IndustryStandardHeader
|
||||
#
|
||||
for SubItem in XmlList(Item, '/PackageSurfaceArea/IndustryStandardIncludes/IndustryStandardHeader'):
|
||||
Tmp = IndustryStandardHeaderXml()
|
||||
Include = Tmp.FromXml(SubItem, 'IndustryStandardHeader')
|
||||
Package.SetStandardIncludeFileList(Package.GetStandardIncludeFileList() + [Include])
|
||||
|
||||
if XmlList(Item, '/PackageSurfaceArea/IndustryStandardIncludes') and \
|
||||
not XmlList(Item, '/PackageSurfaceArea/IndustryStandardIncludes/IndustryStandardHeader'):
|
||||
Package.SetStandardIncludeFileList([None])
|
||||
|
||||
|
||||
#
|
||||
# PackageHeader
|
||||
#
|
||||
for SubItem in XmlList(Item, '/PackageSurfaceArea/PackageIncludes/PackageHeader'):
|
||||
Tmp = PackageIncludeHeaderXml()
|
||||
Include = Tmp.FromXml(SubItem, 'PackageHeader')
|
||||
Package.SetPackageIncludeFileList(Package.GetPackageIncludeFileList() + [Include])
|
||||
|
||||
if XmlList(Item, '/PackageSurfaceArea/PackageIncludes') and not \
|
||||
XmlList(Item, '/PackageSurfaceArea/PackageIncludes/PackageHeader'):
|
||||
Package.SetPackageIncludeFileList([None])
|
||||
|
||||
#
|
||||
# Guid
|
||||
#
|
||||
for SubItem in XmlList(Item, '/PackageSurfaceArea/GuidDeclarations/Entry'):
|
||||
Tmp = GuidXml('Package')
|
||||
GuidProtocolPpi = Tmp.FromXml(SubItem, 'Entry')
|
||||
Package.SetGuidList(Package.GetGuidList() + [GuidProtocolPpi])
|
||||
|
||||
if XmlList(Item, '/PackageSurfaceArea/GuidDeclarations') and not \
|
||||
XmlList(Item, '/PackageSurfaceArea/GuidDeclarations/Entry'):
|
||||
Package.SetGuidList([None])
|
||||
|
||||
#
|
||||
# Protocol
|
||||
#
|
||||
for SubItem in XmlList(Item, '/PackageSurfaceArea/ProtocolDeclarations/Entry'):
|
||||
Tmp = ProtocolXml('Package')
|
||||
GuidProtocolPpi = Tmp.FromXml(SubItem, 'Entry')
|
||||
Package.SetProtocolList(Package.GetProtocolList() + [GuidProtocolPpi])
|
||||
|
||||
if XmlList(Item, '/PackageSurfaceArea/ProtocolDeclarations') and not \
|
||||
XmlList(Item, '/PackageSurfaceArea/ProtocolDeclarations/Entry'):
|
||||
Package.SetProtocolList([None])
|
||||
|
||||
#
|
||||
# Ppi
|
||||
#
|
||||
for SubItem in XmlList(Item, '/PackageSurfaceArea/PpiDeclarations/Entry'):
|
||||
Tmp = PpiXml('Package')
|
||||
GuidProtocolPpi = Tmp.FromXml(SubItem, 'Entry')
|
||||
Package.SetPpiList(Package.GetPpiList() + [GuidProtocolPpi])
|
||||
|
||||
if XmlList(Item, '/PackageSurfaceArea/PpiDeclarations') and not \
|
||||
XmlList(Item, '/PackageSurfaceArea/PpiDeclarations/Entry'):
|
||||
Package.SetPpiList([None])
|
||||
|
||||
#
|
||||
# PcdEntry
|
||||
#
|
||||
for SubItem in XmlList(Item, '/PackageSurfaceArea/PcdDeclarations/PcdEntry'):
|
||||
Tmp = PcdEntryXml()
|
||||
PcdEntry = Tmp.FromXml2(SubItem, 'PcdEntry')
|
||||
Package.SetPcdList(Package.GetPcdList() + [PcdEntry])
|
||||
|
||||
if XmlList(Item, '/PackageSurfaceArea/PcdDeclarations') and not \
|
||||
XmlList(Item, '/PackageSurfaceArea/PcdDeclarations/PcdEntry'):
|
||||
Package.SetPcdList([None])
|
||||
|
||||
#
|
||||
# PcdCheck
|
||||
#
|
||||
for SubItem in XmlList(Item, '/PackageSurfaceArea/PcdRelationshipChecks/PcdCheck'):
|
||||
Tmp = PcdCheckXml()
|
||||
PcdCheck = Tmp.FromXml(SubItem, 'PcdCheck')
|
||||
Package.PcdChecks.append(PcdCheck)
|
||||
|
||||
#
|
||||
# Modules
|
||||
#
|
||||
for SubItem in XmlList(Item, '/PackageSurfaceArea/Modules/ModuleSurfaceArea'):
|
||||
Tmp = ModuleSurfaceAreaXml()
|
||||
Module = Tmp.FromXml(SubItem, 'ModuleSurfaceArea')
|
||||
Package.ModuleDict[(Module.GetGuid(), Module.GetVersion(), Module.GetModulePath())] = Module
|
||||
#
|
||||
# MiscellaneousFile
|
||||
#
|
||||
Tmp = MiscellaneousFileXml()
|
||||
MiscFileList = Tmp.FromXml(XmlNode(Item, '/PackageSurfaceArea/MiscellaneousFiles'), 'MiscellaneousFiles')
|
||||
if MiscFileList:
|
||||
Package.SetMiscFileList([MiscFileList])
|
||||
else:
|
||||
Package.SetMiscFileList([])
|
||||
|
||||
#
|
||||
# UserExtensions
|
||||
#
|
||||
for Item in XmlList(Item, '/PackageSurfaceArea/UserExtensions'):
|
||||
Tmp = UserExtensionsXml()
|
||||
UserExtension = Tmp.FromXml(Item, 'UserExtensions')
|
||||
Package.UserExtensionList.append(UserExtension)
|
||||
|
||||
self.Package = Package
|
||||
return self.Package
|
||||
|
||||
def ToXml(self, Package):
|
||||
if self.Package:
|
||||
pass
|
||||
#
|
||||
# Create PackageSurfaceArea node
|
||||
#
|
||||
DomPackage = minidom.Document().createElement('PackageSurfaceArea')
|
||||
#
|
||||
# Header
|
||||
#
|
||||
Tmp = PackageHeaderXml()
|
||||
DomPackage.appendChild(Tmp.ToXml(Package, 'Header'))
|
||||
#
|
||||
# ClonedFrom
|
||||
#
|
||||
Tmp = ClonedFromXml()
|
||||
if Package.GetClonedFromList() != []:
|
||||
DomPackage.appendChild(Tmp.ToXml(Package.GetClonedFromList[0], 'ClonedFrom'))
|
||||
#
|
||||
# LibraryClass
|
||||
#
|
||||
LibraryClassNode = CreateXmlElement('LibraryClassDeclarations', '', [], [])
|
||||
for LibraryClass in Package.GetLibraryClassList():
|
||||
Tmp = LibraryClassXml()
|
||||
LibraryClassNode.appendChild(Tmp.ToXml(LibraryClass, 'LibraryClass'))
|
||||
DomPackage.appendChild(LibraryClassNode)
|
||||
#
|
||||
# IndustryStandardHeader
|
||||
#
|
||||
IndustryStandardHeaderNode = CreateXmlElement('IndustryStandardIncludes', '', [], [])
|
||||
for Include in Package.GetStandardIncludeFileList():
|
||||
Tmp = IndustryStandardHeaderXml()
|
||||
IndustryStandardHeaderNode.appendChild(Tmp.ToXml(Include, 'IndustryStandardHeader'))
|
||||
DomPackage.appendChild(IndustryStandardHeaderNode)
|
||||
#
|
||||
# PackageHeader
|
||||
#
|
||||
PackageIncludeHeaderNode = CreateXmlElement('PackageIncludes', '', [], [])
|
||||
for Include in Package.GetPackageIncludeFileList():
|
||||
Tmp = PackageIncludeHeaderXml()
|
||||
PackageIncludeHeaderNode.appendChild(Tmp.ToXml(Include, 'PackageHeader'))
|
||||
DomPackage.appendChild(PackageIncludeHeaderNode)
|
||||
ModuleNode = CreateXmlElement('Modules', '', [], [])
|
||||
for Module in Package.GetModuleDict().values():
|
||||
Tmp = ModuleSurfaceAreaXml()
|
||||
ModuleNode.appendChild(Tmp.ToXml(Module))
|
||||
DomPackage.appendChild(ModuleNode)
|
||||
#
|
||||
# Guid
|
||||
#
|
||||
GuidProtocolPpiNode = CreateXmlElement('GuidDeclarations', '', [], [])
|
||||
for GuidProtocolPpi in Package.GetGuidList():
|
||||
Tmp = GuidXml('Package')
|
||||
GuidProtocolPpiNode.appendChild(Tmp.ToXml\
|
||||
(GuidProtocolPpi, 'Entry'))
|
||||
DomPackage.appendChild(GuidProtocolPpiNode)
|
||||
#
|
||||
# Protocol
|
||||
#
|
||||
GuidProtocolPpiNode = \
|
||||
CreateXmlElement('ProtocolDeclarations', '', [], [])
|
||||
for GuidProtocolPpi in Package.GetProtocolList():
|
||||
Tmp = ProtocolXml('Package')
|
||||
GuidProtocolPpiNode.appendChild\
|
||||
(Tmp.ToXml(GuidProtocolPpi, 'Entry'))
|
||||
DomPackage.appendChild(GuidProtocolPpiNode)
|
||||
#
|
||||
# Ppi
|
||||
#
|
||||
GuidProtocolPpiNode = CreateXmlElement('PpiDeclarations', '', [], [])
|
||||
for GuidProtocolPpi in Package.GetPpiList():
|
||||
Tmp = PpiXml('Package')
|
||||
GuidProtocolPpiNode.appendChild\
|
||||
(Tmp.ToXml(GuidProtocolPpi, 'Entry'))
|
||||
DomPackage.appendChild(GuidProtocolPpiNode)
|
||||
#
|
||||
# PcdEntry
|
||||
#
|
||||
PcdEntryNode = CreateXmlElement('PcdDeclarations', '', [], [])
|
||||
for PcdEntry in Package.GetPcdList():
|
||||
Tmp = PcdEntryXml()
|
||||
PcdEntryNode.appendChild(Tmp.ToXml2(PcdEntry, 'PcdEntry'))
|
||||
DomPackage.appendChild(PcdEntryNode)
|
||||
|
||||
#
|
||||
# MiscellaneousFile
|
||||
#
|
||||
Tmp = MiscellaneousFileXml()
|
||||
if Package.GetMiscFileList():
|
||||
DomPackage.appendChild(Tmp.ToXml(Package.GetMiscFileList()[0], 'MiscellaneousFiles'))
|
||||
|
||||
#
|
||||
# UserExtensions
|
||||
#
|
||||
if Package.GetUserExtensionList():
|
||||
for UserExtension in Package.GetUserExtensionList():
|
||||
Tmp = UserExtensionsXml()
|
||||
DomPackage.appendChild(Tmp.ToXml(UserExtension, 'UserExtensions'))
|
||||
|
||||
return DomPackage
|
Reference in New Issue
Block a user