]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/UPT/Xml/ModuleSurfaceAreaXml.py
BaseTools: Remove equality operator with None
[mirror_edk2.git] / BaseTools / Source / Python / UPT / Xml / ModuleSurfaceAreaXml.py
CommitLineData
4234283c
LG
1## @file\r
2# This file is used to parse a Module file of .PKG file\r
3#\r
e4ac870f 4# Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>\r
4234283c 5#\r
421ccda3
HC
6# This program and the accompanying materials are licensed and made available\r
7# under the terms and conditions of the BSD License which accompanies this\r
8# distribution. The full text of the license may be found at\r
4234283c
LG
9# http://opensource.org/licenses/bsd-license.php\r
10#\r
11# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13#\r
14\r
15'''\r
16ModuleSurfaceAreaXml\r
17'''\r
18from xml.dom import minidom\r
19\r
20from Library.String import ConvertNEToNOTEQ\r
21from Library.String import ConvertNOTEQToNE\r
22from Library.String import GetStringOfList\r
e4ac870f 23from Library.String import IsMatchArch\r
4234283c
LG
24from Library.Xml.XmlRoutines import XmlElement\r
25from Library.Xml.XmlRoutines import XmlAttribute\r
26from Library.Xml.XmlRoutines import XmlNode\r
27from Library.Xml.XmlRoutines import XmlList\r
28from Library.Xml.XmlRoutines import CreateXmlElement\r
29from Object.POM.CommonObject import GuidVersionObject\r
30from Object.POM.ModuleObject import BootModeObject\r
31from Object.POM.ModuleObject import DepexObject\r
32from Object.POM.ModuleObject import ModuleObject\r
33from Object.POM.ModuleObject import EventObject\r
34from Object.POM.ModuleObject import HobObject\r
35from Object.POM.ModuleObject import SourceFileObject\r
36from Object.POM.ModuleObject import PackageDependencyObject\r
37from Object.POM.ModuleObject import ExternObject\r
38from Object.POM.ModuleObject import BinaryFileObject\r
39from Object.POM.ModuleObject import AsBuiltObject\r
40from Object.POM.ModuleObject import BinaryBuildFlagObject\r
41from Xml.CommonXml import ClonedFromXml\r
42from Xml.CommonXml import HeaderXml\r
43from Xml.CommonXml import HelpTextXml\r
44from Xml.CommonXml import CommonDefinesXml\r
45from Xml.CommonXml import LibraryClassXml\r
46from Xml.CommonXml import UserExtensionsXml\r
47from Xml.CommonXml import MiscellaneousFileXml\r
48from Xml.CommonXml import FilenameXml\r
49from Xml.GuidProtocolPpiXml import GuidXml\r
50from Xml.GuidProtocolPpiXml import ProtocolXml\r
51from Xml.GuidProtocolPpiXml import PpiXml\r
52from Xml.PcdXml import PcdEntryXml\r
53from Xml.XmlParserMisc import GetHelpTextList\r
54from Library import GlobalData\r
55from Library.Misc import GetSplitValueList\r
56\r
57## BinaryFileXml\r
58#\r
59# represent the following XML item\r
60#\r
61# <BinaryFile>\r
62# <Filename\r
63# FileType=" FileType " {1}\r
64# SupArchList=" ArchListType " {0,1}\r
65# FeatureFlag=" FeatureFlagExpression " {0,1} >\r
66# xs:anyURI\r
67# </Filename> {1,}\r
68# <AsBuilt> ... </AsBuilt> {0,}\r
69# </BinaryFile> {1,}\r
421ccda3 70#\r
4234283c
LG
71class BinaryFileXml(object):\r
72 def __init__(self):\r
73 self.FileNames = []\r
74 self.AsBuiltList = []\r
75 self.PatchPcdValues = ''\r
76 self.PcdExValues = ''\r
77 self.LibraryInstances = ''\r
78 self.BuildFlags = ''\r
79\r
80 def FromXml(self, Item, Key):\r
81 if self.FileNames:\r
82 pass\r
83 BinaryFile = BinaryFileObject()\r
84 FilenameList = []\r
421ccda3 85 SupArchList = ['COMMON']\r
4234283c
LG
86 for SubItem in XmlList(Item, '%s/Filename' % Key):\r
87 Axml = FilenameXml()\r
88 Bxml = Axml.FromXml(SubItem, 'Filename')\r
89 FilenameList.append(Bxml)\r
90 BinaryFile.SetFileNameList(FilenameList)\r
421ccda3
HC
91 for FileName in FilenameList:\r
92 if FileName.GetSupArchList():\r
93 SupArchList = FileName.GetSupArchList()\r
94 BinaryFile.SetSupArchList(SupArchList)\r
4234283c
LG
95 if GlobalData.gIS_BINARY_INF:\r
96 AsBuiltList = []\r
97 for AsBuiltItem in XmlList(Item, '%s/AsBuilt' % Key):\r
98 AsBuilt = AsBuiltObject()\r
99\r
100 PatchPcdValueList = []\r
101 for SubItem in XmlList(AsBuiltItem, 'AsBuilt/PatchPcdValue'):\r
102 Axml = PcdEntryXml()\r
103 Bxml = Axml.FromXml(SubItem, 'PatchPcdValue')\r
104 PatchPcdValueList.append(Bxml)\r
105 AsBuilt.SetPatchPcdList(PatchPcdValueList)\r
106 PcdExValueList = []\r
107 for SubItem in XmlList(AsBuiltItem, 'AsBuilt/PcdExValue'):\r
108 Axml = PcdEntryXml()\r
109 Bxml = Axml.FromXml(SubItem, 'PcdExValue')\r
110 PcdExValueList.append(Bxml)\r
111 AsBuilt.SetPcdExList(PcdExValueList)\r
112 LibraryList = []\r
113 for SubItem in XmlList(Item, '%s/AsBuilt/LibraryInstances/GUID' % Key):\r
114 GuidVerObj = GuidVersionObject()\r
115 GUID = XmlElement(SubItem, 'GUID')\r
116 Version = XmlAttribute(XmlNode(SubItem, 'GUID'), 'Version')\r
117 GuidVerObj.SetGuid(GUID)\r
118 GuidVerObj.SetVersion(Version)\r
119 LibraryList.append(GuidVerObj)\r
120 if XmlList(Item, '%s/AsBuilt/LibraryInstances' % Key) and not LibraryList:\r
121 LibraryList = [None]\r
122 AsBuilt.SetLibraryInstancesList(LibraryList)\r
123 BuildFlagList = []\r
124 for SubItem in XmlList(Item, '%s/AsBuilt/BuildFlags' % Key):\r
125 BuildFlag = BuildFlagXml()\r
126 BuildFlagList.append(BuildFlag.FromXml2(SubItem, 'BuildFlags'))\r
127 AsBuilt.SetBuildFlagsList(BuildFlagList)\r
128 AsBuiltList.append(AsBuilt)\r
129 BinaryFile.SetAsBuiltList(AsBuiltList)\r
130 return BinaryFile\r
131\r
132 def ToXml(self, BinaryFile, Key):\r
133 if self.FileNames:\r
134 pass\r
135 NodeList = []\r
136 FilenameList = BinaryFile.GetFileNameList()\r
e4ac870f 137 SupportArch = None\r
4234283c
LG
138 for Filename in FilenameList:\r
139 Tmp = FilenameXml()\r
140 NodeList.append(Tmp.ToXml(Filename, 'Filename'))\r
e4ac870f 141 SupportArch = Filename.SupArchList\r
4234283c 142\r
421ccda3
HC
143 AsBuildList = BinaryFile.GetAsBuiltList()\r
144 PatchPcdValueList = AsBuildList.GetPatchPcdList()\r
145 PcdExList = AsBuildList.GetPcdExList()\r
146 LibGuidVerList = AsBuildList.GetLibraryInstancesList()\r
147 BuildFlagList = AsBuildList.GetBuildFlagsList()\r
148\r
149 AsBuiltNodeList = []\r
150\r
151 for Pcd in PatchPcdValueList:\r
152 if IsMatchArch(Pcd.SupArchList, SupportArch):\r
153 Tmp = PcdEntryXml()\r
154 AsBuiltNodeList.append(Tmp.ToXml4(Pcd, 'PatchPcdValue'))\r
155\r
156 for Pcd in PcdExList:\r
157 if IsMatchArch(Pcd.SupArchList, SupportArch):\r
158 Tmp = PcdEntryXml()\r
159 AsBuiltNodeList.append(Tmp.ToXml4(Pcd, 'PcdExValue'))\r
160\r
161 GuiVerElemList = []\r
162 for LibGuidVer in LibGuidVerList:\r
1f0a062f 163 if LibGuidVer.GetLibGuid() and IsMatchArch(LibGuidVer.GetSupArchList(), SupportArch):\r
4234283c
LG
164 GuiVerElem = \\r
165 CreateXmlElement('GUID', LibGuidVer.GetLibGuid(), [], [['Version', LibGuidVer.GetLibVersion()]])\r
166 GuiVerElemList.append(GuiVerElem)\r
421ccda3
HC
167 if len(GuiVerElemList) > 0:\r
168 LibGuidVerElem = CreateXmlElement('LibraryInstances', '', GuiVerElemList, [])\r
169 AsBuiltNodeList.append(LibGuidVerElem)\r
4234283c 170\r
421ccda3
HC
171 for BuildFlag in BuildFlagList:\r
172 if IsMatchArch(BuildFlag.GetSupArchList(), SupportArch):\r
173 for Item in BuildFlag.GetAsBuildList():\r
174 Tmp = BuildFlagXml()\r
175 Elem = CreateXmlElement('BuildFlags', ''.join(Item), [], [])\r
176 AsBuiltNodeList.append(Elem)\r
4234283c 177\r
421ccda3
HC
178 if len(AsBuiltNodeList) > 0:\r
179 Element = CreateXmlElement('AsBuilt', '', AsBuiltNodeList, [])\r
180 NodeList.append(Element)\r
4234283c
LG
181\r
182 Root = CreateXmlElement('%s' % Key, '', NodeList, [])\r
183\r
184 return Root\r
185\r
186 def __str__(self):\r
187 Str = "BinaryFiles:"\r
188 for Item in self.FileNames:\r
189 Str = Str + '\n\t' + str(Item)\r
190 for Item in self.PatchPcdValues:\r
191 Str = Str + '\n\t' + str(Item)\r
192 for Item in self.PcdExValues:\r
193 Str = Str + '\n\t' + str(Item)\r
194 for Item in self.LibraryInstances:\r
195 Str = Str + '\n\t' + str(Item)\r
196 for Item in self.BuildFlags:\r
197 Str = Str + '\n\t' + str(Item)\r
198 return Str\r
199\r
200##\r
201# PackageXml\r
202#\r
203class PackageXml(object):\r
204 def __init__(self):\r
205 self.Description = ''\r
206 self.Guid = ''\r
207 self.Version = ''\r
208 self.CommonDefines = CommonDefinesXml()\r
209\r
210 def FromXml(self, Item, Key):\r
211 self.Description = XmlElement(Item, '%s/Description' % Key)\r
212 self.Guid = XmlElement(Item, '%s/GUID' % Key)\r
213 self.Version = XmlAttribute(XmlNode(Item, '%s/GUID' % Key), 'Version')\r
214 self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)\r
215\r
216 PackageDependency = PackageDependencyObject()\r
217 PackageDependency.SetPackage(self.Description)\r
218 PackageDependency.SetGuid(self.Guid)\r
219 PackageDependency.SetVersion(self.Version)\r
220 PackageDependency.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))\r
221 PackageDependency.SetSupArchList(self.CommonDefines.SupArchList)\r
222\r
223 return PackageDependency\r
224\r
225 def ToXml(self, PackageDependency, Key):\r
226 if self.Guid:\r
227 pass\r
228 AttributeList = [['SupArchList', GetStringOfList(PackageDependency.GetSupArchList())],\r
229 ['FeatureFlag', ConvertNEToNOTEQ(PackageDependency.GetFeatureFlag())], ]\r
230 Element1 = CreateXmlElement('GUID', PackageDependency.GetGuid(), [],\r
231 [['Version', PackageDependency.GetVersion()]])\r
232 NodeList = [['Description', PackageDependency.GetPackage()], Element1, ]\r
233 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
234\r
235 return Root\r
236\r
237 def __str__(self):\r
238 Str = "Description = %s Guid = %s Version = %s %s" \\r
239 % (self.Description, self.Guid, self.Version, self.CommonDefines)\r
240 return Str\r
241##\r
242# ExternXml\r
243#\r
244class ExternXml(object):\r
245 def __init__(self):\r
246 self.CommonDefines = CommonDefinesXml()\r
247 self.EntryPoint = ''\r
248 self.UnloadImage = ''\r
249 self.Constructor = ''\r
250 self.Destructor = ''\r
251 self.SupModList = ''\r
252 self.SupArchList = ''\r
253 self.HelpText = []\r
254\r
255 def FromXml(self, Item, Key):\r
256 self.CommonDefines.FromXml(Item, Key)\r
257 self.EntryPoint = XmlElement(Item, '%s/EntryPoint' % Key)\r
258 self.UnloadImage = XmlElement(Item, '%s/UnloadImage' % Key)\r
259 self.Constructor = XmlElement(Item, '%s/Constructor' % Key)\r
260 self.Destructor = XmlElement(Item, '%s/Destructor' % Key)\r
261\r
262 Extern = ExternObject()\r
263 Extern.SetEntryPoint(self.EntryPoint)\r
264 Extern.SetUnloadImage(self.UnloadImage)\r
265 Extern.SetConstructor(self.Constructor)\r
266 Extern.SetDestructor(self.Destructor)\r
267 if self.CommonDefines.SupModList:\r
268 Extern.SetSupModList(self.CommonDefines.SupModList)\r
269 if self.CommonDefines.SupArchList:\r
270 Extern.SetSupArchList(self.CommonDefines.SupArchList)\r
271 return Extern\r
272\r
273 def ToXml(self, Extern, Key):\r
274 if self.HelpText:\r
275 pass\r
276\r
277 NodeList = []\r
278 if Extern.GetEntryPoint():\r
279 NodeList.append(['EntryPoint', Extern.GetEntryPoint()])\r
280 if Extern.GetUnloadImage():\r
281 NodeList.append(['UnloadImage', Extern.GetUnloadImage()])\r
282 if Extern.GetConstructor():\r
283 NodeList.append(['Constructor', Extern.GetConstructor()])\r
284 if Extern.GetDestructor():\r
285 NodeList.append(['Destructor', Extern.GetDestructor()])\r
286 Root = CreateXmlElement('%s' % Key, '', NodeList, [])\r
287\r
288 return Root\r
289\r
290 def __str__(self):\r
291 Str = "EntryPoint = %s UnloadImage = %s Constructor = %s Destructor = %s %s" \\r
292 % (self.EntryPoint, self.UnloadImage, self.Constructor, self.Destructor, self.CommonDefines)\r
293 for Item in self.HelpText:\r
294 Str = Str + '\n\t' + str(Item)\r
295 return Str\r
421ccda3 296##\r
4234283c
LG
297# DepexXml\r
298#\r
299class DepexXml(object):\r
300 def __init__(self):\r
301 self.CommonDefines = CommonDefinesXml()\r
302 self.Expression = None\r
303 self.HelpText = []\r
304\r
305 def FromXml(self, Item, Key):\r
306 if not Item:\r
307 return None\r
308 self.CommonDefines.FromXml(Item, Key)\r
309 self.Expression = XmlElement(Item, '%s/Expression' % Key)\r
310 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
311 HelpTextObj = HelpTextXml()\r
312 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
313 self.HelpText.append(HelpTextObj)\r
314\r
315 Depex = DepexObject()\r
316 Depex.SetDepex(self.Expression)\r
317 Depex.SetModuleType(self.CommonDefines.SupModList)\r
318 Depex.SetSupArchList(self.CommonDefines.SupArchList)\r
319 Depex.SetFeatureFlag(self.CommonDefines.FeatureFlag)\r
320 Depex.SetHelpTextList(GetHelpTextList(self.HelpText))\r
321\r
322 return Depex\r
323\r
324 def ToXml(self, Depex, Key):\r
325 if self.HelpText:\r
326 pass\r
327 AttributeList = [['SupArchList', GetStringOfList(Depex.GetSupArchList())],\r
328 ['SupModList', Depex.GetModuleType()]]\r
329 NodeList = [['Expression', Depex.GetDepex()]]\r
330 if Depex.GetHelpText():\r
331 Tmp = HelpTextXml()\r
332 NodeList.append(Tmp.ToXml(Depex.GetHelpText(), 'HelpText'))\r
333\r
334 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
335 return Root\r
336\r
337 def __str__(self):\r
338 Str = "Expression = %s" % (self.Expression)\r
339 for Item in self.HelpText:\r
340 Str = Str + '\n\t' + str(Item)\r
341 return Str\r
342\r
343##\r
344# BootModeXml\r
345#\r
346class BootModeXml(object):\r
347 def __init__(self):\r
348 self.SupportedBootModes = ''\r
349 self.CommonDefines = CommonDefinesXml()\r
350 self.HelpText = []\r
351\r
352 def FromXml(self, Item, Key):\r
353 self.SupportedBootModes = \\r
354 XmlElement(Item, '%s/SupportedBootModes' % Key)\r
355 self.CommonDefines.FromXml(Item, Key)\r
356 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
357 HelpTextObj = HelpTextXml()\r
358 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
359 self.HelpText.append(HelpTextObj)\r
360\r
361 BootMode = BootModeObject()\r
362 BootMode.SetSupportedBootModes(self.SupportedBootModes)\r
363 BootMode.SetUsage(self.CommonDefines.Usage)\r
364 BootMode.SetHelpTextList(GetHelpTextList(self.HelpText))\r
365\r
366 return BootMode\r
367\r
368 def ToXml(self, BootMode, Key):\r
369 if self.HelpText:\r
370 pass\r
371 AttributeList = [['Usage', BootMode.GetUsage()], ]\r
372 NodeList = [['SupportedBootModes', BootMode.GetSupportedBootModes()]]\r
373 for Item in BootMode.GetHelpTextList():\r
374 Tmp = HelpTextXml()\r
375 NodeList.append(Tmp.ToXml(Item, 'HelpText'))\r
376 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
377\r
378 return Root\r
379\r
380 def __str__(self):\r
381 Str = "SupportedBootModes = %s %s" % (self.SupportedBootModes, self.CommonDefines)\r
382 for Item in self.HelpText:\r
383 Str = Str + '\n\t' + str(Item)\r
384 return Str\r
385##\r
386# EventXml\r
387#\r
388class EventXml(object):\r
389 def __init__(self):\r
390 self.EventType = ''\r
391 self.Name = ''\r
392 self.CommonDefines = CommonDefinesXml()\r
393 self.HelpText = []\r
394\r
395 def FromXml(self, Item, Key):\r
396 self.EventType = XmlAttribute(XmlNode(Item, '%s' % Key), 'EventType')\r
397 self.Name = XmlElement(Item, '%s' % Key)\r
398 self.CommonDefines.FromXml(Item, Key)\r
399 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
400 HelpTextObj = HelpTextXml()\r
401 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
402 self.HelpText.append(HelpTextObj)\r
403\r
404 Event = EventObject()\r
405 Event.SetEventType(self.EventType)\r
406 Event.SetUsage(self.CommonDefines.Usage)\r
407 Event.SetHelpTextList(GetHelpTextList(self.HelpText))\r
408\r
409 return Event\r
410\r
411 def ToXml(self, Event, Key):\r
412 if self.HelpText:\r
413 pass\r
414 AttributeList = [['EventType', Event.GetEventType()],\r
415 ['Usage', Event.GetUsage()],\r
416 ]\r
417 NodeList = []\r
418 for Item in Event.GetHelpTextList():\r
419 Tmp = HelpTextXml()\r
420 NodeList.append(Tmp.ToXml(Item, 'HelpText'))\r
421 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
422\r
423 return Root\r
424\r
425 def __str__(self):\r
426 Str = "EventType = %s %s" % (self.EventType, self.CommonDefines)\r
427 for Item in self.HelpText:\r
428 Str = Str + '\n\t' + str(Item)\r
429 return Str\r
430##\r
431# HobXml\r
432#\r
433class HobXml(object):\r
434 def __init__(self):\r
435 self.HobType = ''\r
436 self.Name = ''\r
437 self.CommonDefines = CommonDefinesXml()\r
438 self.HelpText = []\r
439\r
440 def FromXml(self, Item, Key):\r
441 self.HobType = XmlAttribute(XmlNode(Item, '%s' % Key), 'HobType')\r
442 self.Name = XmlElement(Item, '%s' % Key)\r
443 self.CommonDefines.FromXml(Item, Key)\r
444 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
445 HelpTextObj = HelpTextXml()\r
446 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
447 self.HelpText.append(HelpTextObj)\r
448\r
449 Hob = HobObject()\r
450 Hob.SetHobType(self.HobType)\r
451 Hob.SetSupArchList(self.CommonDefines.SupArchList)\r
452 Hob.SetUsage(self.CommonDefines.Usage)\r
453 Hob.SetHelpTextList(GetHelpTextList(self.HelpText))\r
454\r
455 return Hob\r
456\r
457 def ToXml(self, Hob, Key):\r
458 if self.Name:\r
459 pass\r
460 AttributeList = [['HobType', Hob.GetHobType()],\r
461 ['Usage', Hob.GetUsage()],\r
462 ['SupArchList', GetStringOfList(Hob.GetSupArchList())], ]\r
463 NodeList = []\r
464 for Item in Hob.GetHelpTextList():\r
465 Tmp = HelpTextXml()\r
466 NodeList.append(Tmp.ToXml(Item, 'HelpText'))\r
467 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
468\r
469 return Root\r
470\r
471 def __str__(self):\r
472 Str = "HobType = %s %s" % (self.HobType, self.CommonDefines)\r
473 for Item in self.HelpText:\r
474 Str = Str + '\n\t' + str(Item)\r
475 return Str\r
476\r
477##\r
478# SourceFileXml\r
479#\r
480class SourceFileXml(object):\r
481 def __init__(self):\r
482 self.SourceFile = ''\r
483 self.ToolChainFamily = ''\r
484 self.FileType = ''\r
485 self.CommonDefines = CommonDefinesXml()\r
486\r
487 def FromXml(self, Item, Key):\r
488 self.ToolChainFamily = XmlAttribute(Item, 'Family')\r
489 self.SourceFile = XmlElement(Item, 'Filename')\r
490 self.CommonDefines.FromXml(Item, Key)\r
491\r
492 self.CommonDefines.FeatureFlag = ConvertNOTEQToNE(self.CommonDefines.FeatureFlag)\r
493\r
494 SourceFile = SourceFileObject()\r
495 SourceFile.SetSourceFile(self.SourceFile)\r
496 SourceFile.SetFamily(self.ToolChainFamily)\r
497 SourceFile.SetSupArchList(self.CommonDefines.SupArchList)\r
498 SourceFile.SetFeatureFlag(self.CommonDefines.FeatureFlag)\r
499\r
500 return SourceFile\r
501\r
502 def ToXml(self, SourceFile, Key):\r
503 if self.SourceFile:\r
504 pass\r
505 FeatureFlag = ConvertNEToNOTEQ(SourceFile.GetFeatureFlag())\r
506 AttributeList = [['SupArchList', GetStringOfList(SourceFile.GetSupArchList())],\r
507 ['Family', SourceFile.GetFamily()],\r
508 ['FeatureFlag', FeatureFlag], ]\r
509 Root = CreateXmlElement('%s' % Key, SourceFile.GetSourceFile(), [], AttributeList)\r
510 return Root\r
511\r
512##\r
513# ModulePropertyXml\r
514#\r
515class ModulePropertyXml(object):\r
516 def __init__(self):\r
517 self.CommonDefines = CommonDefinesXml()\r
518 self.ModuleType = ''\r
519 self.Path = ''\r
520 self.PcdIsDriver = ''\r
521 self.UefiSpecificationVersion = ''\r
522 self.PiSpecificationVersion = ''\r
523 self.SpecificationList = []\r
524 self.SpecificationVersion = ''\r
525 self.BootModes = []\r
526 self.Events = []\r
527 self.HOBs = []\r
528\r
529 def FromXml(self, Item, Key, Header=None):\r
530 self.CommonDefines.FromXml(Item, Key)\r
531 self.ModuleType = XmlElement(Item, '%s/ModuleType' % Key)\r
532 self.Path = XmlElement(Item, '%s/Path' % Key)\r
533 self.PcdIsDriver = XmlElement(Item, '%s/PcdIsDriver' % Key)\r
534 self.UefiSpecificationVersion = XmlElement(Item, '%s/UefiSpecificationVersion' % Key)\r
535 self.PiSpecificationVersion = XmlElement(Item, '%s/PiSpecificationVersion' % Key)\r
536 for SubItem in XmlList(Item, '%s/Specification' % Key):\r
537 Specification = XmlElement(SubItem, '/Specification')\r
538 Version = XmlAttribute(XmlNode(SubItem, '/Specification'), 'Version')\r
539 self.SpecificationList.append((Specification, Version))\r
540 for SubItem in XmlList(Item, '%s/BootMode' % Key):\r
541 Axml = BootModeXml()\r
542 BootMode = Axml.FromXml(SubItem, 'BootMode')\r
543 self.BootModes.append(BootMode)\r
544 for SubItem in XmlList(Item, '%s/Event' % Key):\r
545 Axml = EventXml()\r
546 Event = Axml.FromXml(SubItem, 'Event')\r
547 self.Events.append(Event)\r
548 for SubItem in XmlList(Item, '%s/HOB' % Key):\r
549 Axml = HobXml()\r
550 Hob = Axml.FromXml(SubItem, 'HOB')\r
551 self.HOBs.append(Hob)\r
552\r
4231a819 553 if Header is None:\r
4234283c
LG
554 Header = ModuleObject()\r
555\r
556 Header.SetModuleType(self.ModuleType)\r
557 Header.SetSupArchList(self.CommonDefines.SupArchList)\r
558 Header.SetModulePath(self.Path)\r
559\r
560 Header.SetPcdIsDriver(self.PcdIsDriver)\r
561 Header.SetUefiSpecificationVersion(self.UefiSpecificationVersion)\r
562 Header.SetPiSpecificationVersion(self.PiSpecificationVersion)\r
563 Header.SetSpecList(self.SpecificationList)\r
564\r
565 return Header, self.BootModes, self.Events, self.HOBs\r
566\r
567\r
568 def ToXml(self, Header, BootModes, Events, Hobs, Key):\r
569 if self.ModuleType:\r
570 pass\r
571 AttributeList = [['SupArchList', GetStringOfList(Header.GetSupArchList())], ]\r
572\r
573 NodeList = [['ModuleType', Header.GetModuleType()],\r
574 ['Path', Header.GetModulePath()],\r
575 ['PcdIsDriver', Header.GetPcdIsDriver()],\r
576 ['UefiSpecificationVersion', Header.GetUefiSpecificationVersion()],\r
577 ['PiSpecificationVersion', Header.GetPiSpecificationVersion()],\r
578 ]\r
579 for Item in Header.GetSpecList():\r
580 Spec, Version = Item\r
581 SpecElem = CreateXmlElement('Specification', Spec, [], [['Version', Version]])\r
582 NodeList.append(SpecElem)\r
583\r
584 for Item in BootModes:\r
585 Tmp = BootModeXml()\r
586 NodeList.append(Tmp.ToXml(Item, 'BootMode'))\r
587 for Item in Events:\r
588 Tmp = EventXml()\r
589 NodeList.append(Tmp.ToXml(Item, 'Event'))\r
590 for Item in Hobs:\r
591 Tmp = HobXml()\r
592 NodeList.append(Tmp.ToXml(Item, 'HOB'))\r
593 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
594\r
595 return Root\r
596\r
597 def __str__(self):\r
598 Str = "ModuleType = %s Path = %s PcdIsDriver = %s UefiSpecificationVersion = %s PiSpecificationVersion = %s \\r
599 Specification = %s SpecificationVersion = %s %s" % \\r
600 (self.ModuleType, self.Path, self.PcdIsDriver, \\r
601 self.UefiSpecificationVersion, self.PiSpecificationVersion, \\r
602 self.SpecificationList, self.SpecificationVersion, self.CommonDefines)\r
603 for Item in self.BootModes:\r
604 Str = Str + '\n\t' + str(Item)\r
605 for Item in self.Events:\r
606 Str = Str + '\n\t' + str(Item)\r
607 for Item in self.HOBs:\r
608 Str = Str + '\n\t' + str(Item)\r
609 return Str\r
610\r
611##\r
612# ModuleXml\r
613#\r
614class ModuleSurfaceAreaXml(object):\r
615 def __init__(self, Package=''):\r
616 self.Module = None\r
617 #\r
618 # indicate the package that this module resides in\r
619 #\r
620 self.Package = Package\r
621\r
622 def FromXml2(self, Item, Module):\r
623 if self.Module:\r
624 pass\r
625 #\r
626 # PeiDepex\r
627 #\r
628 PeiDepexList = []\r
629 for SubItem in XmlList(Item, '/ModuleSurfaceArea/PeiDepex'):\r
630 Tmp = DepexXml()\r
631 Depex = Tmp.FromXml(XmlNode(SubItem, 'PeiDepex'), 'PeiDepex')\r
632 PeiDepexList.append(Depex)\r
633 Module.SetPeiDepex(PeiDepexList)\r
634\r
635 #\r
636 # DxeDepex\r
637 #\r
638 DxeDepexList = []\r
639 for SubItem in XmlList(Item, '/ModuleSurfaceArea/DxeDepex'):\r
640 Tmp = DepexXml()\r
641 Depex = Tmp.FromXml(XmlNode(SubItem, 'DxeDepex'), 'DxeDepex')\r
642 DxeDepexList.append(Depex)\r
643 Module.SetDxeDepex(DxeDepexList)\r
644\r
645 #\r
646 # SmmDepex\r
647 #\r
648 SmmDepexList = []\r
649 for SubItem in XmlList(Item, '/ModuleSurfaceArea/SmmDepex'):\r
650 Tmp = DepexXml()\r
651 Depex = Tmp.FromXml(XmlNode(SubItem, 'SmmDepex'), 'SmmDepex')\r
652 SmmDepexList.append(Depex)\r
653 Module.SetSmmDepex(SmmDepexList)\r
654\r
655 #\r
656 # MiscellaneousFile\r
657 Tmp = MiscellaneousFileXml()\r
658 MiscFileList = Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/MiscellaneousFiles'), 'MiscellaneousFiles')\r
659 if MiscFileList:\r
660 Module.SetMiscFileList([MiscFileList])\r
661 else:\r
662 Module.SetMiscFileList([])\r
663\r
421ccda3 664 #\r
4234283c
LG
665 # UserExtensions\r
666 #\r
667 for Item in XmlList(Item, '/ModuleSurfaceArea/UserExtensions'):\r
668 Tmp = UserExtensionsXml()\r
669 UserExtension = Tmp.FromXml(Item, 'UserExtensions')\r
670 Module.SetUserExtensionList(Module.GetUserExtensionList() + [UserExtension])\r
671\r
672 return Module\r
673\r
674 def FromXml(self, Item, Key, IsStandAlongModule=False):\r
675 IsBinaryModule = XmlAttribute(Item, 'BinaryModule')\r
676 #\r
677 # Header\r
678 #\r
679 Tmp = HeaderXml()\r
680 Module = Tmp.FromXml(XmlNode(Item, '/%s/Header' % Key), 'Header', True, IsStandAlongModule)\r
681 Module.SetBinaryModule(IsBinaryModule)\r
682\r
683 if IsBinaryModule:\r
684 GlobalData.gIS_BINARY_INF = True\r
685\r
686 #\r
687 # ModuleProperties\r
688 #\r
689 Tmp = ModulePropertyXml()\r
690 (Module, BootModes, Events, HOBs) = \\r
691 Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/ModuleProperties'), 'ModuleProperties', Module)\r
692 Module.SetBootModeList(BootModes)\r
693 Module.SetEventList(Events)\r
694 Module.SetHobList(HOBs)\r
695 #\r
696 # ClonedFrom\r
697 #\r
698 Tmp = ClonedFromXml()\r
699 ClonedFrom = Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/ClonedFrom'), 'ClonedFrom')\r
700 if ClonedFrom:\r
701 Module.SetClonedFrom(ClonedFrom)\r
702\r
703 #\r
704 # LibraryClass\r
705 #\r
706 for SubItem in XmlList(Item, '/ModuleSurfaceArea/LibraryClassDefinitions/LibraryClass'):\r
707 Tmp = LibraryClassXml()\r
708 LibraryClass = Tmp.FromXml(SubItem, 'LibraryClass')\r
709 Module.SetLibraryClassList(Module.GetLibraryClassList() + [LibraryClass])\r
710\r
711 if XmlList(Item, '/ModuleSurfaceArea/LibraryClassDefinitions') and \\r
712 not XmlList(Item, '/ModuleSurfaceArea/LibraryClassDefinitions/LibraryClass'):\r
713 Module.SetLibraryClassList([None])\r
714\r
715 #\r
716 # SourceFiles\r
717 #\r
718 for SubItem in XmlList(Item, '/ModuleSurfaceArea/SourceFiles/Filename'):\r
719 Tmp = SourceFileXml()\r
720 SourceFile = Tmp.FromXml(SubItem, 'Filename')\r
721 Module.SetSourceFileList(Module.GetSourceFileList() + [SourceFile])\r
722\r
723 if XmlList(Item, '/ModuleSurfaceArea/SourceFiles') and \\r
724 not XmlList(Item, '/ModuleSurfaceArea/SourceFiles/Filename') :\r
725 Module.SetSourceFileList([None])\r
726\r
727 #\r
728 # BinaryFile\r
729 #\r
730 for SubItem in XmlList(Item, '/ModuleSurfaceArea/BinaryFiles/BinaryFile'):\r
731 Tmp = BinaryFileXml()\r
732 BinaryFile = Tmp.FromXml(SubItem, 'BinaryFile')\r
733 Module.SetBinaryFileList(Module.GetBinaryFileList() + [BinaryFile])\r
734\r
735 if XmlList(Item, '/ModuleSurfaceArea/BinaryFiles') and \\r
736 not XmlList(Item, '/ModuleSurfaceArea/BinaryFiles/BinaryFile') :\r
737 Module.SetBinaryFileList([None])\r
738 #\r
739 # PackageDependencies\r
740 #\r
741 for SubItem in XmlList(Item, '/ModuleSurfaceArea/PackageDependencies/Package'):\r
742 Tmp = PackageXml()\r
743 PackageDependency = Tmp.FromXml(SubItem, 'Package')\r
744 Module.SetPackageDependencyList(Module.GetPackageDependencyList() + [PackageDependency])\r
745\r
746 if XmlList(Item, '/ModuleSurfaceArea/PackageDependencies') and \\r
747 not XmlList(Item, '/ModuleSurfaceArea/PackageDependencies/Package'):\r
748 Module.SetPackageDependencyList([None])\r
749\r
421ccda3 750 #\r
4234283c
LG
751 # Guid\r
752 #\r
753 for SubItem in XmlList(Item, '/ModuleSurfaceArea/Guids/GuidCName'):\r
754 Tmp = GuidXml('Module')\r
755 GuidProtocolPpi = Tmp.FromXml(SubItem, 'GuidCName')\r
756 Module.SetGuidList(Module.GetGuidList() + [GuidProtocolPpi])\r
757\r
758 if XmlList(Item, '/ModuleSurfaceArea/Guids') and not XmlList(Item, '/ModuleSurfaceArea/Guids/GuidCName'):\r
759 Module.SetGuidList([None])\r
760\r
761 #\r
762 # Protocol\r
763 #\r
764 for SubItem in XmlList(Item, '/ModuleSurfaceArea/Protocols/Protocol'):\r
765 Tmp = ProtocolXml('Module')\r
766 GuidProtocolPpi = Tmp.FromXml(SubItem, 'Protocol')\r
767 Module.SetProtocolList(Module.GetProtocolList() + [GuidProtocolPpi])\r
768\r
769 if XmlList(Item, '/ModuleSurfaceArea/Protocols') and not XmlList(Item, '/ModuleSurfaceArea/Protocols/Protocol'):\r
770 Module.SetProtocolList([None])\r
771\r
772 #\r
773 # Ppi\r
774 #\r
775 for SubItem in XmlList(Item, '/ModuleSurfaceArea/PPIs/Ppi'):\r
776 Tmp = PpiXml('Module')\r
777 GuidProtocolPpi = Tmp.FromXml(SubItem, 'Ppi')\r
778 Module.SetPpiList(Module.GetPpiList() + [GuidProtocolPpi])\r
779\r
780 if XmlList(Item, '/ModuleSurfaceArea/PPIs') and not XmlList(Item, '/ModuleSurfaceArea/PPIs/Ppi'):\r
781 Module.SetPpiList([None])\r
782\r
783 #\r
784 # Extern\r
785 #\r
786 for SubItem in XmlList(Item, '/ModuleSurfaceArea/Externs/Extern'):\r
787 Tmp = ExternXml()\r
788 Extern = Tmp.FromXml(SubItem, 'Extern')\r
789 Module.SetExternList(Module.GetExternList() + [Extern])\r
790\r
791 if XmlList(Item, '/ModuleSurfaceArea/Externs') and not XmlList(Item, '/ModuleSurfaceArea/Externs/Extern'):\r
792 Module.SetExternList([None])\r
793\r
794 if not Module.GetBinaryModule():\r
795 #\r
796 # PcdCoded\r
797 #\r
798 for SubItem in XmlList(Item, '/ModuleSurfaceArea/PcdCoded/PcdEntry'):\r
799 Tmp = PcdEntryXml()\r
800 PcdEntry = Tmp.FromXml3(SubItem, 'PcdEntry')\r
801 Module.SetPcdList(Module.GetPcdList() + [PcdEntry])\r
802\r
803 if XmlList(Item, '/ModuleSurfaceArea/PcdCoded') and \\r
804 not XmlList(Item, '/ModuleSurfaceArea/PcdCoded/PcdEntry'):\r
805 Module.SetPcdList([None])\r
806\r
807 Module = self.FromXml2(Item, Module)\r
808 #\r
809 # return the module object\r
810 #\r
811 self.Module = Module\r
812 return self.Module\r
813\r
814 def ToXml(self, Module):\r
815 if self.Package:\r
816 pass\r
817 #\r
818 # Create root node of module surface area\r
819 #\r
820 DomModule = minidom.Document().createElement('ModuleSurfaceArea')\r
821 if Module.GetBinaryModule():\r
822 DomModule.setAttribute('BinaryModule', 'true')\r
823\r
824 #\r
825 # Header\r
826 #\r
827 Tmp = HeaderXml()\r
828 DomModule.appendChild(Tmp.ToXml(Module, 'Header'))\r
829 #\r
830 # ModuleProperties\r
831 #\r
832 Tmp = ModulePropertyXml()\r
833 DomModule.appendChild(Tmp.ToXml(Module, Module.GetBootModeList(), Module.GetEventList(), Module.GetHobList(), \\r
834 'ModuleProperties'))\r
835 #\r
836 # ClonedFrom\r
837 #\r
838 Tmp = ClonedFromXml()\r
839 if Module.GetClonedFrom():\r
840 DomModule.appendChild(Tmp.ToXml(Module.GetClonedFrom(), 'ClonedFrom'))\r
841 #\r
842 # LibraryClass\r
843 #\r
844 LibraryClassNode = CreateXmlElement('LibraryClassDefinitions', '', [], [])\r
845 for LibraryClass in Module.GetLibraryClassList():\r
846 Tmp = LibraryClassXml()\r
847 LibraryClassNode.appendChild(Tmp.ToXml2(LibraryClass, 'LibraryClass'))\r
848 DomModule.appendChild(LibraryClassNode)\r
849 #\r
850 # SourceFile\r
851 #\r
852 SourceFileNode = CreateXmlElement('SourceFiles', '', [], [])\r
853 for SourceFile in Module.GetSourceFileList():\r
854 Tmp = SourceFileXml()\r
855 SourceFileNode.appendChild(Tmp.ToXml(SourceFile, 'Filename'))\r
856 DomModule.appendChild(SourceFileNode)\r
857 #\r
858 # BinaryFile\r
859 #\r
860 BinaryFileNode = CreateXmlElement('BinaryFiles', '', [], [])\r
861 for BinaryFile in Module.GetBinaryFileList():\r
862 Tmp = BinaryFileXml()\r
863 BinaryFileNode.appendChild(Tmp.ToXml(BinaryFile, 'BinaryFile'))\r
864 DomModule.appendChild(BinaryFileNode)\r
865 #\r
866 # PackageDependencies\r
867 #\r
868 PackageDependencyNode = CreateXmlElement('PackageDependencies', '', [], [])\r
869 for PackageDependency in Module.GetPackageDependencyList():\r
870 Tmp = PackageXml()\r
871 PackageDependencyNode.appendChild(Tmp.ToXml(PackageDependency, 'Package'))\r
872 DomModule.appendChild(PackageDependencyNode)\r
873\r
874 #\r
875 # Guid\r
876 #\r
877 GuidProtocolPpiNode = CreateXmlElement('Guids', '', [], [])\r
878 for GuidProtocolPpi in Module.GetGuidList():\r
879 Tmp = GuidXml('Module')\r
880 GuidProtocolPpiNode.appendChild(Tmp.ToXml(GuidProtocolPpi, 'GuidCName'))\r
881 DomModule.appendChild(GuidProtocolPpiNode)\r
882\r
883 #\r
884 # Protocol\r
885 #\r
886 GuidProtocolPpiNode = CreateXmlElement('Protocols', '', [], [])\r
887 for GuidProtocolPpi in Module.GetProtocolList():\r
888 Tmp = ProtocolXml('Module')\r
889 GuidProtocolPpiNode.appendChild(Tmp.ToXml(GuidProtocolPpi, 'Protocol'))\r
890 DomModule.appendChild(GuidProtocolPpiNode)\r
891\r
892 #\r
893 # Ppi\r
894 #\r
895 GuidProtocolPpiNode = CreateXmlElement('PPIs', '', [], [])\r
896 for GuidProtocolPpi in Module.GetPpiList():\r
897 Tmp = PpiXml('Module')\r
898 GuidProtocolPpiNode.appendChild(Tmp.ToXml(GuidProtocolPpi, 'Ppi'))\r
899 DomModule.appendChild(GuidProtocolPpiNode)\r
900 #\r
901 # Extern\r
902 #\r
903 ExternNode = CreateXmlElement('Externs', '', [], [])\r
904 for Extern in Module.GetExternList():\r
905 Tmp = ExternXml()\r
906 ExternNode.appendChild(Tmp.ToXml(Extern, 'Extern'))\r
907 DomModule.appendChild(ExternNode)\r
908 #\r
909 # PcdCoded\r
910 #\r
911 PcdEntryNode = CreateXmlElement('PcdCoded', '', [], [])\r
912 for PcdEntry in Module.GetPcdList():\r
913 Tmp = PcdEntryXml()\r
914 PcdEntryNode.appendChild(Tmp.ToXml3(PcdEntry, 'PcdEntry'))\r
915 DomModule.appendChild(PcdEntryNode)\r
916\r
917 #\r
918 # PeiDepex\r
919 #\r
920 if Module.GetPeiDepex():\r
921 for Item in Module.GetPeiDepex():\r
922 Tmp = DepexXml()\r
923 DomModule.appendChild(Tmp.ToXml(Item, 'PeiDepex'))\r
924\r
925 #\r
926 # DxeDepex\r
927 #\r
928 if Module.GetDxeDepex():\r
929 for Item in Module.GetDxeDepex():\r
930 Tmp = DepexXml()\r
931 DomModule.appendChild(Tmp.ToXml(Item, 'DxeDepex'))\r
932\r
933 #\r
934 # SmmDepex\r
935 #\r
936 if Module.GetSmmDepex():\r
937 for Item in Module.GetSmmDepex():\r
938 Tmp = DepexXml()\r
939 DomModule.appendChild(Tmp.ToXml(Item, 'SmmDepex'))\r
940\r
941 #\r
942 # MiscellaneousFile\r
943 #\r
944 if Module.GetMiscFileList():\r
945 Tmp = MiscellaneousFileXml()\r
946 DomModule.appendChild(Tmp.ToXml(Module.GetMiscFileList()[0], 'MiscellaneousFiles'))\r
947 #\r
948 # UserExtensions\r
949 #\r
950 if Module.GetUserExtensionList():\r
951 for UserExtension in Module.GetUserExtensionList():\r
952 Tmp = UserExtensionsXml()\r
953 DomModule.appendChild(Tmp.ToXml(UserExtension, 'UserExtensions'))\r
954\r
955 return DomModule\r
956\r
957##\r
958# BuildFlagXml used to generate BuildFlag for <AsBuilt>\r
959#\r
960class BuildFlagXml(object):\r
961 def __init__(self):\r
962 self.Target = ''\r
963 self.TagName = ''\r
964 self.Family = ''\r
965 self.AsBuiltFlags = ''\r
966\r
967 def FromXml(self, Item, Key):\r
968 self.Target = XmlElement(Item, '%s/Target' % Key)\r
969 self.TagName = XmlElement(Item, '%s/TagName' % Key)\r
970 self.Family = XmlElement(Item, '%s/Family' % Key)\r
971\r
972 BuildFlag = BinaryBuildFlagObject()\r
973\r
974 BuildFlag.SetTarget(self.Target)\r
975 BuildFlag.SetTagName(self.TagName)\r
976 BuildFlag.SetFamily(self.Family)\r
977\r
978 return BuildFlag\r
979\r
980 #\r
981 # For AsBuild INF usage\r
982 #\r
983 def FromXml2(self, Item, Key):\r
984 self.AsBuiltFlags = XmlElement(Item, '%s' % Key)\r
985\r
986 LineList = GetSplitValueList(self.AsBuiltFlags, '\n')\r
987 ReturnLine = ''\r
988 Count = 0\r
989 for Line in LineList:\r
990 if Count == 0:\r
991 ReturnLine = "# " + Line\r
992 else:\r
993 ReturnLine = ReturnLine + '\n' + '# ' + Line\r
994 Count += 1\r
995\r
996 BuildFlag = BinaryBuildFlagObject()\r
997 BuildFlag.SetAsBuiltOptionFlags(ReturnLine)\r
998\r
999 return BuildFlag\r
1000\r
1001 def ToXml(self, BuildFlag, Key):\r
1002 if self.Target:\r
1003 pass\r
1004 AttributeList = []\r
1005 NodeList = []\r
1006 NodeList.append(['BuildFlags', BuildFlag])\r
1007\r
1008 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
1009 return Root\r