https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Bob Feng <bob.c.feng@intel.com>
		
			
				
	
	
		
			403 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			403 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| ## @file
 | |
| # This file is used to parse a Package file of .PKG file
 | |
| #
 | |
| # Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
 | |
| #
 | |
| # SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| #
 | |
| 
 | |
| '''
 | |
| PackageSurfaceAreaXml
 | |
| '''
 | |
| from xml.dom import minidom
 | |
| 
 | |
| from Library.StringUtils 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])
 | |
| 
 | |
|             #
 | |
|             # Get PcdErrorCommentDict from PcdError in PcdEntry Node
 | |
|             #
 | |
|             for PcdErrorObj in PcdEntry.GetPcdErrorsList():
 | |
|                 PcdErrorMessageList = PcdErrorObj.GetErrorMessageList()
 | |
|                 if PcdErrorMessageList:
 | |
|                     Package.PcdErrorCommentDict[(PcdEntry.GetTokenSpaceGuidCName(), PcdErrorObj.GetErrorNumber())] = \
 | |
|                     PcdErrorMessageList
 | |
| 
 | |
| 
 | |
|         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')
 | |
|             ModuleDictKey = (Module.GetGuid(), Module.GetVersion(), Module.GetName(), Module.GetModulePath())
 | |
|             Package.ModuleDict[ModuleDictKey] = 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
 |