## @file # This file is used to parse a Package file of .PKG file # # Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.
# # 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]) # # 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