The patch 5a57246eab Rename String to StringUtils, but it didn't
update the UPT Tool for the import statement which cause UPT tool
break.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Yonghong Zhu <yonghong.zhu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
		
	
		
			
				
	
	
		
			409 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			409 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>
 | 
						|
#
 | 
						|
# 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.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
 |