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