Fix an issue of storing wrong PCD into XML file to only store PcdEx for AsBuilt sections Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hess Chen <hesheng.chen@intel.com> Reviewed-by: Yingke Liu <yingke.d.liu@Intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16426 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			1010 lines
		
	
	
		
			37 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			1010 lines
		
	
	
		
			37 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| ## @file
 | |
| # This file is used to parse a Module file of .PKG file
 | |
| #
 | |
| # Copyright (c) 2011 - 2014, 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.
 | |
| #
 | |
| 
 | |
| '''
 | |
| ModuleSurfaceAreaXml
 | |
| '''
 | |
| from xml.dom import minidom
 | |
| 
 | |
| from Library.String import ConvertNEToNOTEQ
 | |
| from Library.String import ConvertNOTEQToNE
 | |
| from Library.String import GetStringOfList
 | |
| from Library.String import IsMatchArch
 | |
| from Library.Xml.XmlRoutines import XmlElement
 | |
| from Library.Xml.XmlRoutines import XmlAttribute
 | |
| from Library.Xml.XmlRoutines import XmlNode
 | |
| from Library.Xml.XmlRoutines import XmlList
 | |
| from Library.Xml.XmlRoutines import CreateXmlElement
 | |
| from Object.POM.CommonObject import GuidVersionObject
 | |
| from Object.POM.ModuleObject import BootModeObject
 | |
| from Object.POM.ModuleObject import DepexObject
 | |
| from Object.POM.ModuleObject import ModuleObject
 | |
| from Object.POM.ModuleObject import EventObject
 | |
| from Object.POM.ModuleObject import HobObject
 | |
| from Object.POM.ModuleObject import SourceFileObject
 | |
| from Object.POM.ModuleObject import PackageDependencyObject
 | |
| from Object.POM.ModuleObject import ExternObject
 | |
| from Object.POM.ModuleObject import BinaryFileObject
 | |
| from Object.POM.ModuleObject import AsBuiltObject
 | |
| from Object.POM.ModuleObject import BinaryBuildFlagObject
 | |
| from Xml.CommonXml import ClonedFromXml
 | |
| from Xml.CommonXml import HeaderXml
 | |
| 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.CommonXml import FilenameXml
 | |
| from Xml.GuidProtocolPpiXml import GuidXml
 | |
| from Xml.GuidProtocolPpiXml import ProtocolXml
 | |
| from Xml.GuidProtocolPpiXml import PpiXml
 | |
| from Xml.PcdXml import PcdEntryXml
 | |
| from Xml.XmlParserMisc import GetHelpTextList
 | |
| from Library import GlobalData
 | |
| from Library.Misc import GetSplitValueList
 | |
| 
 | |
| ##   BinaryFileXml
 | |
| #
 | |
| #    represent the following XML item
 | |
| #
 | |
| #    <BinaryFile>
 | |
| #    <Filename
 | |
| #    FileType=" FileType " {1}
 | |
| #    SupArchList=" ArchListType " {0,1}
 | |
| #    FeatureFlag=" FeatureFlagExpression " {0,1} >
 | |
| #    xs:anyURI
 | |
| #    </Filename> {1,}
 | |
| #    <AsBuilt> ... </AsBuilt> {0,}
 | |
| #    </BinaryFile> {1,}
 | |
| #
 | |
| class BinaryFileXml(object):
 | |
|     def __init__(self):
 | |
|         self.FileNames = []
 | |
|         self.AsBuiltList = []
 | |
|         self.PatchPcdValues = ''
 | |
|         self.PcdExValues = ''
 | |
|         self.LibraryInstances = ''
 | |
|         self.BuildFlags = ''
 | |
| 
 | |
|     def FromXml(self, Item, Key):
 | |
|         if self.FileNames:
 | |
|             pass
 | |
|         BinaryFile = BinaryFileObject()
 | |
|         FilenameList = []
 | |
|         SupArchList = ['COMMON']
 | |
|         for SubItem in XmlList(Item, '%s/Filename' % Key):
 | |
|             Axml = FilenameXml()
 | |
|             Bxml = Axml.FromXml(SubItem, 'Filename')
 | |
|             FilenameList.append(Bxml)
 | |
|         BinaryFile.SetFileNameList(FilenameList)
 | |
|         for FileName in FilenameList:
 | |
|             if FileName.GetSupArchList():
 | |
|                 SupArchList = FileName.GetSupArchList()
 | |
|         BinaryFile.SetSupArchList(SupArchList)
 | |
|         if GlobalData.gIS_BINARY_INF:
 | |
|             AsBuiltList = []
 | |
|             for AsBuiltItem in XmlList(Item, '%s/AsBuilt' % Key):
 | |
|                 AsBuilt = AsBuiltObject()
 | |
| 
 | |
|                 PatchPcdValueList = []
 | |
|                 for SubItem in XmlList(AsBuiltItem, 'AsBuilt/PatchPcdValue'):
 | |
|                     Axml = PcdEntryXml()
 | |
|                     Bxml = Axml.FromXml(SubItem, 'PatchPcdValue')
 | |
|                     PatchPcdValueList.append(Bxml)
 | |
|                 AsBuilt.SetPatchPcdList(PatchPcdValueList)
 | |
|                 PcdExValueList = []
 | |
|                 for SubItem in XmlList(AsBuiltItem, 'AsBuilt/PcdExValue'):
 | |
|                     Axml = PcdEntryXml()
 | |
|                     Bxml = Axml.FromXml(SubItem, 'PcdExValue')
 | |
|                     PcdExValueList.append(Bxml)
 | |
|                 AsBuilt.SetPcdExList(PcdExValueList)
 | |
|                 LibraryList = []
 | |
|                 for SubItem in XmlList(Item, '%s/AsBuilt/LibraryInstances/GUID' % Key):
 | |
|                     GuidVerObj = GuidVersionObject()
 | |
|                     GUID = XmlElement(SubItem, 'GUID')
 | |
|                     Version = XmlAttribute(XmlNode(SubItem, 'GUID'), 'Version')
 | |
|                     GuidVerObj.SetGuid(GUID)
 | |
|                     GuidVerObj.SetVersion(Version)
 | |
|                     LibraryList.append(GuidVerObj)
 | |
|                 if XmlList(Item, '%s/AsBuilt/LibraryInstances' % Key) and not LibraryList:
 | |
|                     LibraryList = [None]
 | |
|                 AsBuilt.SetLibraryInstancesList(LibraryList)
 | |
|                 BuildFlagList = []
 | |
|                 for SubItem in XmlList(Item, '%s/AsBuilt/BuildFlags' % Key):
 | |
|                     BuildFlag = BuildFlagXml()
 | |
|                     BuildFlagList.append(BuildFlag.FromXml2(SubItem, 'BuildFlags'))
 | |
|                 AsBuilt.SetBuildFlagsList(BuildFlagList)
 | |
|                 AsBuiltList.append(AsBuilt)
 | |
|             BinaryFile.SetAsBuiltList(AsBuiltList)
 | |
|         return BinaryFile
 | |
| 
 | |
|     def ToXml(self, BinaryFile, Key):
 | |
|         if self.FileNames:
 | |
|             pass
 | |
|         NodeList = []
 | |
|         FilenameList = BinaryFile.GetFileNameList()
 | |
|         SupportArch = None
 | |
|         for Filename in FilenameList:
 | |
|             Tmp = FilenameXml()
 | |
|             NodeList.append(Tmp.ToXml(Filename, 'Filename'))
 | |
|             SupportArch = Filename.SupArchList
 | |
| 
 | |
|         AsBuildList = BinaryFile.GetAsBuiltList()
 | |
|         PatchPcdValueList = AsBuildList.GetPatchPcdList()
 | |
|         PcdExList = AsBuildList.GetPcdExList()
 | |
|         LibGuidVerList = AsBuildList.GetLibraryInstancesList()
 | |
|         BuildFlagList = AsBuildList.GetBuildFlagsList()
 | |
| 
 | |
|         AsBuiltNodeList = []
 | |
| 
 | |
|         for Pcd in PatchPcdValueList:
 | |
|             if IsMatchArch(Pcd.SupArchList, SupportArch):
 | |
|                 Tmp = PcdEntryXml()
 | |
|                 AsBuiltNodeList.append(Tmp.ToXml4(Pcd, 'PatchPcdValue'))
 | |
| 
 | |
|         for Pcd in PcdExList:
 | |
|             if IsMatchArch(Pcd.SupArchList, SupportArch):
 | |
|                 Tmp = PcdEntryXml()
 | |
|                 AsBuiltNodeList.append(Tmp.ToXml4(Pcd, 'PcdExValue'))
 | |
| 
 | |
|         GuiVerElemList = []
 | |
|         for LibGuidVer in LibGuidVerList:
 | |
|             if LibGuidVer.GetLibGuid() and IsMatchArch(LibGuidVer.GetSupArchList(), SupportArch):
 | |
|                 GuiVerElem = \
 | |
|                 CreateXmlElement('GUID', LibGuidVer.GetLibGuid(), [], [['Version', LibGuidVer.GetLibVersion()]])
 | |
|                 GuiVerElemList.append(GuiVerElem)
 | |
|         if len(GuiVerElemList) > 0:
 | |
|             LibGuidVerElem = CreateXmlElement('LibraryInstances', '', GuiVerElemList, [])
 | |
|             AsBuiltNodeList.append(LibGuidVerElem)
 | |
| 
 | |
|         for BuildFlag in BuildFlagList:
 | |
|             if IsMatchArch(BuildFlag.GetSupArchList(), SupportArch):
 | |
|                 for Item in BuildFlag.GetAsBuildList():
 | |
|                     Tmp = BuildFlagXml()
 | |
|                     Elem = CreateXmlElement('BuildFlags', ''.join(Item), [], [])
 | |
|                     AsBuiltNodeList.append(Elem)
 | |
| 
 | |
|         if len(AsBuiltNodeList) > 0:
 | |
|             Element = CreateXmlElement('AsBuilt', '', AsBuiltNodeList, [])
 | |
|             NodeList.append(Element)
 | |
| 
 | |
|         Root = CreateXmlElement('%s' % Key, '', NodeList, [])
 | |
| 
 | |
|         return Root
 | |
| 
 | |
|     def __str__(self):
 | |
|         Str = "BinaryFiles:"
 | |
|         for Item in self.FileNames:
 | |
|             Str = Str + '\n\t' + str(Item)
 | |
|         for Item in self.PatchPcdValues:
 | |
|             Str = Str + '\n\t' + str(Item)
 | |
|         for Item in self.PcdExValues:
 | |
|             Str = Str + '\n\t' + str(Item)
 | |
|         for Item in self.LibraryInstances:
 | |
|             Str = Str + '\n\t' + str(Item)
 | |
|         for Item in self.BuildFlags:
 | |
|             Str = Str + '\n\t' + str(Item)
 | |
|         return Str
 | |
| 
 | |
| ##
 | |
| # PackageXml
 | |
| #
 | |
| class PackageXml(object):
 | |
|     def __init__(self):
 | |
|         self.Description = ''
 | |
|         self.Guid = ''
 | |
|         self.Version = ''
 | |
|         self.CommonDefines = CommonDefinesXml()
 | |
| 
 | |
|     def FromXml(self, Item, Key):
 | |
|         self.Description = XmlElement(Item, '%s/Description' % Key)
 | |
|         self.Guid = XmlElement(Item, '%s/GUID' % Key)
 | |
|         self.Version = XmlAttribute(XmlNode(Item, '%s/GUID' % Key), 'Version')
 | |
|         self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)
 | |
| 
 | |
|         PackageDependency = PackageDependencyObject()
 | |
|         PackageDependency.SetPackage(self.Description)
 | |
|         PackageDependency.SetGuid(self.Guid)
 | |
|         PackageDependency.SetVersion(self.Version)
 | |
|         PackageDependency.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))
 | |
|         PackageDependency.SetSupArchList(self.CommonDefines.SupArchList)
 | |
| 
 | |
|         return PackageDependency
 | |
| 
 | |
|     def ToXml(self, PackageDependency, Key):
 | |
|         if self.Guid:
 | |
|             pass
 | |
|         AttributeList = [['SupArchList', GetStringOfList(PackageDependency.GetSupArchList())],
 | |
|                          ['FeatureFlag', ConvertNEToNOTEQ(PackageDependency.GetFeatureFlag())], ]
 | |
|         Element1 = CreateXmlElement('GUID', PackageDependency.GetGuid(), [],
 | |
|                                     [['Version', PackageDependency.GetVersion()]])
 | |
|         NodeList = [['Description', PackageDependency.GetPackage()], Element1, ]
 | |
|         Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
 | |
| 
 | |
|         return Root
 | |
| 
 | |
|     def __str__(self):
 | |
|         Str = "Description = %s Guid = %s Version = %s %s" \
 | |
|               % (self.Description, self.Guid, self.Version, self.CommonDefines)
 | |
|         return Str
 | |
| ##
 | |
| # ExternXml
 | |
| #
 | |
| class ExternXml(object):
 | |
|     def __init__(self):
 | |
|         self.CommonDefines = CommonDefinesXml()
 | |
|         self.EntryPoint = ''
 | |
|         self.UnloadImage = ''
 | |
|         self.Constructor = ''
 | |
|         self.Destructor = ''
 | |
|         self.SupModList = ''
 | |
|         self.SupArchList = ''
 | |
|         self.HelpText = []
 | |
| 
 | |
|     def FromXml(self, Item, Key):
 | |
|         self.CommonDefines.FromXml(Item, Key)
 | |
|         self.EntryPoint = XmlElement(Item, '%s/EntryPoint' % Key)
 | |
|         self.UnloadImage = XmlElement(Item, '%s/UnloadImage' % Key)
 | |
|         self.Constructor = XmlElement(Item, '%s/Constructor' % Key)
 | |
|         self.Destructor = XmlElement(Item, '%s/Destructor' % Key)
 | |
| 
 | |
|         Extern = ExternObject()
 | |
|         Extern.SetEntryPoint(self.EntryPoint)
 | |
|         Extern.SetUnloadImage(self.UnloadImage)
 | |
|         Extern.SetConstructor(self.Constructor)
 | |
|         Extern.SetDestructor(self.Destructor)
 | |
|         if self.CommonDefines.SupModList:
 | |
|             Extern.SetSupModList(self.CommonDefines.SupModList)
 | |
|         if self.CommonDefines.SupArchList:
 | |
|             Extern.SetSupArchList(self.CommonDefines.SupArchList)
 | |
|         return Extern
 | |
| 
 | |
|     def ToXml(self, Extern, Key):
 | |
|         if self.HelpText:
 | |
|             pass
 | |
| 
 | |
|         NodeList = []
 | |
|         if Extern.GetEntryPoint():
 | |
|             NodeList.append(['EntryPoint', Extern.GetEntryPoint()])
 | |
|         if Extern.GetUnloadImage():
 | |
|             NodeList.append(['UnloadImage', Extern.GetUnloadImage()])
 | |
|         if Extern.GetConstructor():
 | |
|             NodeList.append(['Constructor', Extern.GetConstructor()])
 | |
|         if Extern.GetDestructor():
 | |
|             NodeList.append(['Destructor', Extern.GetDestructor()])
 | |
|         Root = CreateXmlElement('%s' % Key, '', NodeList, [])
 | |
| 
 | |
|         return Root
 | |
| 
 | |
|     def __str__(self):
 | |
|         Str = "EntryPoint = %s UnloadImage = %s Constructor = %s Destructor = %s %s" \
 | |
|               % (self.EntryPoint, self.UnloadImage, self.Constructor, self.Destructor, self.CommonDefines)
 | |
|         for Item in self.HelpText:
 | |
|             Str = Str + '\n\t' + str(Item)
 | |
|         return Str
 | |
| ##
 | |
| # DepexXml
 | |
| #
 | |
| class DepexXml(object):
 | |
|     def __init__(self):
 | |
|         self.CommonDefines = CommonDefinesXml()
 | |
|         self.Expression = None
 | |
|         self.HelpText = []
 | |
| 
 | |
|     def FromXml(self, Item, Key):
 | |
|         if not Item:
 | |
|             return None
 | |
|         self.CommonDefines.FromXml(Item, Key)
 | |
|         self.Expression = XmlElement(Item, '%s/Expression' % Key)
 | |
|         for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):
 | |
|             HelpTextObj = HelpTextXml()
 | |
|             HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)
 | |
|             self.HelpText.append(HelpTextObj)
 | |
| 
 | |
|         Depex = DepexObject()
 | |
|         Depex.SetDepex(self.Expression)
 | |
|         Depex.SetModuleType(self.CommonDefines.SupModList)
 | |
|         Depex.SetSupArchList(self.CommonDefines.SupArchList)
 | |
|         Depex.SetFeatureFlag(self.CommonDefines.FeatureFlag)
 | |
|         Depex.SetHelpTextList(GetHelpTextList(self.HelpText))
 | |
| 
 | |
|         return Depex
 | |
| 
 | |
|     def ToXml(self, Depex, Key):
 | |
|         if self.HelpText:
 | |
|             pass
 | |
|         AttributeList = [['SupArchList', GetStringOfList(Depex.GetSupArchList())],
 | |
|                          ['SupModList', Depex.GetModuleType()]]
 | |
|         NodeList = [['Expression', Depex.GetDepex()]]
 | |
|         if Depex.GetHelpText():
 | |
|             Tmp = HelpTextXml()
 | |
|             NodeList.append(Tmp.ToXml(Depex.GetHelpText(), 'HelpText'))
 | |
| 
 | |
|         Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
 | |
|         return Root
 | |
| 
 | |
|     def __str__(self):
 | |
|         Str = "Expression = %s" % (self.Expression)
 | |
|         for Item in self.HelpText:
 | |
|             Str = Str + '\n\t' + str(Item)
 | |
|         return Str
 | |
| 
 | |
| ##
 | |
| # BootModeXml
 | |
| #
 | |
| class BootModeXml(object):
 | |
|     def __init__(self):
 | |
|         self.SupportedBootModes = ''
 | |
|         self.CommonDefines = CommonDefinesXml()
 | |
|         self.HelpText = []
 | |
| 
 | |
|     def FromXml(self, Item, Key):
 | |
|         self.SupportedBootModes = \
 | |
|         XmlElement(Item, '%s/SupportedBootModes' % Key)
 | |
|         self.CommonDefines.FromXml(Item, Key)
 | |
|         for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):
 | |
|             HelpTextObj = HelpTextXml()
 | |
|             HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)
 | |
|             self.HelpText.append(HelpTextObj)
 | |
| 
 | |
|         BootMode = BootModeObject()
 | |
|         BootMode.SetSupportedBootModes(self.SupportedBootModes)
 | |
|         BootMode.SetUsage(self.CommonDefines.Usage)
 | |
|         BootMode.SetHelpTextList(GetHelpTextList(self.HelpText))
 | |
| 
 | |
|         return BootMode
 | |
| 
 | |
|     def ToXml(self, BootMode, Key):
 | |
|         if self.HelpText:
 | |
|             pass
 | |
|         AttributeList = [['Usage', BootMode.GetUsage()], ]
 | |
|         NodeList = [['SupportedBootModes', BootMode.GetSupportedBootModes()]]
 | |
|         for Item in BootMode.GetHelpTextList():
 | |
|             Tmp = HelpTextXml()
 | |
|             NodeList.append(Tmp.ToXml(Item, 'HelpText'))
 | |
|         Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
 | |
| 
 | |
|         return Root
 | |
| 
 | |
|     def __str__(self):
 | |
|         Str = "SupportedBootModes = %s %s" % (self.SupportedBootModes, self.CommonDefines)
 | |
|         for Item in self.HelpText:
 | |
|             Str = Str + '\n\t' + str(Item)
 | |
|         return Str
 | |
| ##
 | |
| # EventXml
 | |
| #
 | |
| class EventXml(object):
 | |
|     def __init__(self):
 | |
|         self.EventType = ''
 | |
|         self.Name = ''
 | |
|         self.CommonDefines = CommonDefinesXml()
 | |
|         self.HelpText = []
 | |
| 
 | |
|     def FromXml(self, Item, Key):
 | |
|         self.EventType = XmlAttribute(XmlNode(Item, '%s' % Key), 'EventType')
 | |
|         self.Name = XmlElement(Item, '%s' % Key)
 | |
|         self.CommonDefines.FromXml(Item, Key)
 | |
|         for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):
 | |
|             HelpTextObj = HelpTextXml()
 | |
|             HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)
 | |
|             self.HelpText.append(HelpTextObj)
 | |
| 
 | |
|         Event = EventObject()
 | |
|         Event.SetEventType(self.EventType)
 | |
|         Event.SetUsage(self.CommonDefines.Usage)
 | |
|         Event.SetHelpTextList(GetHelpTextList(self.HelpText))
 | |
| 
 | |
|         return Event
 | |
| 
 | |
|     def ToXml(self, Event, Key):
 | |
|         if self.HelpText:
 | |
|             pass
 | |
|         AttributeList = [['EventType', Event.GetEventType()],
 | |
|                          ['Usage', Event.GetUsage()],
 | |
|                         ]
 | |
|         NodeList = []
 | |
|         for Item in Event.GetHelpTextList():
 | |
|             Tmp = HelpTextXml()
 | |
|             NodeList.append(Tmp.ToXml(Item, 'HelpText'))
 | |
|         Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
 | |
| 
 | |
|         return Root
 | |
| 
 | |
|     def __str__(self):
 | |
|         Str = "EventType = %s %s" % (self.EventType, self.CommonDefines)
 | |
|         for Item in self.HelpText:
 | |
|             Str = Str + '\n\t' + str(Item)
 | |
|         return Str
 | |
| ##
 | |
| # HobXml
 | |
| #
 | |
| class HobXml(object):
 | |
|     def __init__(self):
 | |
|         self.HobType = ''
 | |
|         self.Name = ''
 | |
|         self.CommonDefines = CommonDefinesXml()
 | |
|         self.HelpText = []
 | |
| 
 | |
|     def FromXml(self, Item, Key):
 | |
|         self.HobType = XmlAttribute(XmlNode(Item, '%s' % Key), 'HobType')
 | |
|         self.Name = XmlElement(Item, '%s' % Key)
 | |
|         self.CommonDefines.FromXml(Item, Key)
 | |
|         for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):
 | |
|             HelpTextObj = HelpTextXml()
 | |
|             HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)
 | |
|             self.HelpText.append(HelpTextObj)
 | |
| 
 | |
|         Hob = HobObject()
 | |
|         Hob.SetHobType(self.HobType)
 | |
|         Hob.SetSupArchList(self.CommonDefines.SupArchList)
 | |
|         Hob.SetUsage(self.CommonDefines.Usage)
 | |
|         Hob.SetHelpTextList(GetHelpTextList(self.HelpText))
 | |
| 
 | |
|         return Hob
 | |
| 
 | |
|     def ToXml(self, Hob, Key):
 | |
|         if self.Name:
 | |
|             pass
 | |
|         AttributeList = [['HobType', Hob.GetHobType()],
 | |
|                          ['Usage', Hob.GetUsage()],
 | |
|                          ['SupArchList', GetStringOfList(Hob.GetSupArchList())], ]
 | |
|         NodeList = []
 | |
|         for Item in Hob.GetHelpTextList():
 | |
|             Tmp = HelpTextXml()
 | |
|             NodeList.append(Tmp.ToXml(Item, 'HelpText'))
 | |
|         Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
 | |
| 
 | |
|         return Root
 | |
| 
 | |
|     def __str__(self):
 | |
|         Str = "HobType = %s %s" % (self.HobType, self.CommonDefines)
 | |
|         for Item in self.HelpText:
 | |
|             Str = Str + '\n\t' + str(Item)
 | |
|         return Str
 | |
| 
 | |
| ##
 | |
| # SourceFileXml
 | |
| #
 | |
| class SourceFileXml(object):
 | |
|     def __init__(self):
 | |
|         self.SourceFile = ''
 | |
|         self.ToolChainFamily = ''
 | |
|         self.FileType = ''
 | |
|         self.CommonDefines = CommonDefinesXml()
 | |
| 
 | |
|     def FromXml(self, Item, Key):
 | |
|         self.ToolChainFamily = XmlAttribute(Item, 'Family')
 | |
|         self.SourceFile = XmlElement(Item, 'Filename')
 | |
|         self.CommonDefines.FromXml(Item, Key)
 | |
| 
 | |
|         self.CommonDefines.FeatureFlag = ConvertNOTEQToNE(self.CommonDefines.FeatureFlag)
 | |
| 
 | |
|         SourceFile = SourceFileObject()
 | |
|         SourceFile.SetSourceFile(self.SourceFile)
 | |
|         SourceFile.SetFamily(self.ToolChainFamily)
 | |
|         SourceFile.SetSupArchList(self.CommonDefines.SupArchList)
 | |
|         SourceFile.SetFeatureFlag(self.CommonDefines.FeatureFlag)
 | |
| 
 | |
|         return SourceFile
 | |
| 
 | |
|     def ToXml(self, SourceFile, Key):
 | |
|         if self.SourceFile:
 | |
|             pass
 | |
|         FeatureFlag = ConvertNEToNOTEQ(SourceFile.GetFeatureFlag())
 | |
|         AttributeList = [['SupArchList', GetStringOfList(SourceFile.GetSupArchList())],
 | |
|                          ['Family', SourceFile.GetFamily()],
 | |
|                          ['FeatureFlag', FeatureFlag], ]
 | |
|         Root = CreateXmlElement('%s' % Key, SourceFile.GetSourceFile(), [], AttributeList)
 | |
|         return Root
 | |
| 
 | |
| ##
 | |
| # ModulePropertyXml
 | |
| #
 | |
| class ModulePropertyXml(object):
 | |
|     def __init__(self):
 | |
|         self.CommonDefines = CommonDefinesXml()
 | |
|         self.ModuleType = ''
 | |
|         self.Path = ''
 | |
|         self.PcdIsDriver = ''
 | |
|         self.UefiSpecificationVersion = ''
 | |
|         self.PiSpecificationVersion = ''
 | |
|         self.SpecificationList = []
 | |
|         self.SpecificationVersion = ''
 | |
|         self.BootModes = []
 | |
|         self.Events = []
 | |
|         self.HOBs = []
 | |
| 
 | |
|     def FromXml(self, Item, Key, Header=None):
 | |
|         self.CommonDefines.FromXml(Item, Key)
 | |
|         self.ModuleType = XmlElement(Item, '%s/ModuleType' % Key)
 | |
|         self.Path = XmlElement(Item, '%s/Path' % Key)
 | |
|         self.PcdIsDriver = XmlElement(Item, '%s/PcdIsDriver' % Key)
 | |
|         self.UefiSpecificationVersion = XmlElement(Item, '%s/UefiSpecificationVersion' % Key)
 | |
|         self.PiSpecificationVersion = XmlElement(Item, '%s/PiSpecificationVersion' % Key)
 | |
|         for SubItem in XmlList(Item, '%s/Specification' % Key):
 | |
|             Specification = XmlElement(SubItem, '/Specification')
 | |
|             Version = XmlAttribute(XmlNode(SubItem, '/Specification'), 'Version')
 | |
|             self.SpecificationList.append((Specification, Version))
 | |
|         for SubItem in XmlList(Item, '%s/BootMode' % Key):
 | |
|             Axml = BootModeXml()
 | |
|             BootMode = Axml.FromXml(SubItem, 'BootMode')
 | |
|             self.BootModes.append(BootMode)
 | |
|         for SubItem in XmlList(Item, '%s/Event' % Key):
 | |
|             Axml = EventXml()
 | |
|             Event = Axml.FromXml(SubItem, 'Event')
 | |
|             self.Events.append(Event)
 | |
|         for SubItem in XmlList(Item, '%s/HOB' % Key):
 | |
|             Axml = HobXml()
 | |
|             Hob = Axml.FromXml(SubItem, 'HOB')
 | |
|             self.HOBs.append(Hob)
 | |
| 
 | |
|         if Header == None:
 | |
|             Header = ModuleObject()
 | |
| 
 | |
|         Header.SetModuleType(self.ModuleType)
 | |
|         Header.SetSupArchList(self.CommonDefines.SupArchList)
 | |
|         Header.SetModulePath(self.Path)
 | |
| 
 | |
|         Header.SetPcdIsDriver(self.PcdIsDriver)
 | |
|         Header.SetUefiSpecificationVersion(self.UefiSpecificationVersion)
 | |
|         Header.SetPiSpecificationVersion(self.PiSpecificationVersion)
 | |
|         Header.SetSpecList(self.SpecificationList)
 | |
| 
 | |
|         return Header, self.BootModes, self.Events, self.HOBs
 | |
| 
 | |
| 
 | |
|     def ToXml(self, Header, BootModes, Events, Hobs, Key):
 | |
|         if self.ModuleType:
 | |
|             pass
 | |
|         AttributeList = [['SupArchList', GetStringOfList(Header.GetSupArchList())], ]
 | |
| 
 | |
|         NodeList = [['ModuleType', Header.GetModuleType()],
 | |
|                     ['Path', Header.GetModulePath()],
 | |
|                     ['PcdIsDriver', Header.GetPcdIsDriver()],
 | |
|                     ['UefiSpecificationVersion', Header.GetUefiSpecificationVersion()],
 | |
|                     ['PiSpecificationVersion', Header.GetPiSpecificationVersion()],
 | |
|                    ]
 | |
|         for Item in Header.GetSpecList():
 | |
|             Spec, Version = Item
 | |
|             SpecElem = CreateXmlElement('Specification', Spec, [], [['Version', Version]])
 | |
|             NodeList.append(SpecElem)
 | |
| 
 | |
|         for Item in BootModes:
 | |
|             Tmp = BootModeXml()
 | |
|             NodeList.append(Tmp.ToXml(Item, 'BootMode'))
 | |
|         for Item in Events:
 | |
|             Tmp = EventXml()
 | |
|             NodeList.append(Tmp.ToXml(Item, 'Event'))
 | |
|         for Item in Hobs:
 | |
|             Tmp = HobXml()
 | |
|             NodeList.append(Tmp.ToXml(Item, 'HOB'))
 | |
|         Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
 | |
| 
 | |
|         return Root
 | |
| 
 | |
|     def __str__(self):
 | |
|         Str = "ModuleType = %s Path = %s PcdIsDriver = %s UefiSpecificationVersion = %s PiSpecificationVersion = %s \
 | |
|                Specification = %s SpecificationVersion = %s %s" % \
 | |
|         (self.ModuleType, self.Path, self.PcdIsDriver, \
 | |
|          self.UefiSpecificationVersion, self.PiSpecificationVersion, \
 | |
|          self.SpecificationList, self.SpecificationVersion, self.CommonDefines)
 | |
|         for Item in self.BootModes:
 | |
|             Str = Str + '\n\t' + str(Item)
 | |
|         for Item in self.Events:
 | |
|             Str = Str + '\n\t' + str(Item)
 | |
|         for Item in self.HOBs:
 | |
|             Str = Str + '\n\t' + str(Item)
 | |
|         return Str
 | |
| 
 | |
| ##
 | |
| # ModuleXml
 | |
| #
 | |
| class ModuleSurfaceAreaXml(object):
 | |
|     def __init__(self, Package=''):
 | |
|         self.Module = None
 | |
|         #
 | |
|         # indicate the package that this module resides in
 | |
|         #
 | |
|         self.Package = Package
 | |
| 
 | |
|     def FromXml2(self, Item, Module):
 | |
|         if self.Module:
 | |
|             pass
 | |
|         #
 | |
|         # PeiDepex
 | |
|         #
 | |
|         PeiDepexList = []
 | |
|         for SubItem in XmlList(Item, '/ModuleSurfaceArea/PeiDepex'):
 | |
|             Tmp = DepexXml()
 | |
|             Depex = Tmp.FromXml(XmlNode(SubItem, 'PeiDepex'), 'PeiDepex')
 | |
|             PeiDepexList.append(Depex)
 | |
|         Module.SetPeiDepex(PeiDepexList)
 | |
| 
 | |
|         #
 | |
|         # DxeDepex
 | |
|         #
 | |
|         DxeDepexList = []
 | |
|         for SubItem in XmlList(Item, '/ModuleSurfaceArea/DxeDepex'):
 | |
|             Tmp = DepexXml()
 | |
|             Depex = Tmp.FromXml(XmlNode(SubItem, 'DxeDepex'), 'DxeDepex')
 | |
|             DxeDepexList.append(Depex)
 | |
|         Module.SetDxeDepex(DxeDepexList)
 | |
| 
 | |
|         #
 | |
|         # SmmDepex
 | |
|         #
 | |
|         SmmDepexList = []
 | |
|         for SubItem in XmlList(Item, '/ModuleSurfaceArea/SmmDepex'):
 | |
|             Tmp = DepexXml()
 | |
|             Depex = Tmp.FromXml(XmlNode(SubItem, 'SmmDepex'), 'SmmDepex')
 | |
|             SmmDepexList.append(Depex)
 | |
|         Module.SetSmmDepex(SmmDepexList)
 | |
| 
 | |
|         #
 | |
|         # MiscellaneousFile
 | |
|         Tmp = MiscellaneousFileXml()
 | |
|         MiscFileList = Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/MiscellaneousFiles'), 'MiscellaneousFiles')
 | |
|         if MiscFileList:
 | |
|             Module.SetMiscFileList([MiscFileList])
 | |
|         else:
 | |
|             Module.SetMiscFileList([])
 | |
| 
 | |
|         #
 | |
|         # UserExtensions
 | |
|         #
 | |
|         for Item in XmlList(Item, '/ModuleSurfaceArea/UserExtensions'):
 | |
|             Tmp = UserExtensionsXml()
 | |
|             UserExtension = Tmp.FromXml(Item, 'UserExtensions')
 | |
|             Module.SetUserExtensionList(Module.GetUserExtensionList() + [UserExtension])
 | |
| 
 | |
|         return Module
 | |
| 
 | |
|     def FromXml(self, Item, Key, IsStandAlongModule=False):
 | |
|         IsBinaryModule = XmlAttribute(Item, 'BinaryModule')
 | |
|         #
 | |
|         # Header
 | |
|         #
 | |
|         Tmp = HeaderXml()
 | |
|         Module = Tmp.FromXml(XmlNode(Item, '/%s/Header' % Key), 'Header', True, IsStandAlongModule)
 | |
|         Module.SetBinaryModule(IsBinaryModule)
 | |
| 
 | |
|         if IsBinaryModule:
 | |
|             GlobalData.gIS_BINARY_INF = True
 | |
| 
 | |
|         #
 | |
|         # ModuleProperties
 | |
|         #
 | |
|         Tmp = ModulePropertyXml()
 | |
|         (Module, BootModes, Events, HOBs) = \
 | |
|         Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/ModuleProperties'), 'ModuleProperties', Module)
 | |
|         Module.SetBootModeList(BootModes)
 | |
|         Module.SetEventList(Events)
 | |
|         Module.SetHobList(HOBs)
 | |
|         #
 | |
|         # ClonedFrom
 | |
|         #
 | |
|         Tmp = ClonedFromXml()
 | |
|         ClonedFrom = Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/ClonedFrom'), 'ClonedFrom')
 | |
|         if ClonedFrom:
 | |
|             Module.SetClonedFrom(ClonedFrom)
 | |
| 
 | |
|         #
 | |
|         # LibraryClass
 | |
|         #
 | |
|         for SubItem in XmlList(Item, '/ModuleSurfaceArea/LibraryClassDefinitions/LibraryClass'):
 | |
|             Tmp = LibraryClassXml()
 | |
|             LibraryClass = Tmp.FromXml(SubItem, 'LibraryClass')
 | |
|             Module.SetLibraryClassList(Module.GetLibraryClassList() + [LibraryClass])
 | |
| 
 | |
|         if XmlList(Item, '/ModuleSurfaceArea/LibraryClassDefinitions') and \
 | |
|            not XmlList(Item, '/ModuleSurfaceArea/LibraryClassDefinitions/LibraryClass'):
 | |
|             Module.SetLibraryClassList([None])
 | |
| 
 | |
|         #
 | |
|         # SourceFiles
 | |
|         #
 | |
|         for SubItem in XmlList(Item, '/ModuleSurfaceArea/SourceFiles/Filename'):
 | |
|             Tmp = SourceFileXml()
 | |
|             SourceFile = Tmp.FromXml(SubItem, 'Filename')
 | |
|             Module.SetSourceFileList(Module.GetSourceFileList() + [SourceFile])
 | |
| 
 | |
|         if XmlList(Item, '/ModuleSurfaceArea/SourceFiles') and \
 | |
|            not XmlList(Item, '/ModuleSurfaceArea/SourceFiles/Filename') :
 | |
|             Module.SetSourceFileList([None])
 | |
| 
 | |
|         #
 | |
|         # BinaryFile
 | |
|         #
 | |
|         for SubItem in XmlList(Item, '/ModuleSurfaceArea/BinaryFiles/BinaryFile'):
 | |
|             Tmp = BinaryFileXml()
 | |
|             BinaryFile = Tmp.FromXml(SubItem, 'BinaryFile')
 | |
|             Module.SetBinaryFileList(Module.GetBinaryFileList() + [BinaryFile])
 | |
| 
 | |
|         if XmlList(Item, '/ModuleSurfaceArea/BinaryFiles') and \
 | |
|            not XmlList(Item, '/ModuleSurfaceArea/BinaryFiles/BinaryFile') :
 | |
|             Module.SetBinaryFileList([None])
 | |
|         #
 | |
|         # PackageDependencies
 | |
|         #
 | |
|         for SubItem in XmlList(Item, '/ModuleSurfaceArea/PackageDependencies/Package'):
 | |
|             Tmp = PackageXml()
 | |
|             PackageDependency = Tmp.FromXml(SubItem, 'Package')
 | |
|             Module.SetPackageDependencyList(Module.GetPackageDependencyList() + [PackageDependency])
 | |
| 
 | |
|         if XmlList(Item, '/ModuleSurfaceArea/PackageDependencies') and \
 | |
|            not XmlList(Item, '/ModuleSurfaceArea/PackageDependencies/Package'):
 | |
|             Module.SetPackageDependencyList([None])
 | |
| 
 | |
|         #
 | |
|         # Guid
 | |
|         #
 | |
|         for SubItem in XmlList(Item, '/ModuleSurfaceArea/Guids/GuidCName'):
 | |
|             Tmp = GuidXml('Module')
 | |
|             GuidProtocolPpi = Tmp.FromXml(SubItem, 'GuidCName')
 | |
|             Module.SetGuidList(Module.GetGuidList() + [GuidProtocolPpi])
 | |
| 
 | |
|         if XmlList(Item, '/ModuleSurfaceArea/Guids') and not XmlList(Item, '/ModuleSurfaceArea/Guids/GuidCName'):
 | |
|             Module.SetGuidList([None])
 | |
| 
 | |
|         #
 | |
|         # Protocol
 | |
|         #
 | |
|         for SubItem in XmlList(Item, '/ModuleSurfaceArea/Protocols/Protocol'):
 | |
|             Tmp = ProtocolXml('Module')
 | |
|             GuidProtocolPpi = Tmp.FromXml(SubItem, 'Protocol')
 | |
|             Module.SetProtocolList(Module.GetProtocolList() + [GuidProtocolPpi])
 | |
| 
 | |
|         if XmlList(Item, '/ModuleSurfaceArea/Protocols') and not XmlList(Item, '/ModuleSurfaceArea/Protocols/Protocol'):
 | |
|             Module.SetProtocolList([None])
 | |
| 
 | |
|         #
 | |
|         # Ppi
 | |
|         #
 | |
|         for SubItem in XmlList(Item, '/ModuleSurfaceArea/PPIs/Ppi'):
 | |
|             Tmp = PpiXml('Module')
 | |
|             GuidProtocolPpi = Tmp.FromXml(SubItem, 'Ppi')
 | |
|             Module.SetPpiList(Module.GetPpiList() + [GuidProtocolPpi])
 | |
| 
 | |
|         if XmlList(Item, '/ModuleSurfaceArea/PPIs') and not XmlList(Item, '/ModuleSurfaceArea/PPIs/Ppi'):
 | |
|             Module.SetPpiList([None])
 | |
| 
 | |
|         #
 | |
|         # Extern
 | |
|         #
 | |
|         for SubItem in XmlList(Item, '/ModuleSurfaceArea/Externs/Extern'):
 | |
|             Tmp = ExternXml()
 | |
|             Extern = Tmp.FromXml(SubItem, 'Extern')
 | |
|             Module.SetExternList(Module.GetExternList() + [Extern])
 | |
| 
 | |
|         if XmlList(Item, '/ModuleSurfaceArea/Externs') and not XmlList(Item, '/ModuleSurfaceArea/Externs/Extern'):
 | |
|             Module.SetExternList([None])
 | |
| 
 | |
|         if not Module.GetBinaryModule():
 | |
|             #
 | |
|             # PcdCoded
 | |
|             #
 | |
|             for SubItem in XmlList(Item, '/ModuleSurfaceArea/PcdCoded/PcdEntry'):
 | |
|                 Tmp = PcdEntryXml()
 | |
|                 PcdEntry = Tmp.FromXml3(SubItem, 'PcdEntry')
 | |
|                 Module.SetPcdList(Module.GetPcdList() + [PcdEntry])
 | |
| 
 | |
|             if XmlList(Item, '/ModuleSurfaceArea/PcdCoded') and \
 | |
|                 not XmlList(Item, '/ModuleSurfaceArea/PcdCoded/PcdEntry'):
 | |
|                 Module.SetPcdList([None])
 | |
| 
 | |
|         Module = self.FromXml2(Item, Module)
 | |
|         #
 | |
|         # return the module object
 | |
|         #
 | |
|         self.Module = Module
 | |
|         return self.Module
 | |
| 
 | |
|     def ToXml(self, Module):
 | |
|         if self.Package:
 | |
|             pass
 | |
|         #
 | |
|         # Create root node of module surface area
 | |
|         #
 | |
|         DomModule = minidom.Document().createElement('ModuleSurfaceArea')
 | |
|         if Module.GetBinaryModule():
 | |
|             DomModule.setAttribute('BinaryModule', 'true')
 | |
| 
 | |
|         #
 | |
|         # Header
 | |
|         #
 | |
|         Tmp = HeaderXml()
 | |
|         DomModule.appendChild(Tmp.ToXml(Module, 'Header'))
 | |
|         #
 | |
|         # ModuleProperties
 | |
|         #
 | |
|         Tmp = ModulePropertyXml()
 | |
|         DomModule.appendChild(Tmp.ToXml(Module, Module.GetBootModeList(), Module.GetEventList(), Module.GetHobList(), \
 | |
|                                         'ModuleProperties'))
 | |
|         #
 | |
|         # ClonedFrom
 | |
|         #
 | |
|         Tmp = ClonedFromXml()
 | |
|         if Module.GetClonedFrom():
 | |
|             DomModule.appendChild(Tmp.ToXml(Module.GetClonedFrom(), 'ClonedFrom'))
 | |
|         #
 | |
|         # LibraryClass
 | |
|         #
 | |
|         LibraryClassNode = CreateXmlElement('LibraryClassDefinitions', '', [], [])
 | |
|         for LibraryClass in Module.GetLibraryClassList():
 | |
|             Tmp = LibraryClassXml()
 | |
|             LibraryClassNode.appendChild(Tmp.ToXml2(LibraryClass, 'LibraryClass'))
 | |
|         DomModule.appendChild(LibraryClassNode)
 | |
|         #
 | |
|         # SourceFile
 | |
|         #
 | |
|         SourceFileNode = CreateXmlElement('SourceFiles', '', [], [])
 | |
|         for SourceFile in Module.GetSourceFileList():
 | |
|             Tmp = SourceFileXml()
 | |
|             SourceFileNode.appendChild(Tmp.ToXml(SourceFile, 'Filename'))
 | |
|         DomModule.appendChild(SourceFileNode)
 | |
|         #
 | |
|         # BinaryFile
 | |
|         #
 | |
|         BinaryFileNode = CreateXmlElement('BinaryFiles', '', [], [])
 | |
|         for BinaryFile in Module.GetBinaryFileList():
 | |
|             Tmp = BinaryFileXml()
 | |
|             BinaryFileNode.appendChild(Tmp.ToXml(BinaryFile, 'BinaryFile'))
 | |
|         DomModule.appendChild(BinaryFileNode)
 | |
|         #
 | |
|         # PackageDependencies
 | |
|         #
 | |
|         PackageDependencyNode = CreateXmlElement('PackageDependencies', '', [], [])
 | |
|         for PackageDependency in Module.GetPackageDependencyList():
 | |
|             Tmp = PackageXml()
 | |
|             PackageDependencyNode.appendChild(Tmp.ToXml(PackageDependency, 'Package'))
 | |
|         DomModule.appendChild(PackageDependencyNode)
 | |
| 
 | |
|         #
 | |
|         # Guid
 | |
|         #
 | |
|         GuidProtocolPpiNode = CreateXmlElement('Guids', '', [], [])
 | |
|         for GuidProtocolPpi in Module.GetGuidList():
 | |
|             Tmp = GuidXml('Module')
 | |
|             GuidProtocolPpiNode.appendChild(Tmp.ToXml(GuidProtocolPpi, 'GuidCName'))
 | |
|         DomModule.appendChild(GuidProtocolPpiNode)
 | |
| 
 | |
|         #
 | |
|         # Protocol
 | |
|         #
 | |
|         GuidProtocolPpiNode = CreateXmlElement('Protocols', '', [], [])
 | |
|         for GuidProtocolPpi in Module.GetProtocolList():
 | |
|             Tmp = ProtocolXml('Module')
 | |
|             GuidProtocolPpiNode.appendChild(Tmp.ToXml(GuidProtocolPpi, 'Protocol'))
 | |
|         DomModule.appendChild(GuidProtocolPpiNode)
 | |
| 
 | |
|         #
 | |
|         # Ppi
 | |
|         #
 | |
|         GuidProtocolPpiNode = CreateXmlElement('PPIs', '', [], [])
 | |
|         for GuidProtocolPpi in Module.GetPpiList():
 | |
|             Tmp = PpiXml('Module')
 | |
|             GuidProtocolPpiNode.appendChild(Tmp.ToXml(GuidProtocolPpi, 'Ppi'))
 | |
|         DomModule.appendChild(GuidProtocolPpiNode)
 | |
|         #
 | |
|         # Extern
 | |
|         #
 | |
|         ExternNode = CreateXmlElement('Externs', '', [], [])
 | |
|         for Extern in Module.GetExternList():
 | |
|             Tmp = ExternXml()
 | |
|             ExternNode.appendChild(Tmp.ToXml(Extern, 'Extern'))
 | |
|         DomModule.appendChild(ExternNode)
 | |
|         #
 | |
|         # PcdCoded
 | |
|         #
 | |
|         PcdEntryNode = CreateXmlElement('PcdCoded', '', [], [])
 | |
|         for PcdEntry in Module.GetPcdList():
 | |
|             Tmp = PcdEntryXml()
 | |
|             PcdEntryNode.appendChild(Tmp.ToXml3(PcdEntry, 'PcdEntry'))
 | |
|         DomModule.appendChild(PcdEntryNode)
 | |
| 
 | |
|         #
 | |
|         # PeiDepex
 | |
|         #
 | |
|         if Module.GetPeiDepex():
 | |
|             for Item in Module.GetPeiDepex():
 | |
|                 Tmp = DepexXml()
 | |
|                 DomModule.appendChild(Tmp.ToXml(Item, 'PeiDepex'))
 | |
| 
 | |
|         #
 | |
|         # DxeDepex
 | |
|         #
 | |
|         if Module.GetDxeDepex():
 | |
|             for Item in Module.GetDxeDepex():
 | |
|                 Tmp = DepexXml()
 | |
|                 DomModule.appendChild(Tmp.ToXml(Item, 'DxeDepex'))
 | |
| 
 | |
|         #
 | |
|         # SmmDepex
 | |
|         #
 | |
|         if Module.GetSmmDepex():
 | |
|             for Item in Module.GetSmmDepex():
 | |
|                 Tmp = DepexXml()
 | |
|                 DomModule.appendChild(Tmp.ToXml(Item, 'SmmDepex'))
 | |
| 
 | |
|         #
 | |
|         # MiscellaneousFile
 | |
|         #
 | |
|         if Module.GetMiscFileList():
 | |
|             Tmp = MiscellaneousFileXml()
 | |
|             DomModule.appendChild(Tmp.ToXml(Module.GetMiscFileList()[0], 'MiscellaneousFiles'))
 | |
|         #
 | |
|         # UserExtensions
 | |
|         #
 | |
|         if Module.GetUserExtensionList():
 | |
|             for UserExtension in Module.GetUserExtensionList():
 | |
|                 Tmp = UserExtensionsXml()
 | |
|                 DomModule.appendChild(Tmp.ToXml(UserExtension, 'UserExtensions'))
 | |
| 
 | |
|         return DomModule
 | |
| 
 | |
| ##
 | |
| # BuildFlagXml used to generate BuildFlag for <AsBuilt>
 | |
| #
 | |
| class BuildFlagXml(object):
 | |
|     def __init__(self):
 | |
|         self.Target = ''
 | |
|         self.TagName = ''
 | |
|         self.Family = ''
 | |
|         self.AsBuiltFlags = ''
 | |
| 
 | |
|     def FromXml(self, Item, Key):
 | |
|         self.Target = XmlElement(Item, '%s/Target' % Key)
 | |
|         self.TagName = XmlElement(Item, '%s/TagName' % Key)
 | |
|         self.Family = XmlElement(Item, '%s/Family' % Key)
 | |
| 
 | |
|         BuildFlag = BinaryBuildFlagObject()
 | |
| 
 | |
|         BuildFlag.SetTarget(self.Target)
 | |
|         BuildFlag.SetTagName(self.TagName)
 | |
|         BuildFlag.SetFamily(self.Family)
 | |
| 
 | |
|         return BuildFlag
 | |
| 
 | |
|     #
 | |
|     # For AsBuild INF usage
 | |
|     #
 | |
|     def FromXml2(self, Item, Key):
 | |
|         self.AsBuiltFlags = XmlElement(Item, '%s' % Key)
 | |
| 
 | |
|         LineList = GetSplitValueList(self.AsBuiltFlags, '\n')
 | |
|         ReturnLine = ''
 | |
|         Count = 0
 | |
|         for Line in LineList:
 | |
|             if Count == 0:
 | |
|                 ReturnLine = "# " + Line
 | |
|             else:
 | |
|                 ReturnLine = ReturnLine + '\n' + '# ' + Line
 | |
|             Count += 1
 | |
| 
 | |
|         BuildFlag = BinaryBuildFlagObject()
 | |
|         BuildFlag.SetAsBuiltOptionFlags(ReturnLine)
 | |
| 
 | |
|         return BuildFlag
 | |
| 
 | |
|     def ToXml(self, BuildFlag, Key):
 | |
|         if self.Target:
 | |
|             pass
 | |
|         AttributeList = []
 | |
|         NodeList = []
 | |
|         NodeList.append(['BuildFlags', BuildFlag])
 | |
| 
 | |
|         Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
 | |
|         return Root
 |