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