]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/UPT/Xml/CommonXml.py
Sync BaseTools Branch (version r2271) to EDKII main trunk.
[mirror_edk2.git] / BaseTools / Source / Python / UPT / Xml / CommonXml.py
CommitLineData
4234283c
LG
1## @file\r
2# This file is used to parse a PCD 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
16CommonXml\r
17'''\r
18\r
19##\r
20# Import Modules\r
21#\r
22\r
23from Core.DistributionPackageClass import DistributionPackageHeaderObject\r
24from Library.String import ConvertNEToNOTEQ\r
25from Library.String import ConvertNOTEQToNE\r
26from Library.String import GetSplitValueList\r
27from Library.String import GetStringOfList\r
28from Library.Xml.XmlRoutines import XmlElement\r
29from Library.Xml.XmlRoutines import XmlElement2\r
30from Library.Xml.XmlRoutines import XmlAttribute\r
31from Library.Xml.XmlRoutines import XmlNode\r
32from Library.Xml.XmlRoutines import XmlList\r
33from Library.Xml.XmlRoutines import CreateXmlElement\r
34from Object.POM.CommonObject import FileObject\r
35from Object.POM.CommonObject import MiscFileObject\r
36from Object.POM.CommonObject import UserExtensionObject\r
37from Object.POM.CommonObject import ClonedRecordObject\r
38from Object.POM.CommonObject import LibraryClassObject\r
39from Object.POM.CommonObject import FileNameObject\r
40from Object.POM.ModuleObject import ModuleObject\r
41from Xml.XmlParserMisc import IsRequiredItemListNull\r
42from Xml.XmlParserMisc import GetHelpTextList\r
43\r
44import Library.DataType as DataType\r
45\r
46##\r
47# ClonedFromXml\r
48#\r
49class ClonedFromXml(object):\r
50 def __init__(self):\r
51 self.GUID = ''\r
52 self.Version = ''\r
53\r
54 def FromXml(self, Item, Key):\r
55 self.GUID = XmlElement(Item, '%s/GUID' % Key)\r
56 self.Version = XmlAttribute(XmlNode(Item, '%s/GUID' % Key), 'Version')\r
57\r
58 if self.GUID == '' and self.Version == '':\r
59 return None\r
60\r
61 ClonedFrom = ClonedRecordObject()\r
62 ClonedFrom.SetPackageGuid(self.GUID)\r
63 ClonedFrom.SetPackageVersion(self.Version)\r
64\r
65 return ClonedFrom\r
66\r
67 def ToXml(self, ClonedFrom, Key):\r
68 if self.GUID:\r
69 pass\r
70 Element1 = CreateXmlElement('GUID', ClonedFrom.GetPackageGuid(), [],\r
71 [['Version', ClonedFrom.GetPackageVersion()]])\r
72 AttributeList = []\r
73 NodeList = [Element1]\r
74 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
75\r
76 return Root\r
77\r
78 def __str__(self):\r
79 return "GUID = %s Version = %s" % (self.GUID, self.Version)\r
80\r
81\r
82##\r
83# CommonDefinesXml\r
84#\r
85class CommonDefinesXml(object):\r
86 def __init__(self):\r
87 self.Usage = ''\r
88 self.SupArchList = []\r
89 self.SupModList = []\r
90 self.FeatureFlag = ''\r
91\r
92 def FromXml(self, Item, Key):\r
93 if Key:\r
94 pass\r
95 self.Usage = XmlAttribute(Item, 'Usage')\r
96 self.SupArchList = \\r
97 [Arch for Arch in GetSplitValueList(XmlAttribute(Item, 'SupArchList'), DataType.TAB_SPACE_SPLIT) if Arch]\r
98 self.SupModList = \\r
99 [Mod for Mod in GetSplitValueList(XmlAttribute(Item, 'SupModList'), DataType.TAB_SPACE_SPLIT) if Mod]\r
100 self.FeatureFlag = ConvertNOTEQToNE(XmlAttribute(Item, 'FeatureFlag'))\r
101\r
102\r
103 def ToXml(self):\r
104 pass\r
105\r
106 def __str__(self):\r
107 return "Usage = %s SupArchList = %s SupModList = %s FeatureFlag = %s" \\r
108 % (self.Usage, self.SupArchList, self.SupModList, self.FeatureFlag)\r
109\r
110\r
111##\r
112# HelpTextXml\r
113#\r
114class HelpTextXml(object):\r
115 def __init__(self):\r
116 self.HelpText = ''\r
117 self.Lang = ''\r
118\r
119 def FromXml(self, Item, Key):\r
120 if Key:\r
121 pass\r
122 self.HelpText = XmlElement2(Item, 'HelpText')\r
123 self.Lang = XmlAttribute(Item, 'Lang')\r
124\r
125 def ToXml(self, HelpText, Key='HelpText'):\r
126 if self.HelpText:\r
127 pass\r
128 return CreateXmlElement('%s' % Key, HelpText.GetString(), [], [['Lang', HelpText.GetLang()]])\r
129 def __str__(self):\r
130 return "HelpText = %s Lang = %s" % (self.HelpText, self.Lang)\r
131\r
132##\r
133# HeaderXml\r
134#\r
135class HeaderXml(object):\r
136 def __init__(self):\r
137 self.Name = ''\r
138 self.BaseName = ''\r
139 self.GUID = ''\r
140 self.Version = ''\r
141 self.Copyright = ''\r
142 self.License = ''\r
143 self.Abstract = ''\r
144 self.Description = ''\r
145\r
146 def FromXml(self, Item, Key, IsRequiredCheck=False, IsStandAlongModule=False):\r
147 if not Item and IsRequiredCheck:\r
148 XmlTreeLevel = []\r
149 if IsStandAlongModule:\r
150 XmlTreeLevel = ['DistributionPackage', 'ModuleSurfaceArea']\r
151 else:\r
152 XmlTreeLevel = ['DistributionPackage', 'PackageSurfaceArea', 'ModuleSurfaceArea']\r
153 CheckDict = {'Header':''}\r
154 IsRequiredItemListNull(CheckDict, XmlTreeLevel)\r
155 self.Name = XmlElement(Item, '%s/Name' % Key)\r
156 self.BaseName = XmlAttribute(XmlNode(Item, '%s/Name' % Key), 'BaseName')\r
157 self.GUID = XmlElement(Item, '%s/GUID' % Key)\r
158 self.Version = XmlAttribute(XmlNode(Item, '%s/GUID' % Key), 'Version')\r
159 self.Copyright = XmlElement(Item, '%s/Copyright' % Key)\r
160 self.License = XmlElement(Item, '%s/License' % Key)\r
161 self.Abstract = XmlElement(Item, '%s/Abstract' % Key)\r
162 self.Description = XmlElement(Item, '%s/Description' % Key)\r
163\r
164 ModuleHeader = ModuleObject()\r
165 ModuleHeader.SetName(self.Name)\r
166 ModuleHeader.SetBaseName(self.BaseName)\r
167 ModuleHeader.SetGuid(self.GUID)\r
168 ModuleHeader.SetVersion(self.Version)\r
169 ModuleHeader.SetCopyright(self.Copyright)\r
170 ModuleHeader.SetLicense(self.License)\r
171 ModuleHeader.SetAbstract(self.Abstract)\r
172 ModuleHeader.SetDescription(self.Description)\r
173\r
174 return ModuleHeader\r
175\r
176 def ToXml(self, Header, Key):\r
177 if self.GUID:\r
178 pass\r
179 Element1 = CreateXmlElement('Name', Header.GetName(), [], [['BaseName', Header.GetBaseName()]])\r
180 Element2 = CreateXmlElement('GUID', Header.GetGuid(), [], [['Version', Header.GetVersion()]])\r
181 AttributeList = []\r
182 NodeList = [Element1,\r
183 Element2,\r
184 ['Copyright', Header.GetCopyright()],\r
185 ['License', Header.GetLicense()],\r
186 ['Abstract', Header.GetAbstract()],\r
187 ['Description', Header.GetDescription()],\r
188 ]\r
189 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
190\r
191 return Root\r
192\r
193 def __str__(self):\r
194 return "Name = %s BaseName = %s GUID = %s Version = %s Copyright = %s \\r
195 License = %s Abstract = %s Description = %s" % \\r
196 (self.Name, self.BaseName, self.GUID, self.Version, self.Copyright, \\r
197 self.License, self.Abstract, self.Description)\r
198##\r
199# DistributionPackageHeaderXml\r
200#\r
201class DistributionPackageHeaderXml(object):\r
202 def __init__(self):\r
203 self.Header = HeaderXml()\r
204 self.ReadOnly = ''\r
205 self.RePackage = ''\r
206 self.Vendor = ''\r
207 self.Date = ''\r
208 self.Signature = ''\r
209 self.XmlSpecification = ''\r
210\r
211 def FromXml(self, Item, Key):\r
212 if not Item:\r
213 return None\r
214 self.ReadOnly = XmlAttribute(XmlNode(Item, '%s' % Key), 'ReadOnly')\r
215 self.RePackage = XmlAttribute(XmlNode(Item, '%s' % Key), 'RePackage')\r
216 self.Vendor = XmlElement(Item, '%s/Vendor' % Key)\r
217 self.Date = XmlElement(Item, '%s/Date' % Key)\r
218 self.Signature = XmlElement(Item, '%s/Signature' % Key)\r
219 self.XmlSpecification = XmlElement(Item, '%s/XmlSpecification' % Key)\r
220 self.Header.FromXml(Item, Key)\r
221\r
222 DistributionPackageHeader = DistributionPackageHeaderObject()\r
223 if self.ReadOnly.upper() == 'TRUE':\r
224 DistributionPackageHeader.ReadOnly = True\r
225 elif self.ReadOnly.upper() == 'FALSE':\r
226 DistributionPackageHeader.ReadOnly = False\r
227\r
228 if self.RePackage.upper() == 'TRUE':\r
229 DistributionPackageHeader.RePackage = True\r
230 elif self.RePackage.upper() == 'FALSE':\r
231 DistributionPackageHeader.RePackage = False\r
232 DistributionPackageHeader.Vendor = self.Vendor\r
233 DistributionPackageHeader.Date = self.Date\r
234 DistributionPackageHeader.Signature = self.Signature\r
235 DistributionPackageHeader.XmlSpecification = self.XmlSpecification\r
236\r
237 DistributionPackageHeader.SetName(self.Header.Name)\r
238 DistributionPackageHeader.SetBaseName(self.Header.BaseName)\r
239 DistributionPackageHeader.SetGuid(self.Header.GUID)\r
240 DistributionPackageHeader.SetVersion(self.Header.Version)\r
241 DistributionPackageHeader.SetCopyright(self.Header.Copyright)\r
242 DistributionPackageHeader.SetLicense(self.Header.License)\r
243 DistributionPackageHeader.SetAbstract(self.Header.Abstract)\r
244 DistributionPackageHeader.SetDescription(self.Header.Description)\r
245\r
246 return DistributionPackageHeader\r
247\r
248 def ToXml(self, DistributionPackageHeader, Key):\r
249 if self.Header:\r
250 pass\r
251 Element1 = CreateXmlElement('Name', \\r
252 DistributionPackageHeader.GetName(), [], \\r
253 [['BaseName', \\r
254 DistributionPackageHeader.GetBaseName()]])\r
255 Element2 = CreateXmlElement('GUID', \\r
256 DistributionPackageHeader.GetGuid(), [], \\r
257 [['Version', \\r
258 DistributionPackageHeader.GetVersion()]])\r
259 AttributeList = []\r
260 if DistributionPackageHeader.ReadOnly != '':\r
261 AttributeList.append(['ReadOnly', str(DistributionPackageHeader.ReadOnly).lower()])\r
262 if DistributionPackageHeader.RePackage != '':\r
263 AttributeList.append(['RePackage', str(DistributionPackageHeader.RePackage).lower()])\r
264\r
265 NodeList = [Element1,\r
266 Element2,\r
267 ['Vendor', DistributionPackageHeader.Vendor],\r
268 ['Date', DistributionPackageHeader.Date],\r
269 ['Copyright', DistributionPackageHeader.GetCopyright()],\r
270 ['License', DistributionPackageHeader.GetLicense()],\r
271 ['Abstract', DistributionPackageHeader.GetAbstract()],\r
272 ['Description', \\r
273 DistributionPackageHeader.GetDescription()],\r
274 ['Signature', DistributionPackageHeader.Signature],\r
275 ['XmlSpecification', \\r
276 DistributionPackageHeader.XmlSpecification],\r
277 ]\r
278 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
279\r
280 return Root\r
281\r
282 def __str__(self):\r
283 return "ReadOnly = %s RePackage = %s Vendor = %s Date = %s \\r
284 Signature = %s XmlSpecification = %s %s" % \\r
285 (self.ReadOnly, self.RePackage, self.Vendor, self.Date, \\r
286 self.Signature, self.XmlSpecification, self.Header)\r
287##\r
288# PackageHeaderXml\r
289#\r
290class PackageHeaderXml(object):\r
291 def __init__(self):\r
292 self.Header = HeaderXml()\r
293 self.PackagePath = ''\r
294\r
295 def FromXml(self, Item, Key, PackageObject2):\r
296 if not Item:\r
297 XmlTreeLevel = ['DistributionPackage', 'PackageSurfaceArea']\r
298 CheckDict = {'PackageHeader':None, }\r
299 IsRequiredItemListNull(CheckDict, XmlTreeLevel)\r
300 self.PackagePath = XmlElement(Item, '%s/PackagePath' % Key)\r
301 self.Header.FromXml(Item, Key)\r
302\r
303 PackageObject2.SetName(self.Header.Name)\r
304 PackageObject2.SetBaseName(self.Header.BaseName)\r
305 PackageObject2.SetGuid(self.Header.GUID)\r
306 PackageObject2.SetVersion(self.Header.Version)\r
307 PackageObject2.SetCopyright(self.Header.Copyright)\r
308 PackageObject2.SetLicense(self.Header.License)\r
309 PackageObject2.SetAbstract(self.Header.Abstract)\r
310 PackageObject2.SetDescription(self.Header.Description)\r
311 PackageObject2.SetPackagePath(self.PackagePath)\r
312\r
313 def ToXml(self, PackageObject2, Key):\r
314 if self.PackagePath:\r
315 pass\r
316 Element1 = \\r
317 CreateXmlElement('Name', PackageObject2.GetName(), [], \\r
318 [['BaseName', PackageObject2.GetBaseName()]])\r
319 Element2 = CreateXmlElement('GUID', PackageObject2.GetGuid(), [], \\r
320 [['Version', PackageObject2.GetVersion()]])\r
321 AttributeList = []\r
322 NodeList = [Element1,\r
323 Element2,\r
324 ['Copyright', PackageObject2.GetCopyright()],\r
325 ['License', PackageObject2.GetLicense()],\r
326 ['Abstract', PackageObject2.GetAbstract()],\r
327 ['Description', PackageObject2.GetDescription()],\r
328 ['PackagePath', PackageObject2.GetPackagePath()],\r
329 ]\r
330 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
331\r
332 return Root\r
333\r
334 def __str__(self):\r
335 return "PackagePath = %s %s" \\r
336 % (self.PackagePath, self.Header)\r
337\r
338##\r
339# MiscellaneousFileXml\r
340#\r
341class MiscellaneousFileXml(object):\r
342 def __init__(self):\r
343 self.Header = HeaderXml()\r
344 self.Files = []\r
345 ##\r
346 # This API is used for Package or Module's MiscellaneousFile section\r
347 #\r
348 def FromXml(self, Item, Key):\r
349 if not Item:\r
350 return None\r
351 self.Header.FromXml(Item, Key)\r
352 NewItem = XmlNode(Item, '%s/Header' % Key)\r
353 self.Header.FromXml(NewItem, 'Header')\r
354\r
355 for SubItem in XmlList(Item, '%s/Filename' % Key):\r
356 Filename = XmlElement(SubItem, '%s/Filename' % Key)\r
357 Executable = XmlAttribute(XmlNode(SubItem, '%s/Filename' % Key), 'Executable')\r
358 if Executable.upper() == "TRUE":\r
359 Executable = True\r
360 else:\r
361 Executable = False\r
362 self.Files.append([Filename, Executable])\r
363\r
364 MiscFile = MiscFileObject()\r
365 MiscFile.SetCopyright(self.Header.Copyright)\r
366 MiscFile.SetLicense(self.Header.License)\r
367 MiscFile.SetAbstract(self.Header.Abstract)\r
368 MiscFile.SetDescription(self.Header.Description)\r
369 MiscFileList = []\r
370 for File in self.Files:\r
371 FileObj = FileObject()\r
372 FileObj.SetURI(File[0])\r
373 FileObj.SetExecutable(File[1])\r
374 MiscFileList.append(FileObj)\r
375 MiscFile.SetFileList(MiscFileList)\r
376\r
377 return MiscFile\r
378 ##\r
379 # This API is used for DistP's tool section\r
380 #\r
381 def FromXml2(self, Item, Key):\r
382 if Item is None:\r
383 return None\r
384\r
385 NewItem = XmlNode(Item, '%s/Header' % Key)\r
386 self.Header.FromXml(NewItem, 'Header')\r
387\r
388 for SubItem in XmlList(Item, '%s/Filename' % Key):\r
389 Filename = XmlElement(SubItem, '%s/Filename' % Key)\r
390 Executable = \\r
391 XmlAttribute(XmlNode(SubItem, '%s/Filename' % Key), 'Executable')\r
392 OsType = XmlAttribute(XmlNode(SubItem, '%s/Filename' % Key), 'OS')\r
393 if Executable.upper() == "TRUE":\r
394 Executable = True\r
395 else:\r
396 Executable = False\r
397 self.Files.append([Filename, Executable, OsType])\r
398\r
399 MiscFile = MiscFileObject()\r
400 MiscFile.SetName(self.Header.Name)\r
401 MiscFile.SetCopyright(self.Header.Copyright)\r
402 MiscFile.SetLicense(self.Header.License)\r
403 MiscFile.SetAbstract(self.Header.Abstract)\r
404 MiscFile.SetDescription(self.Header.Description)\r
405 MiscFileList = []\r
406 for File in self.Files:\r
407 FileObj = FileObject()\r
408 FileObj.SetURI(File[0])\r
409 FileObj.SetExecutable(File[1])\r
410 FileObj.SetOS(File[2])\r
411 MiscFileList.append(FileObj)\r
412 MiscFile.SetFileList(MiscFileList)\r
413\r
414 return MiscFile\r
415\r
416 ##\r
417 # This API is used for Package or Module's MiscellaneousFile section\r
418 #\r
419 def ToXml(self, MiscFile, Key):\r
420 if self.Header:\r
421 pass\r
422 if MiscFile:\r
423 NodeList = [['Copyright', MiscFile.GetCopyright()],\r
424 ['License', MiscFile.GetLicense()],\r
425 ['Abstract', MiscFile.GetAbstract()],\r
426 ['Description', MiscFile.GetDescription()],\r
427 ]\r
428\r
429 for File in MiscFile.GetFileList():\r
430 NodeList.append\\r
431 (CreateXmlElement\\r
432 ('Filename', File.GetURI(), [], \\r
433 [['Executable', str(File.GetExecutable()).lower()]]))\r
434 Root = CreateXmlElement('%s' % Key, '', NodeList, [])\r
435\r
436 return Root\r
437 ##\r
438 # This API is used for DistP's tool section\r
439 #\r
440 def ToXml2(self, MiscFile, Key):\r
441 if self.Header:\r
442 pass\r
443 if MiscFile:\r
444 NodeList = [['Name', MiscFile.GetName()],\r
445 ['Copyright', MiscFile.GetCopyright()],\r
446 ['License', MiscFile.GetLicense()],\r
447 ['Abstract', MiscFile.GetAbstract()],\r
448 ['Description', MiscFile.GetDescription()],\r
449 ]\r
450 HeaderNode = CreateXmlElement('Header', '', NodeList, [])\r
451 NodeList = [HeaderNode]\r
452\r
453 for File in MiscFile.GetFileList():\r
454 NodeList.append\\r
455 (CreateXmlElement\\r
456 ('Filename', File.GetURI(), [], \\r
457 [['Executable', str(File.GetExecutable()).lower()], \\r
458 ['OS', File.GetOS()]]))\r
459 Root = CreateXmlElement('%s' % Key, '', NodeList, [])\r
460\r
461 return Root\r
462\r
463 def __str__(self):\r
464 Str = str(self.Header)\r
465 for Item in self.Files:\r
466 Str = Str + '\n\tFilename:' + str(Item)\r
467 return Str\r
468##\r
469# UserExtensionsXml\r
470#\r
471class UserExtensionsXml(object):\r
472 def __init__(self):\r
473 self.UserId = ''\r
474 self.Identifier = ''\r
475 self.DefineDict = {}\r
476 self.BuildOptionDict = {}\r
477 self.IncludesDict = {}\r
478 self.SourcesDict = {}\r
479 self.BinariesDict = {}\r
480 self.SupArchList = []\r
481 self.Statement = ''\r
482 self.Defines = ''\r
483 self.BuildOptions = ''\r
484\r
485 def FromXml2(self, Item, Key):\r
486 self.UserId = XmlAttribute(XmlNode(Item, '%s' % Key), 'UserId')\r
487 self.Identifier = XmlAttribute(XmlNode(Item, '%s' % Key), 'Identifier')\r
488\r
489 UserExtension = UserExtensionObject()\r
490 UserExtension.SetUserID(self.UserId)\r
491 UserExtension.SetIdentifier(self.Identifier)\r
492\r
493 return UserExtension\r
494\r
495 def FromXml(self, Item, Key):\r
496 self.UserId = XmlAttribute(XmlNode(Item, '%s' % Key), 'UserId')\r
497 self.Identifier = XmlAttribute(XmlNode(Item, '%s' % Key), 'Identifier')\r
498\r
499 DefineItem = XmlNode(Item, '%s/Define' % Key)\r
500 for SubItem in XmlList(DefineItem, 'Define/Statement'):\r
501 Statement = XmlElement(SubItem, '%s/Statement' % Key)\r
502 self.DefineDict[Statement] = ""\r
503\r
504 BuildOptionItem = XmlNode(Item, '%s/BuildOption' % Key)\r
505 for SubItem in XmlList(BuildOptionItem, 'BuildOption/Statement'):\r
506 Statement = XmlElement(SubItem, '%s/Statement' % Key)\r
507 Arch = XmlAttribute(XmlNode(SubItem, '%s/Statement' % Key), 'SupArchList')\r
508 self.BuildOptionDict[Arch] = Statement\r
509\r
510 IncludesItem = XmlNode(Item, '%s/Includes' % Key)\r
511 for SubItem in XmlList(IncludesItem, 'Includes/Statement'):\r
512 Statement = XmlElement(SubItem, '%s/Statement' % Key)\r
513 Arch = XmlAttribute(XmlNode(SubItem, '%s/Statement' % Key), 'SupArchList')\r
514 self.IncludesDict[Statement] = Arch\r
515\r
516 SourcesItem = XmlNode(Item, '%s/Sources' % Key)\r
517 Tmp = UserExtensionSourceXml()\r
518 SourceDict = Tmp.FromXml(SourcesItem, 'Sources')\r
519 self.SourcesDict = SourceDict\r
520\r
521 BinariesItem = XmlNode(Item, '%s/Binaries' % Key)\r
522 Tmp = UserExtensionBinaryXml()\r
523 BinariesDict = Tmp.FromXml(BinariesItem, 'Binaries')\r
524 self.BinariesDict = BinariesDict\r
525\r
526 self.Statement = XmlElement(Item, 'UserExtensions')\r
527 SupArch = XmlAttribute(XmlNode(Item, '%s' % Key), 'SupArchList')\r
528 self.SupArchList = [Arch for Arch in GetSplitValueList(SupArch, DataType.TAB_SPACE_SPLIT) if Arch]\r
529\r
530 UserExtension = UserExtensionObject()\r
531 UserExtension.SetUserID(self.UserId)\r
532 UserExtension.SetIdentifier(self.Identifier)\r
533 UserExtension.SetStatement(self.Statement)\r
534 UserExtension.SetSupArchList(self.SupArchList)\r
535 UserExtension.SetDefinesDict(self.DefineDict)\r
536 UserExtension.SetBuildOptionDict(self.BuildOptionDict)\r
537 UserExtension.SetIncludesDict(self.IncludesDict)\r
538 UserExtension.SetSourcesDict(self.SourcesDict)\r
539 UserExtension.SetBinariesDict(self.BinariesDict)\r
540\r
541 return UserExtension\r
542\r
543 def ToXml(self, UserExtension, Key):\r
544 if self.UserId:\r
545 pass\r
546\r
547 AttributeList = [['UserId', str(UserExtension.GetUserID())],\r
548 ['Identifier', str(UserExtension.GetIdentifier())],\r
549 ['SupArchList', \\r
550 GetStringOfList(UserExtension.GetSupArchList())],\r
551 ]\r
552\r
553 Root = CreateXmlElement('%s' % Key, UserExtension.GetStatement(), [], \\r
554 AttributeList)\r
555\r
556 NodeList = []\r
557 DefineDict = UserExtension.GetDefinesDict()\r
558 if DefineDict:\r
559 for Item in DefineDict.keys():\r
560 NodeList.append(CreateXmlElement\\r
561 ('Statement', Item, [], []))\r
562 DefineElement = CreateXmlElement('Define', '', NodeList, [])\r
563 Root.appendChild(DefineElement)\r
564\r
565 NodeList = []\r
566 BuildOptionDict = UserExtension.GetBuildOptionDict()\r
567 if BuildOptionDict:\r
568 for Item in BuildOptionDict.keys():\r
569 NodeList.append(CreateXmlElement\\r
570 ('Statement', BuildOptionDict[Item], [], \\r
571 [['SupArchList', Item]]))\r
572 BuildOptionElement = \\r
573 CreateXmlElement('BuildOption', '', NodeList, [])\r
574 Root.appendChild(BuildOptionElement)\r
575\r
576 NodeList = []\r
577 IncludesDict = UserExtension.GetIncludesDict()\r
578 if IncludesDict:\r
579 for Item in IncludesDict.keys():\r
580 NodeList.append(CreateXmlElement\\r
581 ('Statement', Item, [], \\r
582 [['SupArchList', IncludesDict[Item]]]))\r
583 IncludesElement = CreateXmlElement('Includes', '', NodeList, [])\r
584 Root.appendChild(IncludesElement)\r
585\r
586 NodeList = []\r
587 SourcesDict = UserExtension.GetSourcesDict()\r
588 if SourcesDict:\r
589 Tmp = UserExtensionSourceXml()\r
590 Root.appendChild(Tmp.ToXml(SourcesDict, 'Sources'))\r
591\r
592 NodeList = []\r
593 BinariesDict = UserExtension.GetBinariesDict()\r
594 if BinariesDict:\r
595 Tmp = UserExtensionBinaryXml()\r
596 Root.appendChild(Tmp.ToXml(BinariesDict, 'Binaries'))\r
597\r
598 return Root\r
599\r
600 def __str__(self):\r
601 Str = "UserId = %s Identifier = %s" % (self.UserId, self.Identifier)\r
602 Str = Str + '\n\tDefines:' + str(self.Defines)\r
603 Str = Str + '\n\tBuildOptions:' + str(self.BuildOptions)\r
604 return Str\r
605\r
606##\r
607# UserExtensionSourceXml\r
608#\r
609class UserExtensionSourceXml(object):\r
610 def __init__(self):\r
611 self.UserExtensionSource = ''\r
612\r
613 def FromXml(self, Item, Key):\r
614 if Key:\r
615 pass\r
616 if self.UserExtensionSource:\r
617 pass\r
618 Dict = {}\r
619\r
620 #SourcesItem = XmlNode(Item, '%s/Sources' % Key)\r
621 for SubItem in XmlList(Item, 'Sources/SourceFile'):\r
622 FileName = XmlElement(SubItem, 'SourceFile/FileName')\r
623 Family = XmlElement(SubItem, 'SourceFile/Family')\r
624 FeatureFlag = XmlElement(SubItem, 'SourceFile/FeatureFlag')\r
625 SupArchStr = XmlElement(SubItem, 'SourceFile/SupArchList')\r
626 DictKey = (FileName, Family, FeatureFlag, SupArchStr)\r
627\r
628 ValueList = []\r
629 for ValueNodeItem in XmlList(SubItem, \\r
630 'SourceFile/SourceFileOtherAttr'):\r
631 TagName = XmlElement(ValueNodeItem, \\r
632 'SourceFileOtherAttr/TagName')\r
633 ToolCode = XmlElement(ValueNodeItem, \\r
634 'SourceFileOtherAttr/ToolCode')\r
635 Comment = XmlElement(ValueNodeItem, \\r
636 'SourceFileOtherAttr/Comment')\r
637 if (TagName == ' ') and (ToolCode == ' ') and (Comment == ' '):\r
638 TagName = ''\r
639 ToolCode = ''\r
640 Comment = ''\r
641 ValueList.append((TagName, ToolCode, Comment))\r
642\r
643 Dict[DictKey] = ValueList\r
644\r
645 return Dict\r
646\r
647 def ToXml(self, Dict, Key):\r
648 if self.UserExtensionSource:\r
649 pass\r
650 SourcesNodeList = []\r
651 for Item in Dict:\r
652 ValueList = Dict[Item]\r
653 (FileName, Family, FeatureFlag, SupArchStr) = Item\r
654 SourceFileNodeList = []\r
655 SourceFileNodeList.append(["FileName", FileName])\r
656 SourceFileNodeList.append(["Family", Family])\r
657 SourceFileNodeList.append(["FeatureFlag", FeatureFlag])\r
658 SourceFileNodeList.append(["SupArchList", SupArchStr])\r
659 for (TagName, ToolCode, Comment) in ValueList:\r
660 ValueNodeList = []\r
661 if not (TagName or ToolCode or Comment):\r
662 TagName = ' '\r
663 ToolCode = ' '\r
664 Comment = ' '\r
665 ValueNodeList.append(["TagName", TagName])\r
666 ValueNodeList.append(["ToolCode", ToolCode])\r
667 ValueNodeList.append(["Comment", Comment])\r
668 ValueNodeXml = CreateXmlElement('SourceFileOtherAttr', '', \\r
669 ValueNodeList, [])\r
670 SourceFileNodeList.append(ValueNodeXml)\r
671 SourceFileNodeXml = CreateXmlElement('SourceFile', '', \\r
672 SourceFileNodeList, [])\r
673 SourcesNodeList.append(SourceFileNodeXml)\r
674 Root = CreateXmlElement('%s' % Key, '', SourcesNodeList, [])\r
675 return Root\r
676\r
677##\r
678# UserExtensionBinaryXml\r
679#\r
680class UserExtensionBinaryXml(object):\r
681 def __init__(self):\r
682 self.UserExtensionBinary = ''\r
683\r
684 def FromXml(self, Item, Key):\r
685 if Key:\r
686 pass\r
687 if self.UserExtensionBinary:\r
688 pass\r
689\r
690 Dict = {}\r
691\r
692 for SubItem in XmlList(Item, 'Binaries/Binary'):\r
693 FileName = XmlElement(SubItem, 'Binary/FileName')\r
694 FileType = XmlElement(SubItem, 'Binary/FileType')\r
695 FFE = XmlElement(SubItem, 'Binary/FeatureFlag')\r
696 SupArch = XmlElement(SubItem, 'Binary/SupArchList')\r
697 DictKey = (FileName, FileType, ConvertNOTEQToNE(FFE), SupArch)\r
698\r
699 ValueList = []\r
700 for ValueNodeItem in XmlList(SubItem, \\r
701 'Binary/BinaryFileOtherAttr'):\r
702 Target = XmlElement(ValueNodeItem, \\r
703 'BinaryFileOtherAttr/Target')\r
704 Family = XmlElement(ValueNodeItem, \\r
705 'BinaryFileOtherAttr/Family')\r
706 TagName = XmlElement(ValueNodeItem, \\r
707 'BinaryFileOtherAttr/TagName')\r
708 Comment = XmlElement(ValueNodeItem, \\r
709 'BinaryFileOtherAttr/Comment')\r
710 if (Target == ' ') and (Family == ' ') and \\r
711 (TagName == ' ') and (Comment == ' '):\r
712 Target = ''\r
713 Family = ''\r
714 TagName = ''\r
715 Comment = ''\r
716\r
717 ValueList.append((Target, Family, TagName, Comment))\r
718\r
719 Dict[DictKey] = ValueList\r
720\r
721 return Dict\r
722\r
723 def ToXml(self, Dict, Key):\r
724 if self.UserExtensionBinary:\r
725 pass\r
726 BinariesNodeList = []\r
727 for Item in Dict:\r
728 ValueList = Dict[Item]\r
729 (FileName, FileType, FeatureFlag, SupArch) = Item\r
730 FileNodeList = []\r
731 FileNodeList.append(["FileName", FileName])\r
732 FileNodeList.append(["FileType", FileType])\r
733 FileNodeList.append(["FeatureFlag", ConvertNEToNOTEQ(FeatureFlag)])\r
734 FileNodeList.append(["SupArchList", SupArch])\r
735 for (Target, Family, TagName, Comment) in ValueList:\r
736 ValueNodeList = []\r
737 if not (Target or Family or TagName or Comment):\r
738 Target = ' '\r
739 Family = ' '\r
740 TagName = ' '\r
741 Comment = ' '\r
742 ValueNodeList.append(["Target", Target])\r
743 ValueNodeList.append(["Family", Family])\r
744 ValueNodeList.append(["TagName", TagName])\r
745 ValueNodeList.append(["Comment", Comment])\r
746 ValueNodeXml = CreateXmlElement('BinaryFileOtherAttr', '', \\r
747 ValueNodeList, [])\r
748 FileNodeList.append(ValueNodeXml)\r
749 FileNodeXml = CreateXmlElement('Binary', '', FileNodeList, [])\r
750 BinariesNodeList.append(FileNodeXml)\r
751 Root = CreateXmlElement('%s' % Key, '', BinariesNodeList, [])\r
752 return Root\r
753\r
754##\r
755# LibraryClassXml\r
756#\r
757class LibraryClassXml(object):\r
758 def __init__(self):\r
759 self.Keyword = ''\r
760 self.HeaderFile = ''\r
761 self.RecommendedInstanceGuid = ''\r
762 self.RecommendedInstanceVersion = ''\r
763 self.CommonDefines = CommonDefinesXml()\r
764 self.HelpText = []\r
765\r
766 def FromXml(self, Item, Key):\r
767 self.Keyword = XmlAttribute(XmlNode(Item, '%s' % Key), 'Keyword')\r
768 if self.Keyword == '':\r
769 self.Keyword = XmlElement(Item, '%s/Keyword' % Key)\r
770 self.HeaderFile = XmlElement(Item, '%s/HeaderFile' % Key)\r
771 self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)\r
772 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
773 HelpTextObj = HelpTextXml()\r
774 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
775 self.HelpText.append(HelpTextObj)\r
776\r
777 LibraryClass = LibraryClassObject()\r
778 LibraryClass.SetLibraryClass(self.Keyword)\r
779 LibraryClass.SetIncludeHeader(self.HeaderFile)\r
780 if self.CommonDefines.Usage:\r
781 LibraryClass.SetUsage(self.CommonDefines.Usage)\r
782 LibraryClass.SetSupArchList(self.CommonDefines.SupArchList)\r
783 LibraryClass.SetSupModuleList(self.CommonDefines.SupModList)\r
784 LibraryClass.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))\r
785 LibraryClass.SetHelpTextList(GetHelpTextList(self.HelpText))\r
786\r
787 return LibraryClass\r
788\r
789 def ToXml(self, LibraryClass, Key):\r
790 if self.HeaderFile:\r
791 pass\r
792 AttributeList = \\r
793 [['Keyword', LibraryClass.GetLibraryClass()],\r
794 ['SupArchList', GetStringOfList(LibraryClass.GetSupArchList())],\r
795 ['SupModList', GetStringOfList(LibraryClass.GetSupModuleList())]\r
796 ]\r
797 NodeList = [['HeaderFile', LibraryClass.GetIncludeHeader()]]\r
798 for Item in LibraryClass.GetHelpTextList():\r
799 Tmp = HelpTextXml()\r
800 NodeList.append(Tmp.ToXml(Item))\r
801\r
802 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
803\r
804 return Root\r
805\r
806 def ToXml2(self, LibraryClass, Key):\r
807 if self.HeaderFile:\r
808 pass\r
809\r
810 FeatureFlag = ConvertNEToNOTEQ(LibraryClass.GetFeatureFlag())\r
811\r
812 AttributeList = \\r
813 [['Usage', LibraryClass.GetUsage()], \\r
814 ['SupArchList', GetStringOfList(LibraryClass.GetSupArchList())], \\r
815 ['SupModList', GetStringOfList(LibraryClass.GetSupModuleList())], \\r
816 ['FeatureFlag', FeatureFlag]\r
817 ]\r
818 NodeList = [['Keyword', LibraryClass.GetLibraryClass()], ]\r
819 for Item in LibraryClass.GetHelpTextList():\r
820 Tmp = HelpTextXml()\r
821 NodeList.append(Tmp.ToXml(Item))\r
822\r
823 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
824\r
825 return Root\r
826\r
827 def __str__(self):\r
828 Str = "Keyword = %s HeaderFile = %s RecommendedInstanceGuid = %s RecommendedInstanceVersion = %s %s" % \\r
829 (self.Keyword, self.HeaderFile, self.RecommendedInstanceGuid, self.RecommendedInstanceVersion, \\r
830 self.CommonDefines)\r
831 for Item in self.HelpText:\r
832 Str = Str + "\n\t" + str(Item)\r
833 return Str\r
834\r
835##\r
836# FilenameXml\r
837#\r
838class FilenameXml(object):\r
839 def __init__(self):\r
840 self.FileType = ''\r
841 self.Filename = ''\r
842 self.CommonDefines = CommonDefinesXml()\r
843\r
844 def FromXml(self, Item, Key):\r
845 self.FileType = XmlAttribute(Item, 'FileType')\r
846 self.Filename = XmlElement(Item, 'Filename')\r
847 self.CommonDefines.FromXml(Item, Key)\r
848\r
849 FeatureFlag = ConvertNOTEQToNE(self.CommonDefines.FeatureFlag)\r
850\r
851 Filename = FileNameObject()\r
852 #\r
853 # Convert File Type\r
854 #\r
855 if self.FileType == 'UEFI_IMAGE':\r
856 self.FileType = 'PE32'\r
857\r
858 Filename.SetFileType(self.FileType)\r
859 Filename.SetFilename(self.Filename)\r
860 Filename.SetSupArchList(self.CommonDefines.SupArchList)\r
861 Filename.SetFeatureFlag(FeatureFlag)\r
862\r
863 return Filename\r
864\r
865 def ToXml(self, Filename, Key):\r
866 if self.Filename:\r
867 pass\r
868 AttributeList = [['SupArchList', \\r
869 GetStringOfList(Filename.GetSupArchList())],\r
870 ['FileType', Filename.GetFileType()],\r
871 ['FeatureFlag', ConvertNEToNOTEQ(Filename.GetFeatureFlag())],\r
872 ]\r
873 Root = CreateXmlElement('%s' % Key, Filename.GetFilename(), [], AttributeList)\r
874\r
875 return Root\r
876\r
877 def __str__(self):\r
878 return "FileType = %s Filename = %s %s" \\r
879 % (self.FileType, self.Filename, self.CommonDefines)\r