]>
git.proxmox.com Git - mirror_edk2.git/blob - BaseTools/Source/Python/UPT/Xml/ModuleSurfaceAreaXml.py
2 # This file is used to parse a Module file of .PKG file
4 # Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
6 # This program and the accompanying materials are licensed and made available
7 # under the terms and conditions of the BSD License which accompanies this
8 # distribution. The full text of the license may be found at
9 # http://opensource.org/licenses/bsd-license.php
11 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
18 from xml
.dom
import minidom
20 from Library
.String
import ConvertNEToNOTEQ
21 from Library
.String
import ConvertNOTEQToNE
22 from Library
.String
import GetStringOfList
23 from Library
.Xml
.XmlRoutines
import XmlElement
24 from Library
.Xml
.XmlRoutines
import XmlAttribute
25 from Library
.Xml
.XmlRoutines
import XmlNode
26 from Library
.Xml
.XmlRoutines
import XmlList
27 from Library
.Xml
.XmlRoutines
import CreateXmlElement
28 from Object
.POM
.CommonObject
import GuidVersionObject
29 from Object
.POM
.ModuleObject
import BootModeObject
30 from Object
.POM
.ModuleObject
import DepexObject
31 from Object
.POM
.ModuleObject
import ModuleObject
32 from Object
.POM
.ModuleObject
import EventObject
33 from Object
.POM
.ModuleObject
import HobObject
34 from Object
.POM
.ModuleObject
import SourceFileObject
35 from Object
.POM
.ModuleObject
import PackageDependencyObject
36 from Object
.POM
.ModuleObject
import ExternObject
37 from Object
.POM
.ModuleObject
import BinaryFileObject
38 from Object
.POM
.ModuleObject
import AsBuiltObject
39 from Object
.POM
.ModuleObject
import BinaryBuildFlagObject
40 from Xml
.CommonXml
import ClonedFromXml
41 from Xml
.CommonXml
import HeaderXml
42 from Xml
.CommonXml
import HelpTextXml
43 from Xml
.CommonXml
import CommonDefinesXml
44 from Xml
.CommonXml
import LibraryClassXml
45 from Xml
.CommonXml
import UserExtensionsXml
46 from Xml
.CommonXml
import MiscellaneousFileXml
47 from Xml
.CommonXml
import FilenameXml
48 from Xml
.GuidProtocolPpiXml
import GuidXml
49 from Xml
.GuidProtocolPpiXml
import ProtocolXml
50 from Xml
.GuidProtocolPpiXml
import PpiXml
51 from Xml
.PcdXml
import PcdEntryXml
52 from Xml
.XmlParserMisc
import GetHelpTextList
53 from Library
import GlobalData
54 from Library
.Misc
import GetSplitValueList
58 # represent the following XML item
62 # FileType=" FileType " {1}
63 # SupArchList=" ArchListType " {0,1}
64 # FeatureFlag=" FeatureFlagExpression " {0,1} >
67 # <AsBuilt> ... </AsBuilt> {0,}
70 class BinaryFileXml(object):
74 self
.PatchPcdValues
= ''
76 self
.LibraryInstances
= ''
79 def FromXml(self
, Item
, Key
):
82 BinaryFile
= BinaryFileObject()
84 for SubItem
in XmlList(Item
, '%s/Filename' % Key
):
86 Bxml
= Axml
.FromXml(SubItem
, 'Filename')
87 FilenameList
.append(Bxml
)
88 BinaryFile
.SetFileNameList(FilenameList
)
89 if GlobalData
.gIS_BINARY_INF
:
91 for AsBuiltItem
in XmlList(Item
, '%s/AsBuilt' % Key
):
92 AsBuilt
= AsBuiltObject()
94 PatchPcdValueList
= []
95 for SubItem
in XmlList(AsBuiltItem
, 'AsBuilt/PatchPcdValue'):
97 Bxml
= Axml
.FromXml(SubItem
, 'PatchPcdValue')
98 PatchPcdValueList
.append(Bxml
)
99 AsBuilt
.SetPatchPcdList(PatchPcdValueList
)
101 for SubItem
in XmlList(AsBuiltItem
, 'AsBuilt/PcdExValue'):
103 Bxml
= Axml
.FromXml(SubItem
, 'PcdExValue')
104 PcdExValueList
.append(Bxml
)
105 AsBuilt
.SetPcdExList(PcdExValueList
)
107 for SubItem
in XmlList(Item
, '%s/AsBuilt/LibraryInstances/GUID' % Key
):
108 GuidVerObj
= GuidVersionObject()
109 GUID
= XmlElement(SubItem
, 'GUID')
110 Version
= XmlAttribute(XmlNode(SubItem
, 'GUID'), 'Version')
111 GuidVerObj
.SetGuid(GUID
)
112 GuidVerObj
.SetVersion(Version
)
113 LibraryList
.append(GuidVerObj
)
114 if XmlList(Item
, '%s/AsBuilt/LibraryInstances' % Key
) and not LibraryList
:
116 AsBuilt
.SetLibraryInstancesList(LibraryList
)
118 for SubItem
in XmlList(Item
, '%s/AsBuilt/BuildFlags' % Key
):
119 BuildFlag
= BuildFlagXml()
120 BuildFlagList
.append(BuildFlag
.FromXml2(SubItem
, 'BuildFlags'))
121 AsBuilt
.SetBuildFlagsList(BuildFlagList
)
122 AsBuiltList
.append(AsBuilt
)
123 BinaryFile
.SetAsBuiltList(AsBuiltList
)
126 def ToXml(self
, BinaryFile
, Key
):
130 FilenameList
= BinaryFile
.GetFileNameList()
131 for Filename
in FilenameList
:
133 NodeList
.append(Tmp
.ToXml(Filename
, 'Filename'))
135 if GlobalData
.gIS_BINARY_INF
:
136 AsBuildList
= BinaryFile
.GetAsBuiltList()
137 PatchPcdValueList
= AsBuildList
.GetPatchPcdList()
138 PcdExList
= AsBuildList
.GetPcdExList()
139 LibGuidVerList
= AsBuildList
.GetLibraryInstancesList()
140 BuildFlagList
= AsBuildList
.GetBuildFlagsList()
144 for Pcd
in PatchPcdValueList
:
146 AsBuiltNodeList
.append(Tmp
.ToXml4(Pcd
, 'PatchPcdValue'))
148 for Pcd
in PcdExList
:
150 AsBuiltNodeList
.append(Tmp
.ToXml4(Pcd
, 'PcdExValue'))
153 for LibGuidVer
in LibGuidVerList
:
155 CreateXmlElement('GUID', LibGuidVer
.GetLibGuid(), [], [['Version', LibGuidVer
.GetLibVersion()]])
156 GuiVerElemList
.append(GuiVerElem
)
157 if len(GuiVerElemList
) > 0:
158 LibGuidVerElem
= CreateXmlElement('LibraryInstances', '', GuiVerElemList
, [])
159 AsBuiltNodeList
.append(LibGuidVerElem
)
161 for BuildFlag
in BuildFlagList
:
163 Elem
= CreateXmlElement('BuildFlags', ''.join(BuildFlag
), [], [])
164 AsBuiltNodeList
.append(Elem
)
166 if len(AsBuiltNodeList
) > 0:
167 Element
= CreateXmlElement('AsBuilt', '', AsBuiltNodeList
, [])
168 NodeList
.append(Element
)
170 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, [])
176 for Item
in self
.FileNames
:
177 Str
= Str
+ '\n\t' + str(Item
)
178 for Item
in self
.PatchPcdValues
:
179 Str
= Str
+ '\n\t' + str(Item
)
180 for Item
in self
.PcdExValues
:
181 Str
= Str
+ '\n\t' + str(Item
)
182 for Item
in self
.LibraryInstances
:
183 Str
= Str
+ '\n\t' + str(Item
)
184 for Item
in self
.BuildFlags
:
185 Str
= Str
+ '\n\t' + str(Item
)
191 class PackageXml(object):
193 self
.Description
= ''
196 self
.CommonDefines
= CommonDefinesXml()
198 def FromXml(self
, Item
, Key
):
199 self
.Description
= XmlElement(Item
, '%s/Description' % Key
)
200 self
.Guid
= XmlElement(Item
, '%s/GUID' % Key
)
201 self
.Version
= XmlAttribute(XmlNode(Item
, '%s/GUID' % Key
), 'Version')
202 self
.CommonDefines
.FromXml(XmlNode(Item
, '%s' % Key
), Key
)
204 PackageDependency
= PackageDependencyObject()
205 PackageDependency
.SetPackage(self
.Description
)
206 PackageDependency
.SetGuid(self
.Guid
)
207 PackageDependency
.SetVersion(self
.Version
)
208 PackageDependency
.SetFeatureFlag(ConvertNOTEQToNE(self
.CommonDefines
.FeatureFlag
))
209 PackageDependency
.SetSupArchList(self
.CommonDefines
.SupArchList
)
211 return PackageDependency
213 def ToXml(self
, PackageDependency
, Key
):
216 AttributeList
= [['SupArchList', GetStringOfList(PackageDependency
.GetSupArchList())],
217 ['FeatureFlag', ConvertNEToNOTEQ(PackageDependency
.GetFeatureFlag())], ]
218 Element1
= CreateXmlElement('GUID', PackageDependency
.GetGuid(), [],
219 [['Version', PackageDependency
.GetVersion()]])
220 NodeList
= [['Description', PackageDependency
.GetPackage()], Element1
, ]
221 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
226 Str
= "Description = %s Guid = %s Version = %s %s" \
227 % (self
.Description
, self
.Guid
, self
.Version
, self
.CommonDefines
)
232 class ExternXml(object):
234 self
.CommonDefines
= CommonDefinesXml()
236 self
.UnloadImage
= ''
237 self
.Constructor
= ''
240 self
.SupArchList
= ''
243 def FromXml(self
, Item
, Key
):
244 self
.CommonDefines
.FromXml(Item
, Key
)
245 self
.EntryPoint
= XmlElement(Item
, '%s/EntryPoint' % Key
)
246 self
.UnloadImage
= XmlElement(Item
, '%s/UnloadImage' % Key
)
247 self
.Constructor
= XmlElement(Item
, '%s/Constructor' % Key
)
248 self
.Destructor
= XmlElement(Item
, '%s/Destructor' % Key
)
250 Extern
= ExternObject()
251 Extern
.SetEntryPoint(self
.EntryPoint
)
252 Extern
.SetUnloadImage(self
.UnloadImage
)
253 Extern
.SetConstructor(self
.Constructor
)
254 Extern
.SetDestructor(self
.Destructor
)
255 if self
.CommonDefines
.SupModList
:
256 Extern
.SetSupModList(self
.CommonDefines
.SupModList
)
257 if self
.CommonDefines
.SupArchList
:
258 Extern
.SetSupArchList(self
.CommonDefines
.SupArchList
)
261 def ToXml(self
, Extern
, Key
):
266 if Extern
.GetEntryPoint():
267 NodeList
.append(['EntryPoint', Extern
.GetEntryPoint()])
268 if Extern
.GetUnloadImage():
269 NodeList
.append(['UnloadImage', Extern
.GetUnloadImage()])
270 if Extern
.GetConstructor():
271 NodeList
.append(['Constructor', Extern
.GetConstructor()])
272 if Extern
.GetDestructor():
273 NodeList
.append(['Destructor', Extern
.GetDestructor()])
274 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, [])
279 Str
= "EntryPoint = %s UnloadImage = %s Constructor = %s Destructor = %s %s" \
280 % (self
.EntryPoint
, self
.UnloadImage
, self
.Constructor
, self
.Destructor
, self
.CommonDefines
)
281 for Item
in self
.HelpText
:
282 Str
= Str
+ '\n\t' + str(Item
)
287 class DepexXml(object):
289 self
.CommonDefines
= CommonDefinesXml()
290 self
.Expression
= None
293 def FromXml(self
, Item
, Key
):
296 self
.CommonDefines
.FromXml(Item
, Key
)
297 self
.Expression
= XmlElement(Item
, '%s/Expression' % Key
)
298 for HelpTextItem
in XmlList(Item
, '%s/HelpText' % Key
):
299 HelpTextObj
= HelpTextXml()
300 HelpTextObj
.FromXml(HelpTextItem
, '%s/HelpText' % Key
)
301 self
.HelpText
.append(HelpTextObj
)
303 Depex
= DepexObject()
304 Depex
.SetDepex(self
.Expression
)
305 Depex
.SetModuleType(self
.CommonDefines
.SupModList
)
306 Depex
.SetSupArchList(self
.CommonDefines
.SupArchList
)
307 Depex
.SetFeatureFlag(self
.CommonDefines
.FeatureFlag
)
308 Depex
.SetHelpTextList(GetHelpTextList(self
.HelpText
))
312 def ToXml(self
, Depex
, Key
):
315 AttributeList
= [['SupArchList', GetStringOfList(Depex
.GetSupArchList())],
316 ['SupModList', Depex
.GetModuleType()]]
317 NodeList
= [['Expression', Depex
.GetDepex()]]
318 if Depex
.GetHelpText():
320 NodeList
.append(Tmp
.ToXml(Depex
.GetHelpText(), 'HelpText'))
322 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
326 Str
= "Expression = %s" % (self
.Expression
)
327 for Item
in self
.HelpText
:
328 Str
= Str
+ '\n\t' + str(Item
)
334 class BootModeXml(object):
336 self
.SupportedBootModes
= ''
337 self
.CommonDefines
= CommonDefinesXml()
340 def FromXml(self
, Item
, Key
):
341 self
.SupportedBootModes
= \
342 XmlElement(Item
, '%s/SupportedBootModes' % Key
)
343 self
.CommonDefines
.FromXml(Item
, Key
)
344 for HelpTextItem
in XmlList(Item
, '%s/HelpText' % Key
):
345 HelpTextObj
= HelpTextXml()
346 HelpTextObj
.FromXml(HelpTextItem
, '%s/HelpText' % Key
)
347 self
.HelpText
.append(HelpTextObj
)
349 BootMode
= BootModeObject()
350 BootMode
.SetSupportedBootModes(self
.SupportedBootModes
)
351 BootMode
.SetUsage(self
.CommonDefines
.Usage
)
352 BootMode
.SetHelpTextList(GetHelpTextList(self
.HelpText
))
356 def ToXml(self
, BootMode
, Key
):
359 AttributeList
= [['Usage', BootMode
.GetUsage()], ]
360 NodeList
= [['SupportedBootModes', BootMode
.GetSupportedBootModes()]]
361 for Item
in BootMode
.GetHelpTextList():
363 NodeList
.append(Tmp
.ToXml(Item
, 'HelpText'))
364 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
369 Str
= "SupportedBootModes = %s %s" % (self
.SupportedBootModes
, self
.CommonDefines
)
370 for Item
in self
.HelpText
:
371 Str
= Str
+ '\n\t' + str(Item
)
376 class EventXml(object):
380 self
.CommonDefines
= CommonDefinesXml()
383 def FromXml(self
, Item
, Key
):
384 self
.EventType
= XmlAttribute(XmlNode(Item
, '%s' % Key
), 'EventType')
385 self
.Name
= XmlElement(Item
, '%s' % Key
)
386 self
.CommonDefines
.FromXml(Item
, Key
)
387 for HelpTextItem
in XmlList(Item
, '%s/HelpText' % Key
):
388 HelpTextObj
= HelpTextXml()
389 HelpTextObj
.FromXml(HelpTextItem
, '%s/HelpText' % Key
)
390 self
.HelpText
.append(HelpTextObj
)
392 Event
= EventObject()
393 Event
.SetEventType(self
.EventType
)
394 Event
.SetUsage(self
.CommonDefines
.Usage
)
395 Event
.SetHelpTextList(GetHelpTextList(self
.HelpText
))
399 def ToXml(self
, Event
, Key
):
402 AttributeList
= [['EventType', Event
.GetEventType()],
403 ['Usage', Event
.GetUsage()],
406 for Item
in Event
.GetHelpTextList():
408 NodeList
.append(Tmp
.ToXml(Item
, 'HelpText'))
409 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
414 Str
= "EventType = %s %s" % (self
.EventType
, self
.CommonDefines
)
415 for Item
in self
.HelpText
:
416 Str
= Str
+ '\n\t' + str(Item
)
421 class HobXml(object):
425 self
.CommonDefines
= CommonDefinesXml()
428 def FromXml(self
, Item
, Key
):
429 self
.HobType
= XmlAttribute(XmlNode(Item
, '%s' % Key
), 'HobType')
430 self
.Name
= XmlElement(Item
, '%s' % Key
)
431 self
.CommonDefines
.FromXml(Item
, Key
)
432 for HelpTextItem
in XmlList(Item
, '%s/HelpText' % Key
):
433 HelpTextObj
= HelpTextXml()
434 HelpTextObj
.FromXml(HelpTextItem
, '%s/HelpText' % Key
)
435 self
.HelpText
.append(HelpTextObj
)
438 Hob
.SetHobType(self
.HobType
)
439 Hob
.SetSupArchList(self
.CommonDefines
.SupArchList
)
440 Hob
.SetUsage(self
.CommonDefines
.Usage
)
441 Hob
.SetHelpTextList(GetHelpTextList(self
.HelpText
))
445 def ToXml(self
, Hob
, Key
):
448 AttributeList
= [['HobType', Hob
.GetHobType()],
449 ['Usage', Hob
.GetUsage()],
450 ['SupArchList', GetStringOfList(Hob
.GetSupArchList())], ]
452 for Item
in Hob
.GetHelpTextList():
454 NodeList
.append(Tmp
.ToXml(Item
, 'HelpText'))
455 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
460 Str
= "HobType = %s %s" % (self
.HobType
, self
.CommonDefines
)
461 for Item
in self
.HelpText
:
462 Str
= Str
+ '\n\t' + str(Item
)
468 class SourceFileXml(object):
471 self
.ToolChainFamily
= ''
473 self
.CommonDefines
= CommonDefinesXml()
475 def FromXml(self
, Item
, Key
):
476 self
.ToolChainFamily
= XmlAttribute(Item
, 'Family')
477 self
.SourceFile
= XmlElement(Item
, 'Filename')
478 self
.CommonDefines
.FromXml(Item
, Key
)
480 self
.CommonDefines
.FeatureFlag
= ConvertNOTEQToNE(self
.CommonDefines
.FeatureFlag
)
482 SourceFile
= SourceFileObject()
483 SourceFile
.SetSourceFile(self
.SourceFile
)
484 SourceFile
.SetFamily(self
.ToolChainFamily
)
485 SourceFile
.SetSupArchList(self
.CommonDefines
.SupArchList
)
486 SourceFile
.SetFeatureFlag(self
.CommonDefines
.FeatureFlag
)
490 def ToXml(self
, SourceFile
, Key
):
493 FeatureFlag
= ConvertNEToNOTEQ(SourceFile
.GetFeatureFlag())
494 AttributeList
= [['SupArchList', GetStringOfList(SourceFile
.GetSupArchList())],
495 ['Family', SourceFile
.GetFamily()],
496 ['FeatureFlag', FeatureFlag
], ]
497 Root
= CreateXmlElement('%s' % Key
, SourceFile
.GetSourceFile(), [], AttributeList
)
503 class ModulePropertyXml(object):
505 self
.CommonDefines
= CommonDefinesXml()
508 self
.PcdIsDriver
= ''
509 self
.UefiSpecificationVersion
= ''
510 self
.PiSpecificationVersion
= ''
511 self
.SpecificationList
= []
512 self
.SpecificationVersion
= ''
517 def FromXml(self
, Item
, Key
, Header
=None):
518 self
.CommonDefines
.FromXml(Item
, Key
)
519 self
.ModuleType
= XmlElement(Item
, '%s/ModuleType' % Key
)
520 self
.Path
= XmlElement(Item
, '%s/Path' % Key
)
521 self
.PcdIsDriver
= XmlElement(Item
, '%s/PcdIsDriver' % Key
)
522 self
.UefiSpecificationVersion
= XmlElement(Item
, '%s/UefiSpecificationVersion' % Key
)
523 self
.PiSpecificationVersion
= XmlElement(Item
, '%s/PiSpecificationVersion' % Key
)
524 for SubItem
in XmlList(Item
, '%s/Specification' % Key
):
525 Specification
= XmlElement(SubItem
, '/Specification')
526 Version
= XmlAttribute(XmlNode(SubItem
, '/Specification'), 'Version')
527 self
.SpecificationList
.append((Specification
, Version
))
528 for SubItem
in XmlList(Item
, '%s/BootMode' % Key
):
530 BootMode
= Axml
.FromXml(SubItem
, 'BootMode')
531 self
.BootModes
.append(BootMode
)
532 for SubItem
in XmlList(Item
, '%s/Event' % Key
):
534 Event
= Axml
.FromXml(SubItem
, 'Event')
535 self
.Events
.append(Event
)
536 for SubItem
in XmlList(Item
, '%s/HOB' % Key
):
538 Hob
= Axml
.FromXml(SubItem
, 'HOB')
539 self
.HOBs
.append(Hob
)
542 Header
= ModuleObject()
544 Header
.SetModuleType(self
.ModuleType
)
545 Header
.SetSupArchList(self
.CommonDefines
.SupArchList
)
546 Header
.SetModulePath(self
.Path
)
548 Header
.SetPcdIsDriver(self
.PcdIsDriver
)
549 Header
.SetUefiSpecificationVersion(self
.UefiSpecificationVersion
)
550 Header
.SetPiSpecificationVersion(self
.PiSpecificationVersion
)
551 Header
.SetSpecList(self
.SpecificationList
)
553 return Header
, self
.BootModes
, self
.Events
, self
.HOBs
556 def ToXml(self
, Header
, BootModes
, Events
, Hobs
, Key
):
559 AttributeList
= [['SupArchList', GetStringOfList(Header
.GetSupArchList())], ]
561 NodeList
= [['ModuleType', Header
.GetModuleType()],
562 ['Path', Header
.GetModulePath()],
563 ['PcdIsDriver', Header
.GetPcdIsDriver()],
564 ['UefiSpecificationVersion', Header
.GetUefiSpecificationVersion()],
565 ['PiSpecificationVersion', Header
.GetPiSpecificationVersion()],
567 for Item
in Header
.GetSpecList():
569 SpecElem
= CreateXmlElement('Specification', Spec
, [], [['Version', Version
]])
570 NodeList
.append(SpecElem
)
572 for Item
in BootModes
:
574 NodeList
.append(Tmp
.ToXml(Item
, 'BootMode'))
577 NodeList
.append(Tmp
.ToXml(Item
, 'Event'))
580 NodeList
.append(Tmp
.ToXml(Item
, 'HOB'))
581 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
586 Str
= "ModuleType = %s Path = %s PcdIsDriver = %s UefiSpecificationVersion = %s PiSpecificationVersion = %s \
587 Specification = %s SpecificationVersion = %s %s" % \
588 (self
.ModuleType
, self
.Path
, self
.PcdIsDriver
, \
589 self
.UefiSpecificationVersion
, self
.PiSpecificationVersion
, \
590 self
.SpecificationList
, self
.SpecificationVersion
, self
.CommonDefines
)
591 for Item
in self
.BootModes
:
592 Str
= Str
+ '\n\t' + str(Item
)
593 for Item
in self
.Events
:
594 Str
= Str
+ '\n\t' + str(Item
)
595 for Item
in self
.HOBs
:
596 Str
= Str
+ '\n\t' + str(Item
)
602 class ModuleSurfaceAreaXml(object):
603 def __init__(self
, Package
=''):
606 # indicate the package that this module resides in
608 self
.Package
= Package
610 def FromXml2(self
, Item
, Module
):
617 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/PeiDepex'):
619 Depex
= Tmp
.FromXml(XmlNode(SubItem
, 'PeiDepex'), 'PeiDepex')
620 PeiDepexList
.append(Depex
)
621 Module
.SetPeiDepex(PeiDepexList
)
627 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/DxeDepex'):
629 Depex
= Tmp
.FromXml(XmlNode(SubItem
, 'DxeDepex'), 'DxeDepex')
630 DxeDepexList
.append(Depex
)
631 Module
.SetDxeDepex(DxeDepexList
)
637 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/SmmDepex'):
639 Depex
= Tmp
.FromXml(XmlNode(SubItem
, 'SmmDepex'), 'SmmDepex')
640 SmmDepexList
.append(Depex
)
641 Module
.SetSmmDepex(SmmDepexList
)
645 Tmp
= MiscellaneousFileXml()
646 MiscFileList
= Tmp
.FromXml(XmlNode(Item
, '/ModuleSurfaceArea/MiscellaneousFiles'), 'MiscellaneousFiles')
648 Module
.SetMiscFileList([MiscFileList
])
650 Module
.SetMiscFileList([])
655 for Item
in XmlList(Item
, '/ModuleSurfaceArea/UserExtensions'):
656 Tmp
= UserExtensionsXml()
657 UserExtension
= Tmp
.FromXml(Item
, 'UserExtensions')
658 Module
.SetUserExtensionList(Module
.GetUserExtensionList() + [UserExtension
])
662 def FromXml(self
, Item
, Key
, IsStandAlongModule
=False):
663 IsBinaryModule
= XmlAttribute(Item
, 'BinaryModule')
668 Module
= Tmp
.FromXml(XmlNode(Item
, '/%s/Header' % Key
), 'Header', True, IsStandAlongModule
)
669 Module
.SetBinaryModule(IsBinaryModule
)
672 GlobalData
.gIS_BINARY_INF
= True
677 Tmp
= ModulePropertyXml()
678 (Module
, BootModes
, Events
, HOBs
) = \
679 Tmp
.FromXml(XmlNode(Item
, '/ModuleSurfaceArea/ModuleProperties'), 'ModuleProperties', Module
)
680 Module
.SetBootModeList(BootModes
)
681 Module
.SetEventList(Events
)
682 Module
.SetHobList(HOBs
)
686 Tmp
= ClonedFromXml()
687 ClonedFrom
= Tmp
.FromXml(XmlNode(Item
, '/ModuleSurfaceArea/ClonedFrom'), 'ClonedFrom')
689 Module
.SetClonedFrom(ClonedFrom
)
694 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/LibraryClassDefinitions/LibraryClass'):
695 Tmp
= LibraryClassXml()
696 LibraryClass
= Tmp
.FromXml(SubItem
, 'LibraryClass')
697 Module
.SetLibraryClassList(Module
.GetLibraryClassList() + [LibraryClass
])
699 if XmlList(Item
, '/ModuleSurfaceArea/LibraryClassDefinitions') and \
700 not XmlList(Item
, '/ModuleSurfaceArea/LibraryClassDefinitions/LibraryClass'):
701 Module
.SetLibraryClassList([None])
706 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/SourceFiles/Filename'):
707 Tmp
= SourceFileXml()
708 SourceFile
= Tmp
.FromXml(SubItem
, 'Filename')
709 Module
.SetSourceFileList(Module
.GetSourceFileList() + [SourceFile
])
711 if XmlList(Item
, '/ModuleSurfaceArea/SourceFiles') and \
712 not XmlList(Item
, '/ModuleSurfaceArea/SourceFiles/Filename') :
713 Module
.SetSourceFileList([None])
718 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/BinaryFiles/BinaryFile'):
719 Tmp
= BinaryFileXml()
720 BinaryFile
= Tmp
.FromXml(SubItem
, 'BinaryFile')
721 Module
.SetBinaryFileList(Module
.GetBinaryFileList() + [BinaryFile
])
723 if XmlList(Item
, '/ModuleSurfaceArea/BinaryFiles') and \
724 not XmlList(Item
, '/ModuleSurfaceArea/BinaryFiles/BinaryFile') :
725 Module
.SetBinaryFileList([None])
727 # PackageDependencies
729 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/PackageDependencies/Package'):
731 PackageDependency
= Tmp
.FromXml(SubItem
, 'Package')
732 Module
.SetPackageDependencyList(Module
.GetPackageDependencyList() + [PackageDependency
])
734 if XmlList(Item
, '/ModuleSurfaceArea/PackageDependencies') and \
735 not XmlList(Item
, '/ModuleSurfaceArea/PackageDependencies/Package'):
736 Module
.SetPackageDependencyList([None])
741 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/Guids/GuidCName'):
742 Tmp
= GuidXml('Module')
743 GuidProtocolPpi
= Tmp
.FromXml(SubItem
, 'GuidCName')
744 Module
.SetGuidList(Module
.GetGuidList() + [GuidProtocolPpi
])
746 if XmlList(Item
, '/ModuleSurfaceArea/Guids') and not XmlList(Item
, '/ModuleSurfaceArea/Guids/GuidCName'):
747 Module
.SetGuidList([None])
752 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/Protocols/Protocol'):
753 Tmp
= ProtocolXml('Module')
754 GuidProtocolPpi
= Tmp
.FromXml(SubItem
, 'Protocol')
755 Module
.SetProtocolList(Module
.GetProtocolList() + [GuidProtocolPpi
])
757 if XmlList(Item
, '/ModuleSurfaceArea/Protocols') and not XmlList(Item
, '/ModuleSurfaceArea/Protocols/Protocol'):
758 Module
.SetProtocolList([None])
763 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/PPIs/Ppi'):
764 Tmp
= PpiXml('Module')
765 GuidProtocolPpi
= Tmp
.FromXml(SubItem
, 'Ppi')
766 Module
.SetPpiList(Module
.GetPpiList() + [GuidProtocolPpi
])
768 if XmlList(Item
, '/ModuleSurfaceArea/PPIs') and not XmlList(Item
, '/ModuleSurfaceArea/PPIs/Ppi'):
769 Module
.SetPpiList([None])
774 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/Externs/Extern'):
776 Extern
= Tmp
.FromXml(SubItem
, 'Extern')
777 Module
.SetExternList(Module
.GetExternList() + [Extern
])
779 if XmlList(Item
, '/ModuleSurfaceArea/Externs') and not XmlList(Item
, '/ModuleSurfaceArea/Externs/Extern'):
780 Module
.SetExternList([None])
782 if not Module
.GetBinaryModule():
786 for SubItem
in XmlList(Item
, '/ModuleSurfaceArea/PcdCoded/PcdEntry'):
788 PcdEntry
= Tmp
.FromXml3(SubItem
, 'PcdEntry')
789 Module
.SetPcdList(Module
.GetPcdList() + [PcdEntry
])
791 if XmlList(Item
, '/ModuleSurfaceArea/PcdCoded') and \
792 not XmlList(Item
, '/ModuleSurfaceArea/PcdCoded/PcdEntry'):
793 Module
.SetPcdList([None])
795 Module
= self
.FromXml2(Item
, Module
)
797 # return the module object
802 def ToXml(self
, Module
):
806 # Create root node of module surface area
808 DomModule
= minidom
.Document().createElement('ModuleSurfaceArea')
809 if Module
.GetBinaryModule():
810 DomModule
.setAttribute('BinaryModule', 'true')
816 DomModule
.appendChild(Tmp
.ToXml(Module
, 'Header'))
820 Tmp
= ModulePropertyXml()
821 DomModule
.appendChild(Tmp
.ToXml(Module
, Module
.GetBootModeList(), Module
.GetEventList(), Module
.GetHobList(), \
826 Tmp
= ClonedFromXml()
827 if Module
.GetClonedFrom():
828 DomModule
.appendChild(Tmp
.ToXml(Module
.GetClonedFrom(), 'ClonedFrom'))
832 LibraryClassNode
= CreateXmlElement('LibraryClassDefinitions', '', [], [])
833 for LibraryClass
in Module
.GetLibraryClassList():
834 Tmp
= LibraryClassXml()
835 LibraryClassNode
.appendChild(Tmp
.ToXml2(LibraryClass
, 'LibraryClass'))
836 DomModule
.appendChild(LibraryClassNode
)
840 SourceFileNode
= CreateXmlElement('SourceFiles', '', [], [])
841 for SourceFile
in Module
.GetSourceFileList():
842 Tmp
= SourceFileXml()
843 SourceFileNode
.appendChild(Tmp
.ToXml(SourceFile
, 'Filename'))
844 DomModule
.appendChild(SourceFileNode
)
848 BinaryFileNode
= CreateXmlElement('BinaryFiles', '', [], [])
849 for BinaryFile
in Module
.GetBinaryFileList():
850 Tmp
= BinaryFileXml()
851 BinaryFileNode
.appendChild(Tmp
.ToXml(BinaryFile
, 'BinaryFile'))
852 DomModule
.appendChild(BinaryFileNode
)
854 # PackageDependencies
856 PackageDependencyNode
= CreateXmlElement('PackageDependencies', '', [], [])
857 for PackageDependency
in Module
.GetPackageDependencyList():
859 PackageDependencyNode
.appendChild(Tmp
.ToXml(PackageDependency
, 'Package'))
860 DomModule
.appendChild(PackageDependencyNode
)
865 GuidProtocolPpiNode
= CreateXmlElement('Guids', '', [], [])
866 for GuidProtocolPpi
in Module
.GetGuidList():
867 Tmp
= GuidXml('Module')
868 GuidProtocolPpiNode
.appendChild(Tmp
.ToXml(GuidProtocolPpi
, 'GuidCName'))
869 DomModule
.appendChild(GuidProtocolPpiNode
)
874 GuidProtocolPpiNode
= CreateXmlElement('Protocols', '', [], [])
875 for GuidProtocolPpi
in Module
.GetProtocolList():
876 Tmp
= ProtocolXml('Module')
877 GuidProtocolPpiNode
.appendChild(Tmp
.ToXml(GuidProtocolPpi
, 'Protocol'))
878 DomModule
.appendChild(GuidProtocolPpiNode
)
883 GuidProtocolPpiNode
= CreateXmlElement('PPIs', '', [], [])
884 for GuidProtocolPpi
in Module
.GetPpiList():
885 Tmp
= PpiXml('Module')
886 GuidProtocolPpiNode
.appendChild(Tmp
.ToXml(GuidProtocolPpi
, 'Ppi'))
887 DomModule
.appendChild(GuidProtocolPpiNode
)
891 ExternNode
= CreateXmlElement('Externs', '', [], [])
892 for Extern
in Module
.GetExternList():
894 ExternNode
.appendChild(Tmp
.ToXml(Extern
, 'Extern'))
895 DomModule
.appendChild(ExternNode
)
899 PcdEntryNode
= CreateXmlElement('PcdCoded', '', [], [])
900 for PcdEntry
in Module
.GetPcdList():
902 PcdEntryNode
.appendChild(Tmp
.ToXml3(PcdEntry
, 'PcdEntry'))
903 DomModule
.appendChild(PcdEntryNode
)
908 if Module
.GetPeiDepex():
909 for Item
in Module
.GetPeiDepex():
911 DomModule
.appendChild(Tmp
.ToXml(Item
, 'PeiDepex'))
916 if Module
.GetDxeDepex():
917 for Item
in Module
.GetDxeDepex():
919 DomModule
.appendChild(Tmp
.ToXml(Item
, 'DxeDepex'))
924 if Module
.GetSmmDepex():
925 for Item
in Module
.GetSmmDepex():
927 DomModule
.appendChild(Tmp
.ToXml(Item
, 'SmmDepex'))
932 if Module
.GetMiscFileList():
933 Tmp
= MiscellaneousFileXml()
934 DomModule
.appendChild(Tmp
.ToXml(Module
.GetMiscFileList()[0], 'MiscellaneousFiles'))
938 if Module
.GetUserExtensionList():
939 for UserExtension
in Module
.GetUserExtensionList():
940 Tmp
= UserExtensionsXml()
941 DomModule
.appendChild(Tmp
.ToXml(UserExtension
, 'UserExtensions'))
946 # BuildFlagXml used to generate BuildFlag for <AsBuilt>
948 class BuildFlagXml(object):
953 self
.AsBuiltFlags
= ''
955 def FromXml(self
, Item
, Key
):
956 self
.Target
= XmlElement(Item
, '%s/Target' % Key
)
957 self
.TagName
= XmlElement(Item
, '%s/TagName' % Key
)
958 self
.Family
= XmlElement(Item
, '%s/Family' % Key
)
960 BuildFlag
= BinaryBuildFlagObject()
962 BuildFlag
.SetTarget(self
.Target
)
963 BuildFlag
.SetTagName(self
.TagName
)
964 BuildFlag
.SetFamily(self
.Family
)
969 # For AsBuild INF usage
971 def FromXml2(self
, Item
, Key
):
972 self
.AsBuiltFlags
= XmlElement(Item
, '%s' % Key
)
974 LineList
= GetSplitValueList(self
.AsBuiltFlags
, '\n')
977 for Line
in LineList
:
979 ReturnLine
= "# " + Line
981 ReturnLine
= ReturnLine
+ '\n' + '# ' + Line
984 BuildFlag
= BinaryBuildFlagObject()
985 BuildFlag
.SetAsBuiltOptionFlags(ReturnLine
)
989 def ToXml(self
, BuildFlag
, Key
):
994 NodeList
.append(['BuildFlags', BuildFlag
])
996 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)