]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/UPT/Xml/PackageSurfaceAreaXml.py
BaseTools: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / BaseTools / Source / Python / UPT / Xml / PackageSurfaceAreaXml.py
CommitLineData
4234283c
LG
1## @file\r
2# This file is used to parse a Package file of .PKG file\r
3#\r
64285f15 4# Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>\r
4234283c 5#\r
2e351cbe 6# SPDX-License-Identifier: BSD-2-Clause-Patent\r
4234283c
LG
7#\r
8\r
9'''\r
10PackageSurfaceAreaXml\r
11'''\r
12from xml.dom import minidom\r
13\r
64285f15 14from Library.StringUtils import GetStringOfList\r
4234283c
LG
15from Library.Xml.XmlRoutines import XmlElement\r
16from Library.Xml.XmlRoutines import XmlNode\r
17from Library.Xml.XmlRoutines import XmlList\r
18from Library.Xml.XmlRoutines import CreateXmlElement\r
19from Object.POM.CommonObject import IncludeObject\r
20from Object.POM.CommonObject import TextObject\r
21from Object.POM.PackageObject import PackageObject\r
22from Xml.CommonXml import ClonedFromXml\r
23from Xml.CommonXml import PackageHeaderXml\r
24from Xml.CommonXml import HelpTextXml\r
25from Xml.CommonXml import CommonDefinesXml\r
26from Xml.CommonXml import LibraryClassXml\r
27from Xml.CommonXml import UserExtensionsXml\r
28from Xml.CommonXml import MiscellaneousFileXml\r
29from Xml.GuidProtocolPpiXml import GuidXml\r
30from Xml.GuidProtocolPpiXml import ProtocolXml\r
31from Xml.GuidProtocolPpiXml import PpiXml\r
32from Xml.ModuleSurfaceAreaXml import ModuleSurfaceAreaXml\r
33from Xml.PcdXml import PcdEntryXml\r
34\r
35##\r
36# IndustryStandardHeaderXml\r
37#\r
38class IndustryStandardHeaderXml(object):\r
39 def __init__(self):\r
40 self.HeaderFile = ''\r
41 self.HelpText = []\r
42\r
43 def FromXml(self, Item, Key):\r
44 self.HeaderFile = XmlElement(Item, '%s/HeaderFile' % Key)\r
45 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
46 HelpTextObj = HelpTextXml()\r
47 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
48 self.HelpText.append(HelpTextObj)\r
49\r
50 Include = IncludeObject()\r
51 Include.SetFilePath(self.HeaderFile)\r
52 HelpTxt = TextObject()\r
53 HelpTxt.SetString(self.HelpText)\r
54 Include.SetHelpText(HelpTxt)\r
55\r
56 return Include\r
57\r
58 def ToXml(self, IndustryStandardHeader, Key):\r
59 if self.HeaderFile:\r
60 pass\r
61 AttributeList = []\r
62 NodeList = [['HeaderFile', IndustryStandardHeader.GetFilePath()]]\r
63 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
64\r
65 return Root\r
66\r
67 def __str__(self):\r
68 Str = "HeaderFile = %s" % (self.HeaderFile)\r
69 for Item in self.HelpText:\r
70 Str = Str + "\n\t" + str(Item)\r
71 return Str\r
72##\r
73# PackageIncludeHeaderXml\r
74#\r
75class PackageIncludeHeaderXml(object):\r
76 def __init__(self):\r
77 self.HeaderFile = ''\r
78 self.CommonDefines = CommonDefinesXml()\r
79 self.HelpText = []\r
80\r
81 def FromXml(self, Item, Key):\r
82 self.HeaderFile = XmlElement(Item, '%s/HeaderFile' % Key)\r
83 self.CommonDefines.FromXml(XmlNode(Item, '%s/HeaderFile' % Key), 'HeaderFile')\r
84 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
85 HelpTextObj = HelpTextXml()\r
86 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
87 self.HelpText.append(HelpTextObj)\r
88\r
89 Include = IncludeObject()\r
90 Include.SetFilePath(self.HeaderFile)\r
91 Include.SetSupArchList(self.CommonDefines.SupArchList)\r
92 HelpTxt = TextObject()\r
93 HelpTxt.SetString(self.HelpText)\r
94 Include.SetHelpText(HelpTxt)\r
95\r
96 return Include\r
97\r
98 def ToXml(self, PackageIncludeHeader, Key):\r
99 if self.HeaderFile:\r
100 pass\r
101 AttributeList = [['SupArchList', GetStringOfList(PackageIncludeHeader.GetSupArchList())], \\r
102 ['SupModList', GetStringOfList(PackageIncludeHeader.GetSupModuleList())], ]\r
103\r
104 HeaderFileNode = CreateXmlElement('HeaderFile', PackageIncludeHeader.FilePath, [], AttributeList)\r
105\r
106 NodeList = [HeaderFileNode]\r
107 for Item in PackageIncludeHeader.GetHelpTextList():\r
108 Tmp = HelpTextXml()\r
109 NodeList.append(Tmp.ToXml(Item))\r
110\r
111 Root = CreateXmlElement('%s' % Key, '', NodeList, [])\r
112\r
113 return Root\r
114\r
115 def __str__(self):\r
116 Str = "HeaderFile = %s\n\t%s" % (self.HeaderFile, self.CommonDefines)\r
117 for Item in self.HelpText:\r
118 Str = Str + "\n\t" + str(Item)\r
119 return Str\r
120\r
121##\r
122# PcdCheckXml\r
123#\r
124class PcdCheckXml(object):\r
125 def __init__(self):\r
126 self.PcdCheck = ''\r
127\r
128 def FromXml(self, Item, Key):\r
129 if Key:\r
130 pass\r
131 self.PcdCheck = XmlElement(Item, 'PcdCheck')\r
132\r
133 return self.PcdCheck\r
134\r
135 def ToXml(self, PcdCheck, Key):\r
136 if self.PcdCheck:\r
137 pass\r
138 Root = CreateXmlElement('%s' % Key, PcdCheck, [], [])\r
139 return Root\r
140\r
141 def __str__(self):\r
142 return "PcdCheck = %s" % (self.PcdCheck)\r
143\r
144##\r
145# PackageSurfaceAreaXml\r
146#\r
147class PackageSurfaceAreaXml(object):\r
148 def __init__(self):\r
149 self.Package = None\r
150\r
151 def FromXml(self, Item, Key):\r
152 if Key:\r
153 pass\r
154 #\r
155 # Create a package object\r
156 #\r
157 Package = PackageObject()\r
158 #\r
159 # Header\r
160 #\r
161 Tmp = PackageHeaderXml()\r
162 Tmp.FromXml(XmlNode(Item, '/PackageSurfaceArea/Header'), 'Header', Package)\r
163 #\r
164 # ClonedFrom\r
165 #\r
166 Tmp = ClonedFromXml()\r
167 if XmlNode(Item, '/PackageSurfaceArea/ClonedFrom'):\r
168 ClonedFrom = Tmp.FromXml(XmlNode(Item, '/PackageSurfaceArea/ClonedFrom'), 'ClonedFrom')\r
169 Package.SetClonedFromList([ClonedFrom])\r
f7496d71 170 #\r
4234283c
LG
171 # LibraryClass\r
172 #\r
173\r
174 for SubItem in XmlList(Item, '/PackageSurfaceArea/LibraryClassDeclarations/LibraryClass'):\r
175 Tmp = LibraryClassXml()\r
176 LibraryClass = Tmp.FromXml(SubItem, 'LibraryClass')\r
177 Package.SetLibraryClassList(Package.GetLibraryClassList() + [LibraryClass])\r
178\r
179 if XmlList(Item, '/PackageSurfaceArea/LibraryClassDeclarations') and \\r
180 not XmlList(Item, '/PackageSurfaceArea/LibraryClassDeclarations/LibraryClass'):\r
181 Package.SetLibraryClassList([None])\r
182\r
183 #\r
184 # IndustryStandardHeader\r
185 #\r
186 for SubItem in XmlList(Item, '/PackageSurfaceArea/IndustryStandardIncludes/IndustryStandardHeader'):\r
187 Tmp = IndustryStandardHeaderXml()\r
188 Include = Tmp.FromXml(SubItem, 'IndustryStandardHeader')\r
189 Package.SetStandardIncludeFileList(Package.GetStandardIncludeFileList() + [Include])\r
190\r
191 if XmlList(Item, '/PackageSurfaceArea/IndustryStandardIncludes') and \\r
192 not XmlList(Item, '/PackageSurfaceArea/IndustryStandardIncludes/IndustryStandardHeader'):\r
193 Package.SetStandardIncludeFileList([None])\r
194\r
195\r
196 #\r
197 # PackageHeader\r
198 #\r
199 for SubItem in XmlList(Item, '/PackageSurfaceArea/PackageIncludes/PackageHeader'):\r
200 Tmp = PackageIncludeHeaderXml()\r
201 Include = Tmp.FromXml(SubItem, 'PackageHeader')\r
202 Package.SetPackageIncludeFileList(Package.GetPackageIncludeFileList() + [Include])\r
203\r
204 if XmlList(Item, '/PackageSurfaceArea/PackageIncludes') and not \\r
205 XmlList(Item, '/PackageSurfaceArea/PackageIncludes/PackageHeader'):\r
206 Package.SetPackageIncludeFileList([None])\r
207\r
208 #\r
209 # Guid\r
210 #\r
211 for SubItem in XmlList(Item, '/PackageSurfaceArea/GuidDeclarations/Entry'):\r
212 Tmp = GuidXml('Package')\r
213 GuidProtocolPpi = Tmp.FromXml(SubItem, 'Entry')\r
214 Package.SetGuidList(Package.GetGuidList() + [GuidProtocolPpi])\r
215\r
216 if XmlList(Item, '/PackageSurfaceArea/GuidDeclarations') and not \\r
217 XmlList(Item, '/PackageSurfaceArea/GuidDeclarations/Entry'):\r
218 Package.SetGuidList([None])\r
219\r
220 #\r
221 # Protocol\r
222 #\r
223 for SubItem in XmlList(Item, '/PackageSurfaceArea/ProtocolDeclarations/Entry'):\r
224 Tmp = ProtocolXml('Package')\r
225 GuidProtocolPpi = Tmp.FromXml(SubItem, 'Entry')\r
226 Package.SetProtocolList(Package.GetProtocolList() + [GuidProtocolPpi])\r
227\r
228 if XmlList(Item, '/PackageSurfaceArea/ProtocolDeclarations') and not \\r
229 XmlList(Item, '/PackageSurfaceArea/ProtocolDeclarations/Entry'):\r
230 Package.SetProtocolList([None])\r
231\r
232 #\r
233 # Ppi\r
234 #\r
235 for SubItem in XmlList(Item, '/PackageSurfaceArea/PpiDeclarations/Entry'):\r
236 Tmp = PpiXml('Package')\r
237 GuidProtocolPpi = Tmp.FromXml(SubItem, 'Entry')\r
238 Package.SetPpiList(Package.GetPpiList() + [GuidProtocolPpi])\r
239\r
240 if XmlList(Item, '/PackageSurfaceArea/PpiDeclarations') and not \\r
241 XmlList(Item, '/PackageSurfaceArea/PpiDeclarations/Entry'):\r
242 Package.SetPpiList([None])\r
243\r
244 #\r
245 # PcdEntry\r
246 #\r
247 for SubItem in XmlList(Item, '/PackageSurfaceArea/PcdDeclarations/PcdEntry'):\r
248 Tmp = PcdEntryXml()\r
249 PcdEntry = Tmp.FromXml2(SubItem, 'PcdEntry')\r
250 Package.SetPcdList(Package.GetPcdList() + [PcdEntry])\r
f7496d71 251\r
421ccda3
HC
252 #\r
253 # Get PcdErrorCommentDict from PcdError in PcdEntry Node\r
254 #\r
255 for PcdErrorObj in PcdEntry.GetPcdErrorsList():\r
256 PcdErrorMessageList = PcdErrorObj.GetErrorMessageList()\r
257 if PcdErrorMessageList:\r
258 Package.PcdErrorCommentDict[(PcdEntry.GetTokenSpaceGuidCName(), PcdErrorObj.GetErrorNumber())] = \\r
259 PcdErrorMessageList\r
f7496d71 260\r
4234283c
LG
261\r
262 if XmlList(Item, '/PackageSurfaceArea/PcdDeclarations') and not \\r
263 XmlList(Item, '/PackageSurfaceArea/PcdDeclarations/PcdEntry'):\r
264 Package.SetPcdList([None])\r
265\r
266 #\r
267 # PcdCheck\r
268 #\r
269 for SubItem in XmlList(Item, '/PackageSurfaceArea/PcdRelationshipChecks/PcdCheck'):\r
270 Tmp = PcdCheckXml()\r
271 PcdCheck = Tmp.FromXml(SubItem, 'PcdCheck')\r
272 Package.PcdChecks.append(PcdCheck)\r
273\r
274 #\r
275 # Modules\r
276 #\r
277 for SubItem in XmlList(Item, '/PackageSurfaceArea/Modules/ModuleSurfaceArea'):\r
278 Tmp = ModuleSurfaceAreaXml()\r
279 Module = Tmp.FromXml(SubItem, 'ModuleSurfaceArea')\r
d0acc87a
LG
280 ModuleDictKey = (Module.GetGuid(), Module.GetVersion(), Module.GetName(), Module.GetModulePath())\r
281 Package.ModuleDict[ModuleDictKey] = Module\r
f7496d71 282 #\r
4234283c
LG
283 # MiscellaneousFile\r
284 #\r
285 Tmp = MiscellaneousFileXml()\r
286 MiscFileList = Tmp.FromXml(XmlNode(Item, '/PackageSurfaceArea/MiscellaneousFiles'), 'MiscellaneousFiles')\r
287 if MiscFileList:\r
288 Package.SetMiscFileList([MiscFileList])\r
289 else:\r
290 Package.SetMiscFileList([])\r
291\r
f7496d71 292 #\r
4234283c
LG
293 # UserExtensions\r
294 #\r
295 for Item in XmlList(Item, '/PackageSurfaceArea/UserExtensions'):\r
296 Tmp = UserExtensionsXml()\r
297 UserExtension = Tmp.FromXml(Item, 'UserExtensions')\r
298 Package.UserExtensionList.append(UserExtension)\r
299\r
300 self.Package = Package\r
301 return self.Package\r
302\r
303 def ToXml(self, Package):\r
304 if self.Package:\r
305 pass\r
306 #\r
307 # Create PackageSurfaceArea node\r
308 #\r
309 DomPackage = minidom.Document().createElement('PackageSurfaceArea')\r
310 #\r
311 # Header\r
312 #\r
313 Tmp = PackageHeaderXml()\r
314 DomPackage.appendChild(Tmp.ToXml(Package, 'Header'))\r
315 #\r
316 # ClonedFrom\r
317 #\r
318 Tmp = ClonedFromXml()\r
319 if Package.GetClonedFromList() != []:\r
320 DomPackage.appendChild(Tmp.ToXml(Package.GetClonedFromList[0], 'ClonedFrom'))\r
321 #\r
322 # LibraryClass\r
323 #\r
324 LibraryClassNode = CreateXmlElement('LibraryClassDeclarations', '', [], [])\r
325 for LibraryClass in Package.GetLibraryClassList():\r
326 Tmp = LibraryClassXml()\r
327 LibraryClassNode.appendChild(Tmp.ToXml(LibraryClass, 'LibraryClass'))\r
328 DomPackage.appendChild(LibraryClassNode)\r
329 #\r
330 # IndustryStandardHeader\r
331 #\r
332 IndustryStandardHeaderNode = CreateXmlElement('IndustryStandardIncludes', '', [], [])\r
333 for Include in Package.GetStandardIncludeFileList():\r
334 Tmp = IndustryStandardHeaderXml()\r
335 IndustryStandardHeaderNode.appendChild(Tmp.ToXml(Include, 'IndustryStandardHeader'))\r
336 DomPackage.appendChild(IndustryStandardHeaderNode)\r
337 #\r
338 # PackageHeader\r
339 #\r
340 PackageIncludeHeaderNode = CreateXmlElement('PackageIncludes', '', [], [])\r
341 for Include in Package.GetPackageIncludeFileList():\r
342 Tmp = PackageIncludeHeaderXml()\r
343 PackageIncludeHeaderNode.appendChild(Tmp.ToXml(Include, 'PackageHeader'))\r
344 DomPackage.appendChild(PackageIncludeHeaderNode)\r
345 ModuleNode = CreateXmlElement('Modules', '', [], [])\r
346 for Module in Package.GetModuleDict().values():\r
347 Tmp = ModuleSurfaceAreaXml()\r
348 ModuleNode.appendChild(Tmp.ToXml(Module))\r
349 DomPackage.appendChild(ModuleNode)\r
350 #\r
351 # Guid\r
352 #\r
353 GuidProtocolPpiNode = CreateXmlElement('GuidDeclarations', '', [], [])\r
354 for GuidProtocolPpi in Package.GetGuidList():\r
355 Tmp = GuidXml('Package')\r
356 GuidProtocolPpiNode.appendChild(Tmp.ToXml\\r
357 (GuidProtocolPpi, 'Entry'))\r
358 DomPackage.appendChild(GuidProtocolPpiNode)\r
359 #\r
360 # Protocol\r
361 #\r
362 GuidProtocolPpiNode = \\r
363 CreateXmlElement('ProtocolDeclarations', '', [], [])\r
364 for GuidProtocolPpi in Package.GetProtocolList():\r
365 Tmp = ProtocolXml('Package')\r
366 GuidProtocolPpiNode.appendChild\\r
367 (Tmp.ToXml(GuidProtocolPpi, 'Entry'))\r
368 DomPackage.appendChild(GuidProtocolPpiNode)\r
f7496d71 369 #\r
4234283c
LG
370 # Ppi\r
371 #\r
372 GuidProtocolPpiNode = CreateXmlElement('PpiDeclarations', '', [], [])\r
373 for GuidProtocolPpi in Package.GetPpiList():\r
374 Tmp = PpiXml('Package')\r
375 GuidProtocolPpiNode.appendChild\\r
376 (Tmp.ToXml(GuidProtocolPpi, 'Entry'))\r
377 DomPackage.appendChild(GuidProtocolPpiNode)\r
378 #\r
379 # PcdEntry\r
380 #\r
381 PcdEntryNode = CreateXmlElement('PcdDeclarations', '', [], [])\r
382 for PcdEntry in Package.GetPcdList():\r
383 Tmp = PcdEntryXml()\r
384 PcdEntryNode.appendChild(Tmp.ToXml2(PcdEntry, 'PcdEntry'))\r
385 DomPackage.appendChild(PcdEntryNode)\r
386\r
387 #\r
388 # MiscellaneousFile\r
389 #\r
390 Tmp = MiscellaneousFileXml()\r
391 if Package.GetMiscFileList():\r
392 DomPackage.appendChild(Tmp.ToXml(Package.GetMiscFileList()[0], 'MiscellaneousFiles'))\r
393\r
394 #\r
395 # UserExtensions\r
396 #\r
397 if Package.GetUserExtensionList():\r
398 for UserExtension in Package.GetUserExtensionList():\r
399 Tmp = UserExtensionsXml()\r
400 DomPackage.appendChild(Tmp.ToXml(UserExtension, 'UserExtensions'))\r
401\r
402 return DomPackage\r