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)