2 # This file is used to parse a PCD file of .PKG file
4 # Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
6 # SPDX-License-Identifier: BSD-2-Clause-Patent
17 from Core
.DistributionPackageClass
import DistributionPackageHeaderObject
18 from Library
.StringUtils
import ConvertNEToNOTEQ
19 from Library
.StringUtils
import ConvertNOTEQToNE
20 from Library
.StringUtils
import GetSplitValueList
21 from Library
.StringUtils
import GetStringOfList
22 from Library
.Xml
.XmlRoutines
import XmlElement
23 from Library
.Xml
.XmlRoutines
import XmlElement2
24 from Library
.Xml
.XmlRoutines
import XmlAttribute
25 from Library
.Xml
.XmlRoutines
import XmlNode
26 from Library
.Xml
.XmlRoutines
import XmlList
27 from Library
.Xml
.XmlRoutines
import CreateXmlElement
28 from Library
.UniClassObject
import ConvertSpecialUnicodes
29 from Library
.UniClassObject
import GetLanguageCode1766
30 from Object
.POM
.CommonObject
import FileObject
31 from Object
.POM
.CommonObject
import MiscFileObject
32 from Object
.POM
.CommonObject
import UserExtensionObject
33 from Object
.POM
.CommonObject
import ClonedRecordObject
34 from Object
.POM
.CommonObject
import LibraryClassObject
35 from Object
.POM
.CommonObject
import FileNameObject
36 from Object
.POM
.ModuleObject
import ModuleObject
37 from Xml
.XmlParserMisc
import IsRequiredItemListNull
38 from Xml
.XmlParserMisc
import GetHelpTextList
39 import Library
.DataType
as DataType
44 class ClonedFromXml(object):
49 def FromXml(self
, Item
, Key
):
50 self
.GUID
= XmlElement(Item
, '%s/GUID' % Key
)
51 self
.Version
= XmlAttribute(XmlNode(Item
, '%s/GUID' % Key
), 'Version')
52 if self
.GUID
== '' and self
.Version
== '':
54 ClonedFrom
= ClonedRecordObject()
55 ClonedFrom
.SetPackageGuid(self
.GUID
)
56 ClonedFrom
.SetPackageVersion(self
.Version
)
59 def ToXml(self
, ClonedFrom
, Key
):
62 Element1
= CreateXmlElement('GUID', ClonedFrom
.GetPackageGuid(), [],
63 [['Version', ClonedFrom
.GetPackageVersion()]])
66 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
70 return "GUID = %s Version = %s" % (self
.GUID
, self
.Version
)
76 class CommonDefinesXml(object):
83 def FromXml(self
, Item
, Key
):
86 self
.Usage
= XmlAttribute(Item
, 'Usage')
88 [Arch
for Arch
in GetSplitValueList(XmlAttribute(Item
, 'SupArchList'), DataType
.TAB_SPACE_SPLIT
) if Arch
]
90 [Mod
for Mod
in GetSplitValueList(XmlAttribute(Item
, 'SupModList'), DataType
.TAB_SPACE_SPLIT
) if Mod
]
91 self
.FeatureFlag
= ConvertNOTEQToNE(XmlAttribute(Item
, 'FeatureFlag'))
97 return "Usage = %s SupArchList = %s SupModList = %s FeatureFlag = %s" \
98 % (self
.Usage
, self
.SupArchList
, self
.SupModList
, self
.FeatureFlag
)
103 class PromptXml(object):
108 def FromXml(self
, Item
, Key
):
111 self
.Prompt
= XmlElement2(Item
, 'Prompt')
112 self
.Lang
= XmlAttribute(Item
, 'Lang')
114 def ToXml(self
, Prompt
, Key
='Prompt'):
117 return CreateXmlElement('%s' % Key
, Prompt
.GetString(), [], [['Lang', Prompt
.GetLang()]])
119 return "Prompt = %s Lang = %s" % (self
.Prompt
, self
.Lang
)
124 class HelpTextXml(object):
129 def FromXml(self
, Item
, Key
):
132 self
.HelpText
= XmlElement2(Item
, 'HelpText')
133 self
.Lang
= XmlAttribute(Item
, 'Lang')
135 def ToXml(self
, HelpText
, Key
='HelpText'):
138 return CreateXmlElement('%s' % Key
, HelpText
.GetString(), [], [['Lang', HelpText
.GetLang()]])
140 return "HelpText = %s Lang = %s" % (self
.HelpText
, self
.Lang
)
145 class HeaderXml(object):
151 self
.CopyrightList
= []
152 self
.LicenseList
= []
153 self
.AbstractList
= []
154 self
.DescriptionList
= []
156 def FromXml(self
, Item
, Key
, IsRequiredCheck
=False, IsStandAlongModule
=False):
157 if not Item
and IsRequiredCheck
:
159 if IsStandAlongModule
:
160 XmlTreeLevel
= ['DistributionPackage', 'ModuleSurfaceArea']
162 XmlTreeLevel
= ['DistributionPackage', 'PackageSurfaceArea', 'ModuleSurfaceArea']
163 CheckDict
= {'Header':''}
164 IsRequiredItemListNull(CheckDict
, XmlTreeLevel
)
165 self
.Name
= XmlElement(Item
, '%s/Name' % Key
)
166 self
.BaseName
= XmlAttribute(XmlNode(Item
, '%s/Name' % Key
), 'BaseName')
167 self
.GUID
= XmlElement(Item
, '%s/GUID' % Key
)
168 self
.Version
= XmlAttribute(XmlNode(Item
, '%s/GUID' % Key
), 'Version')
170 for SubItem
in XmlList(Item
, '%s/Abstract' % Key
):
171 HeaderAbstractLang
= XmlAttribute(SubItem
, 'Lang')
172 self
.AbstractList
.append((HeaderAbstractLang
, XmlElement(SubItem
, '%s/Abstract' % Key
)))
173 for SubItem
in XmlList(Item
, '%s/Description' % Key
):
174 HeaderDescriptionLang
= XmlAttribute(SubItem
, 'Lang')
175 self
.DescriptionList
.append((HeaderDescriptionLang
, XmlElement(SubItem
, '%s/Description' % Key
)))
176 for SubItem
in XmlList(Item
, '%s/Copyright' % Key
):
177 HeaderCopyrightLang
= XmlAttribute(SubItem
, 'Lang')
178 self
.CopyrightList
.append((HeaderCopyrightLang
, XmlElement(SubItem
, '%s/Copyright' % Key
)))
179 for SubItem
in XmlList(Item
, '%s/License' % Key
):
180 HeaderLicenseLang
= XmlAttribute(SubItem
, 'Lang')
181 self
.LicenseList
.append((HeaderLicenseLang
, XmlElement(SubItem
, '%s/License' % Key
)))
182 ModuleHeader
= ModuleObject()
183 ModuleHeader
.SetName(self
.Name
)
184 ModuleHeader
.SetBaseName(self
.BaseName
)
185 ModuleHeader
.SetGuid(self
.GUID
)
186 ModuleHeader
.SetVersion(self
.Version
)
187 ModuleHeader
.SetCopyright(self
.CopyrightList
)
188 ModuleHeader
.SetLicense(self
.LicenseList
)
189 ModuleHeader
.SetAbstract(self
.AbstractList
)
190 ModuleHeader
.SetDescription(self
.DescriptionList
)
193 def ToXml(self
, Header
, Key
):
196 Element1
= CreateXmlElement('Name', Header
.GetName(), [], [['BaseName', Header
.GetBaseName()]])
197 Element2
= CreateXmlElement('GUID', Header
.GetGuid(), [], [['Version', Header
.GetVersion()]])
198 NodeList
= [Element1
,
202 UNIInfAbstractList
= []
203 UNIInfDescriptionList
= []
204 # Get Abstract and Description from Uni File
205 # if the Uni File exists
206 if Header
.UniFileClassObject
is not None:
207 UniStrDict
= Header
.UniFileClassObject
.OrderedStringList
208 for Lang
in UniStrDict
:
209 for StringDefClassObject
in UniStrDict
[Lang
]:
210 if not StringDefClassObject
.StringValue
:
212 if StringDefClassObject
.StringName
== DataType
.TAB_INF_ABSTRACT
:
213 UNIInfAbstractList
.append((GetLanguageCode1766(Lang
),
214 ConvertSpecialUnicodes(StringDefClassObject
.StringValue
)))
216 if StringDefClassObject
.StringName
== DataType
.TAB_INF_DESCRIPTION
:
217 UNIInfDescriptionList
.append((GetLanguageCode1766(Lang
),
218 ConvertSpecialUnicodes(StringDefClassObject
.StringValue
)))
220 # Get Abstract and Description from INF File Header
221 for (Lang
, Value
) in Header
.GetCopyright():
223 NodeList
.append(CreateXmlElement('Copyright', Value
, [], []))
224 for (Lang
, Value
) in Header
.GetLicense():
226 NodeList
.append(CreateXmlElement('License', Value
, [], []))
227 for (Lang
, Value
) in Header
.GetAbstract() + UNIInfAbstractList
:
229 NodeList
.append(CreateXmlElement('Abstract', Value
, [], [['Lang', Lang
]]))
230 for (Lang
, Value
) in Header
.GetDescription() + UNIInfDescriptionList
:
232 NodeList
.append(CreateXmlElement('Description', Value
, [], [['Lang', Lang
]]))
235 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
239 return "Name = %s BaseName = %s GUID = %s Version = %s Copyright = %s \
240 License = %s Abstract = %s Description = %s" % \
241 (self
.Name
, self
.BaseName
, self
.GUID
, self
.Version
, self
.CopyrightList
, \
242 self
.LicenseList
, self
.AbstractList
, self
.DescriptionList
)
244 # DistributionPackageHeaderXml
246 class DistributionPackageHeaderXml(object):
248 self
.Header
= HeaderXml()
254 self
.XmlSpecification
= ''
256 def FromXml(self
, Item
, Key
):
259 self
.ReadOnly
= XmlAttribute(XmlNode(Item
, '%s' % Key
), 'ReadOnly')
260 self
.RePackage
= XmlAttribute(XmlNode(Item
, '%s' % Key
), 'RePackage')
261 self
.Vendor
= XmlElement(Item
, '%s/Vendor' % Key
)
262 self
.Date
= XmlElement(Item
, '%s/Date' % Key
)
263 self
.Signature
= XmlElement(Item
, '%s/Signature' % Key
)
264 self
.XmlSpecification
= XmlElement(Item
, '%s/XmlSpecification' % Key
)
265 self
.Header
.FromXml(Item
, Key
)
266 DistributionPackageHeader
= DistributionPackageHeaderObject()
267 if self
.ReadOnly
.upper() == 'TRUE':
268 DistributionPackageHeader
.ReadOnly
= True
269 elif self
.ReadOnly
.upper() == 'FALSE':
270 DistributionPackageHeader
.ReadOnly
= False
271 if self
.RePackage
.upper() == 'TRUE':
272 DistributionPackageHeader
.RePackage
= True
273 elif self
.RePackage
.upper() == 'FALSE':
274 DistributionPackageHeader
.RePackage
= False
275 DistributionPackageHeader
.Vendor
= self
.Vendor
276 DistributionPackageHeader
.Date
= self
.Date
277 DistributionPackageHeader
.Signature
= self
.Signature
278 DistributionPackageHeader
.XmlSpecification
= self
.XmlSpecification
279 DistributionPackageHeader
.SetName(self
.Header
.Name
)
280 DistributionPackageHeader
.SetBaseName(self
.Header
.BaseName
)
281 DistributionPackageHeader
.SetGuid(self
.Header
.GUID
)
282 DistributionPackageHeader
.SetVersion(self
.Header
.Version
)
283 DistributionPackageHeader
.SetCopyright(self
.Header
.CopyrightList
)
284 DistributionPackageHeader
.SetLicense(self
.Header
.LicenseList
)
285 DistributionPackageHeader
.SetAbstract(self
.Header
.AbstractList
)
286 DistributionPackageHeader
.SetDescription(self
.Header
.DescriptionList
)
287 return DistributionPackageHeader
289 def ToXml(self
, DistributionPackageHeader
, Key
):
292 Element1
= CreateXmlElement('Name', \
293 DistributionPackageHeader
.GetName(), [], \
295 DistributionPackageHeader
.GetBaseName()]])
296 Element2
= CreateXmlElement('GUID', \
297 DistributionPackageHeader
.GetGuid(), [], \
299 DistributionPackageHeader
.GetVersion()]])
301 if DistributionPackageHeader
.ReadOnly
!= '':
302 AttributeList
.append(['ReadOnly', str(DistributionPackageHeader
.ReadOnly
).lower()])
303 if DistributionPackageHeader
.RePackage
!= '':
304 AttributeList
.append(['RePackage', str(DistributionPackageHeader
.RePackage
).lower()])
305 if DistributionPackageHeader
.GetAbstract():
306 DPAbstract
= DistributionPackageHeader
.GetAbstract()[0][1]
309 if DistributionPackageHeader
.GetDescription():
310 DPDescription
= DistributionPackageHeader
.GetDescription()[0][1]
313 if DistributionPackageHeader
.GetCopyright():
314 DPCopyright
= DistributionPackageHeader
.GetCopyright()[0][1]
317 if DistributionPackageHeader
.GetLicense():
318 DPLicense
= DistributionPackageHeader
.GetLicense()[0][1]
321 NodeList
= [Element1
,
323 ['Vendor', DistributionPackageHeader
.Vendor
],
324 ['Date', DistributionPackageHeader
.Date
],
325 ['Copyright', DPCopyright
],
326 ['License', DPLicense
],
327 ['Abstract', DPAbstract
],
328 ['Description', DPDescription
],
329 ['Signature', DistributionPackageHeader
.Signature
],
330 ['XmlSpecification', \
331 DistributionPackageHeader
.XmlSpecification
],
333 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
337 return "ReadOnly = %s RePackage = %s Vendor = %s Date = %s \
338 Signature = %s XmlSpecification = %s %s" % \
339 (self
.ReadOnly
, self
.RePackage
, self
.Vendor
, self
.Date
, \
340 self
.Signature
, self
.XmlSpecification
, self
.Header
)
344 class PackageHeaderXml(object):
346 self
.Header
= HeaderXml()
347 self
.PackagePath
= ''
349 def FromXml(self
, Item
, Key
, PackageObject2
):
351 XmlTreeLevel
= ['DistributionPackage', 'PackageSurfaceArea']
352 CheckDict
= {'PackageHeader': None, }
353 IsRequiredItemListNull(CheckDict
, XmlTreeLevel
)
354 self
.PackagePath
= XmlElement(Item
, '%s/PackagePath' % Key
)
355 self
.Header
.FromXml(Item
, Key
)
356 PackageObject2
.SetName(self
.Header
.Name
)
357 PackageObject2
.SetBaseName(self
.Header
.BaseName
)
358 PackageObject2
.SetGuid(self
.Header
.GUID
)
359 PackageObject2
.SetVersion(self
.Header
.Version
)
360 PackageObject2
.SetCopyright(self
.Header
.CopyrightList
)
361 PackageObject2
.SetLicense(self
.Header
.LicenseList
)
362 PackageObject2
.SetAbstract(self
.Header
.AbstractList
)
363 PackageObject2
.SetDescription(self
.Header
.DescriptionList
)
364 PackageObject2
.SetPackagePath(self
.PackagePath
)
366 def ToXml(self
, PackageObject2
, Key
):
369 Element1
= CreateXmlElement('Name', PackageObject2
.GetName(), [], \
370 [['BaseName', PackageObject2
.GetBaseName()]])
371 Element2
= CreateXmlElement('GUID', PackageObject2
.GetGuid(), [], \
372 [['Version', PackageObject2
.GetVersion()]])
373 NodeList
= [Element1
,
377 UNIPackageAbrstractList
= []
378 UNIPackageDescriptionList
= []
379 # Get Abstract and Description from Uni File
380 # if the Uni File exists
381 if PackageObject2
.UniFileClassObject
is not None:
382 UniStrDict
= PackageObject2
.UniFileClassObject
.OrderedStringList
383 for Lang
in UniStrDict
:
384 for StringDefClassObject
in UniStrDict
[Lang
]:
385 if not StringDefClassObject
.StringValue
:
387 if StringDefClassObject
.StringName
== DataType
.TAB_DEC_PACKAGE_ABSTRACT
:
388 UNIPackageAbrstractList
.append((GetLanguageCode1766(Lang
),
389 ConvertSpecialUnicodes(StringDefClassObject
.StringValue
)))
391 if StringDefClassObject
.StringName
== DataType
.TAB_DEC_PACKAGE_DESCRIPTION
:
392 UNIPackageDescriptionList
.append((GetLanguageCode1766(Lang
),
393 ConvertSpecialUnicodes(StringDefClassObject
.StringValue
)))
395 # Get Abstract and Description from DEC File Header
396 for (Lang
, Value
) in PackageObject2
.GetCopyright():
398 NodeList
.append(CreateXmlElement(DataType
.TAB_HEADER_COPYRIGHT
, Value
, [], []))
399 for (Lang
, Value
) in PackageObject2
.GetLicense():
401 NodeList
.append(CreateXmlElement(DataType
.TAB_HEADER_LICENSE
, Value
, [], []))
402 for (Lang
, Value
) in PackageObject2
.GetAbstract() + UNIPackageAbrstractList
:
404 NodeList
.append(CreateXmlElement(DataType
.TAB_HEADER_ABSTRACT
, Value
, [], [['Lang', Lang
]]))
405 for (Lang
, Value
) in PackageObject2
.GetDescription() + UNIPackageDescriptionList
:
407 NodeList
.append(CreateXmlElement(DataType
.TAB_HEADER_DESCRIPTION
, Value
, [], [['Lang', Lang
]]))
410 NodeList
.append(['PackagePath', PackageObject2
.GetPackagePath()])
412 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
416 return "PackagePath = %s %s" \
417 % (self
.PackagePath
, self
.Header
)
420 # MiscellaneousFileXml
422 class MiscellaneousFileXml(object):
424 self
.Header
= HeaderXml()
427 # This API is used for Package or Module's MiscellaneousFile section
429 def FromXml(self
, Item
, Key
):
432 self
.Header
.FromXml(Item
, Key
)
433 NewItem
= XmlNode(Item
, '%s/Header' % Key
)
434 self
.Header
.FromXml(NewItem
, 'Header')
435 for SubItem
in XmlList(Item
, '%s/Filename' % Key
):
436 Filename
= XmlElement(SubItem
, '%s/Filename' % Key
)
437 Executable
= XmlAttribute(XmlNode(SubItem
, '%s/Filename' % Key
), 'Executable')
438 if Executable
.upper() == "TRUE":
440 elif Executable
.upper() == "FALSE":
444 self
.Files
.append([Filename
, Executable
])
445 MiscFile
= MiscFileObject()
446 MiscFile
.SetCopyright(self
.Header
.CopyrightList
)
447 MiscFile
.SetLicense(self
.Header
.LicenseList
)
448 MiscFile
.SetAbstract(self
.Header
.AbstractList
)
449 MiscFile
.SetDescription(self
.Header
.DescriptionList
)
451 for File
in self
.Files
:
452 FileObj
= FileObject()
453 FileObj
.SetURI(File
[0])
454 FileObj
.SetExecutable(File
[1])
455 MiscFileList
.append(FileObj
)
456 MiscFile
.SetFileList(MiscFileList
)
459 # This API is used for DistP's tool section
461 def FromXml2(self
, Item
, Key
):
464 NewItem
= XmlNode(Item
, '%s/Header' % Key
)
465 self
.Header
.FromXml(NewItem
, 'Header')
466 for SubItem
in XmlList(Item
, '%s/Filename' % Key
):
467 Filename
= XmlElement(SubItem
, '%s/Filename' % Key
)
469 XmlAttribute(XmlNode(SubItem
, '%s/Filename' % Key
), 'Executable')
470 OsType
= XmlAttribute(XmlNode(SubItem
, '%s/Filename' % Key
), 'OS')
471 if Executable
.upper() == "TRUE":
473 elif Executable
.upper() == "FALSE":
477 self
.Files
.append([Filename
, Executable
, OsType
])
478 MiscFile
= MiscFileObject()
479 MiscFile
.SetName(self
.Header
.Name
)
480 MiscFile
.SetCopyright(self
.Header
.CopyrightList
)
481 MiscFile
.SetLicense(self
.Header
.LicenseList
)
482 MiscFile
.SetAbstract(self
.Header
.AbstractList
)
483 MiscFile
.SetDescription(self
.Header
.DescriptionList
)
485 for File
in self
.Files
:
486 FileObj
= FileObject()
487 FileObj
.SetURI(File
[0])
488 FileObj
.SetExecutable(File
[1])
489 FileObj
.SetOS(File
[2])
490 MiscFileList
.append(FileObj
)
491 MiscFile
.SetFileList(MiscFileList
)
495 # This API is used for Package or Module's MiscellaneousFile section
497 def ToXml(self
, MiscFile
, Key
):
501 if MiscFile
.GetAbstract():
502 DPAbstract
= MiscFile
.GetAbstract()[0][1]
505 if MiscFile
.GetDescription():
506 DPDescription
= MiscFile
.GetDescription()[0][1]
509 if MiscFile
.GetCopyright():
510 DPCopyright
= MiscFile
.GetCopyright()[0][1]
513 if MiscFile
.GetLicense():
514 DPLicense
= MiscFile
.GetLicense()[0][1]
517 NodeList
= [['Copyright', DPCopyright
],
518 ['License', DPLicense
],
519 ['Abstract', DPAbstract
],
520 ['Description', DPDescription
],
522 for File
in MiscFile
.GetFileList():
525 ('Filename', File
.GetURI(), [], \
526 [['Executable', str(File
.GetExecutable()).lower()]]))
527 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, [])
530 # This API is used for DistP's tool section
532 def ToXml2(self
, MiscFile
, Key
):
536 if MiscFile
.GetAbstract():
537 DPAbstract
= MiscFile
.GetAbstract()[0][1]
540 if MiscFile
.GetDescription():
541 DPDescription
= MiscFile
.GetDescription()[0][1]
544 if MiscFile
.GetCopyright():
545 DPCopyright
= MiscFile
.GetCopyright()[0][1]
548 if MiscFile
.GetLicense():
549 DPLicense
= MiscFile
.GetLicense()[0][1]
552 NodeList
= [['Name', MiscFile
.GetName()],
553 ['Copyright', DPCopyright
],
554 ['License', DPLicense
],
555 ['Abstract', DPAbstract
],
556 ['Description', DPDescription
],
558 HeaderNode
= CreateXmlElement('Header', '', NodeList
, [])
559 NodeList
= [HeaderNode
]
560 for File
in MiscFile
.GetFileList():
563 ('Filename', File
.GetURI(), [], \
564 [['Executable', str(File
.GetExecutable()).lower()], \
565 ['OS', File
.GetOS()]]))
566 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, [])
570 Str
= str(self
.Header
)
571 for Item
in self
.Files
:
572 Str
= Str
+ '\n\tFilename:' + str(Item
)
577 class UserExtensionsXml(object):
581 self
.BinaryAbstractList
= []
582 self
.BinaryDescriptionList
= []
583 self
.BinaryCopyrightList
= []
584 self
.BinaryLicenseList
= []
585 self
.LangDefsList
= []
587 self
.BuildOptionDict
= {}
588 self
.IncludesDict
= {}
589 self
.SourcesDict
= {}
590 self
.BinariesDict
= {}
591 self
.SupArchList
= []
594 self
.BuildOptions
= ''
596 def FromXml2(self
, Item
, Key
):
597 self
.UserId
= XmlAttribute(XmlNode(Item
, '%s' % Key
), 'UserId')
598 self
.Identifier
= XmlAttribute(XmlNode(Item
, '%s' % Key
), 'Identifier')
599 UserExtension
= UserExtensionObject()
600 UserExtension
.SetUserID(self
.UserId
)
601 UserExtension
.SetIdentifier(self
.Identifier
)
604 def FromXml(self
, Item
, Key
):
605 self
.UserId
= XmlAttribute(XmlNode(Item
, '%s' % Key
), 'UserId')
606 self
.Identifier
= XmlAttribute(XmlNode(Item
, '%s' % Key
), 'Identifier')
607 if self
.UserId
== DataType
.TAB_BINARY_HEADER_USERID \
608 and self
.Identifier
== DataType
.TAB_BINARY_HEADER_IDENTIFIER
:
609 for SubItem
in XmlList(Item
, '%s/BinaryAbstract' % Key
):
610 BinaryAbstractLang
= XmlAttribute(SubItem
, 'Lang')
611 self
.BinaryAbstractList
.append((BinaryAbstractLang
, XmlElement(SubItem
, '%s/BinaryAbstract' % Key
)))
612 for SubItem
in XmlList(Item
, '%s/BinaryDescription' % Key
):
613 BinaryDescriptionLang
= XmlAttribute(SubItem
, 'Lang')
614 self
.BinaryDescriptionList
.append((BinaryDescriptionLang
,
615 XmlElement(SubItem
, '%s/BinaryDescription' % Key
)))
616 for SubItem
in XmlList(Item
, '%s/BinaryCopyright' % Key
):
617 BinaryCopyrightLang
= XmlAttribute(SubItem
, 'Lang')
618 self
.BinaryCopyrightList
.append((BinaryCopyrightLang
,
619 XmlElement(SubItem
, '%s/BinaryCopyright' % Key
)))
620 for SubItem
in XmlList(Item
, '%s/BinaryLicense' % Key
):
621 BinaryLicenseLang
= XmlAttribute(SubItem
, 'Lang')
622 self
.BinaryLicenseList
.append((BinaryLicenseLang
,
623 XmlElement(SubItem
, '%s/BinaryLicense' % Key
)))
625 DefineItem
= XmlNode(Item
, '%s/Define' % Key
)
626 for SubItem
in XmlList(DefineItem
, 'Define/Statement'):
627 Statement
= XmlElement(SubItem
, '%s/Statement' % Key
)
628 self
.DefineDict
[Statement
] = ""
629 BuildOptionItem
= XmlNode(Item
, '%s/BuildOption' % Key
)
630 for SubItem
in XmlList(BuildOptionItem
, 'BuildOption/Statement'):
631 Statement
= XmlElement(SubItem
, '%s/Statement' % Key
)
632 Arch
= XmlAttribute(XmlNode(SubItem
, '%s/Statement' % Key
), 'SupArchList')
633 self
.BuildOptionDict
[Arch
] = Statement
634 IncludesItem
= XmlNode(Item
, '%s/Includes' % Key
)
635 for SubItem
in XmlList(IncludesItem
, 'Includes/Statement'):
636 Statement
= XmlElement(SubItem
, '%s/Statement' % Key
)
637 Arch
= XmlAttribute(XmlNode(SubItem
, '%s/Statement' % Key
), 'SupArchList')
638 self
.IncludesDict
[Statement
] = Arch
639 SourcesItem
= XmlNode(Item
, '%s/Sources' % Key
)
640 Tmp
= UserExtensionSourceXml()
641 SourceDict
= Tmp
.FromXml(SourcesItem
, 'Sources')
642 self
.SourcesDict
= SourceDict
643 BinariesItem
= XmlNode(Item
, '%s/Binaries' % Key
)
644 Tmp
= UserExtensionBinaryXml()
645 BinariesDict
= Tmp
.FromXml(BinariesItem
, 'Binaries')
646 self
.BinariesDict
= BinariesDict
647 self
.Statement
= XmlElement(Item
, 'UserExtensions')
648 SupArch
= XmlAttribute(XmlNode(Item
, '%s' % Key
), 'SupArchList')
649 self
.SupArchList
= [Arch
for Arch
in GetSplitValueList(SupArch
, DataType
.TAB_SPACE_SPLIT
) if Arch
]
650 UserExtension
= UserExtensionObject()
651 UserExtension
.SetUserID(self
.UserId
)
652 UserExtension
.SetIdentifier(self
.Identifier
)
653 UserExtension
.SetBinaryAbstract(self
.BinaryAbstractList
)
654 UserExtension
.SetBinaryDescription(self
.BinaryDescriptionList
)
655 UserExtension
.SetBinaryCopyright(self
.BinaryCopyrightList
)
656 UserExtension
.SetBinaryLicense(self
.BinaryLicenseList
)
657 UserExtension
.SetStatement(self
.Statement
)
658 UserExtension
.SetSupArchList(self
.SupArchList
)
659 UserExtension
.SetDefinesDict(self
.DefineDict
)
660 UserExtension
.SetBuildOptionDict(self
.BuildOptionDict
)
661 UserExtension
.SetIncludesDict(self
.IncludesDict
)
662 UserExtension
.SetSourcesDict(self
.SourcesDict
)
663 UserExtension
.SetBinariesDict(self
.BinariesDict
)
666 def ToXml(self
, UserExtension
, Key
):
669 AttributeList
= [['UserId', str(UserExtension
.GetUserID())],
670 ['Identifier', str(UserExtension
.GetIdentifier())],
672 GetStringOfList(UserExtension
.GetSupArchList())],
674 Root
= CreateXmlElement('%s' % Key
, UserExtension
.GetStatement(), [], \
676 if UserExtension
.GetIdentifier() == DataType
.TAB_BINARY_HEADER_IDENTIFIER
and \
677 UserExtension
.GetUserID() == DataType
.TAB_BINARY_HEADER_USERID
:
678 for (Lang
, Value
) in UserExtension
.GetBinaryAbstract():
680 ChildElement
= CreateXmlElement('BinaryAbstract', Value
, [], [['Lang', Lang
]])
681 Root
.appendChild(ChildElement
)
682 for (Lang
, Value
) in UserExtension
.GetBinaryDescription():
684 ChildElement
= CreateXmlElement('BinaryDescription', Value
, [], [['Lang', Lang
]])
685 Root
.appendChild(ChildElement
)
686 for (Lang
, Value
) in UserExtension
.GetBinaryCopyright():
688 ChildElement
= CreateXmlElement('BinaryCopyright', Value
, [], [])
689 Root
.appendChild(ChildElement
)
690 for (Lang
, Value
) in UserExtension
.GetBinaryLicense():
692 ChildElement
= CreateXmlElement('BinaryLicense', Value
, [], [])
693 Root
.appendChild(ChildElement
)
696 DefineDict
= UserExtension
.GetDefinesDict()
698 for Item
in DefineDict
.keys():
699 NodeList
.append(CreateXmlElement\
700 ('Statement', Item
, [], []))
701 DefineElement
= CreateXmlElement('Define', '', NodeList
, [])
702 Root
.appendChild(DefineElement
)
704 BuildOptionDict
= UserExtension
.GetBuildOptionDict()
706 for Item
in BuildOptionDict
.keys():
707 NodeList
.append(CreateXmlElement\
708 ('Statement', BuildOptionDict
[Item
], [], \
709 [['SupArchList', Item
]]))
710 BuildOptionElement
= \
711 CreateXmlElement('BuildOption', '', NodeList
, [])
712 Root
.appendChild(BuildOptionElement
)
714 IncludesDict
= UserExtension
.GetIncludesDict()
716 for Item
in IncludesDict
.keys():
717 NodeList
.append(CreateXmlElement\
718 ('Statement', Item
, [], \
719 [['SupArchList', IncludesDict
[Item
]]]))
720 IncludesElement
= CreateXmlElement('Includes', '', NodeList
, [])
721 Root
.appendChild(IncludesElement
)
723 SourcesDict
= UserExtension
.GetSourcesDict()
725 Tmp
= UserExtensionSourceXml()
726 Root
.appendChild(Tmp
.ToXml(SourcesDict
, 'Sources'))
728 BinariesDict
= UserExtension
.GetBinariesDict()
730 Tmp
= UserExtensionBinaryXml()
731 Root
.appendChild(Tmp
.ToXml(BinariesDict
, 'Binaries'))
735 Str
= "UserId = %s Identifier = %s" % (self
.UserId
, self
.Identifier
)
736 Str
= Str
+ '\n\tDefines:' + str(self
.Defines
)
737 Str
= Str
+ '\n\tBuildOptions:' + str(self
.BuildOptions
)
741 # UserExtensionSourceXml
743 class UserExtensionSourceXml(object):
745 self
.UserExtensionSource
= ''
747 def FromXml(self
, Item
, Key
):
750 if self
.UserExtensionSource
:
753 #SourcesItem = XmlNode(Item, '%s/Sources' % Key)
754 for SubItem
in XmlList(Item
, 'Sources/SourceFile'):
755 FileName
= XmlElement(SubItem
, 'SourceFile/FileName')
756 Family
= XmlElement(SubItem
, 'SourceFile/Family')
757 FeatureFlag
= XmlElement(SubItem
, 'SourceFile/FeatureFlag')
758 SupArchStr
= XmlElement(SubItem
, 'SourceFile/SupArchList')
759 DictKey
= (FileName
, Family
, FeatureFlag
, SupArchStr
)
761 for ValueNodeItem
in XmlList(SubItem
, \
762 'SourceFile/SourceFileOtherAttr'):
763 TagName
= XmlElement(ValueNodeItem
, \
764 'SourceFileOtherAttr/TagName')
765 ToolCode
= XmlElement(ValueNodeItem
, \
766 'SourceFileOtherAttr/ToolCode')
767 Comment
= XmlElement(ValueNodeItem
, \
768 'SourceFileOtherAttr/Comment')
769 if (TagName
== ' ') and (ToolCode
== ' ') and (Comment
== ' '):
773 ValueList
.append((TagName
, ToolCode
, Comment
))
774 Dict
[DictKey
] = ValueList
777 def ToXml(self
, Dict
, Key
):
778 if self
.UserExtensionSource
:
782 ValueList
= Dict
[Item
]
783 (FileName
, Family
, FeatureFlag
, SupArchStr
) = Item
784 SourceFileNodeList
= []
785 SourceFileNodeList
.append(["FileName", FileName
])
786 SourceFileNodeList
.append(["Family", Family
])
787 SourceFileNodeList
.append(["FeatureFlag", FeatureFlag
])
788 SourceFileNodeList
.append(["SupArchList", SupArchStr
])
789 for (TagName
, ToolCode
, Comment
) in ValueList
:
791 if not (TagName
or ToolCode
or Comment
):
795 ValueNodeList
.append(["TagName", TagName
])
796 ValueNodeList
.append(["ToolCode", ToolCode
])
797 ValueNodeList
.append(["Comment", Comment
])
798 ValueNodeXml
= CreateXmlElement('SourceFileOtherAttr', '', \
800 SourceFileNodeList
.append(ValueNodeXml
)
801 SourceFileNodeXml
= CreateXmlElement('SourceFile', '', \
802 SourceFileNodeList
, [])
803 SourcesNodeList
.append(SourceFileNodeXml
)
804 Root
= CreateXmlElement('%s' % Key
, '', SourcesNodeList
, [])
808 # UserExtensionBinaryXml
810 class UserExtensionBinaryXml(object):
812 self
.UserExtensionBinary
= ''
814 def FromXml(self
, Item
, Key
):
817 if self
.UserExtensionBinary
:
820 for SubItem
in XmlList(Item
, 'Binaries/Binary'):
821 FileName
= XmlElement(SubItem
, 'Binary/FileName')
822 FileType
= XmlElement(SubItem
, 'Binary/FileType')
823 FFE
= XmlElement(SubItem
, 'Binary/FeatureFlag')
824 SupArch
= XmlElement(SubItem
, 'Binary/SupArchList')
825 DictKey
= (FileName
, FileType
, ConvertNOTEQToNE(FFE
), SupArch
)
827 for ValueNodeItem
in XmlList(SubItem
, \
828 'Binary/BinaryFileOtherAttr'):
829 Target
= XmlElement(ValueNodeItem
, \
830 'BinaryFileOtherAttr/Target')
831 Family
= XmlElement(ValueNodeItem
, \
832 'BinaryFileOtherAttr/Family')
833 TagName
= XmlElement(ValueNodeItem
, \
834 'BinaryFileOtherAttr/TagName')
835 Comment
= XmlElement(ValueNodeItem
, \
836 'BinaryFileOtherAttr/Comment')
837 if (Target
== ' ') and (Family
== ' ') and \
838 (TagName
== ' ') and (Comment
== ' '):
844 ValueList
.append((Target
, Family
, TagName
, Comment
))
845 Dict
[DictKey
] = ValueList
848 def ToXml(self
, Dict
, Key
):
849 if self
.UserExtensionBinary
:
851 BinariesNodeList
= []
853 ValueList
= Dict
[Item
]
854 (FileName
, FileType
, FeatureFlag
, SupArch
) = Item
856 FileNodeList
.append(["FileName", FileName
])
857 FileNodeList
.append(["FileType", FileType
])
858 FileNodeList
.append(["FeatureFlag", ConvertNEToNOTEQ(FeatureFlag
)])
859 FileNodeList
.append(["SupArchList", SupArch
])
860 for (Target
, Family
, TagName
, Comment
) in ValueList
:
862 if not (Target
or Family
or TagName
or Comment
):
867 ValueNodeList
.append(["Target", Target
])
868 ValueNodeList
.append(["Family", Family
])
869 ValueNodeList
.append(["TagName", TagName
])
870 ValueNodeList
.append(["Comment", Comment
])
871 ValueNodeXml
= CreateXmlElement('BinaryFileOtherAttr', '', \
873 FileNodeList
.append(ValueNodeXml
)
874 FileNodeXml
= CreateXmlElement('Binary', '', FileNodeList
, [])
875 BinariesNodeList
.append(FileNodeXml
)
876 Root
= CreateXmlElement('%s' % Key
, '', BinariesNodeList
, [])
882 class LibraryClassXml(object):
886 self
.RecommendedInstanceGuid
= ''
887 self
.RecommendedInstanceVersion
= ''
888 self
.CommonDefines
= CommonDefinesXml()
891 def FromXml(self
, Item
, Key
):
892 self
.Keyword
= XmlAttribute(XmlNode(Item
, '%s' % Key
), 'Keyword')
893 if self
.Keyword
== '':
894 self
.Keyword
= XmlElement(Item
, '%s/Keyword' % Key
)
895 self
.HeaderFile
= XmlElement(Item
, '%s/HeaderFile' % Key
)
896 self
.CommonDefines
.FromXml(XmlNode(Item
, '%s' % Key
), Key
)
897 for HelpTextItem
in XmlList(Item
, '%s/HelpText' % Key
):
898 HelpTextObj
= HelpTextXml()
899 HelpTextObj
.FromXml(HelpTextItem
, '%s/HelpText' % Key
)
900 self
.HelpText
.append(HelpTextObj
)
901 LibraryClass
= LibraryClassObject()
902 LibraryClass
.SetLibraryClass(self
.Keyword
)
903 LibraryClass
.SetIncludeHeader(self
.HeaderFile
)
904 if self
.CommonDefines
.Usage
:
905 LibraryClass
.SetUsage(self
.CommonDefines
.Usage
)
906 LibraryClass
.SetSupArchList(self
.CommonDefines
.SupArchList
)
907 LibraryClass
.SetSupModuleList(self
.CommonDefines
.SupModList
)
908 LibraryClass
.SetFeatureFlag(ConvertNOTEQToNE(self
.CommonDefines
.FeatureFlag
))
909 LibraryClass
.SetHelpTextList(GetHelpTextList(self
.HelpText
))
912 def ToXml(self
, LibraryClass
, Key
):
916 [['Keyword', LibraryClass
.GetLibraryClass()],
917 ['SupArchList', GetStringOfList(LibraryClass
.GetSupArchList())],
918 ['SupModList', GetStringOfList(LibraryClass
.GetSupModuleList())]
920 NodeList
= [['HeaderFile', LibraryClass
.GetIncludeHeader()]]
921 for Item
in LibraryClass
.GetHelpTextList():
923 NodeList
.append(Tmp
.ToXml(Item
))
924 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
927 def ToXml2(self
, LibraryClass
, Key
):
930 FeatureFlag
= ConvertNEToNOTEQ(LibraryClass
.GetFeatureFlag())
932 [['Usage', LibraryClass
.GetUsage()], \
933 ['SupArchList', GetStringOfList(LibraryClass
.GetSupArchList())], \
934 ['SupModList', GetStringOfList(LibraryClass
.GetSupModuleList())], \
935 ['FeatureFlag', FeatureFlag
]
937 NodeList
= [['Keyword', LibraryClass
.GetLibraryClass()], ]
938 for Item
in LibraryClass
.GetHelpTextList():
940 NodeList
.append(Tmp
.ToXml(Item
))
941 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
945 Str
= "Keyword = %s HeaderFile = %s RecommendedInstanceGuid = %s RecommendedInstanceVersion = %s %s" % \
946 (self
.Keyword
, self
.HeaderFile
, self
.RecommendedInstanceGuid
, self
.RecommendedInstanceVersion
, \
948 for Item
in self
.HelpText
:
949 Str
= Str
+ "\n\t" + str(Item
)
955 class FilenameXml(object):
959 self
.CommonDefines
= CommonDefinesXml()
961 def FromXml(self
, Item
, Key
):
962 self
.FileType
= XmlAttribute(Item
, 'FileType')
963 Guid
= XmlAttribute(Item
, 'GUID')
964 self
.Filename
= XmlElement(Item
, 'Filename')
965 self
.CommonDefines
.FromXml(Item
, Key
)
966 FeatureFlag
= ConvertNOTEQToNE(self
.CommonDefines
.FeatureFlag
)
967 Filename
= FileNameObject()
971 if self
.FileType
== 'UEFI_IMAGE':
972 self
.FileType
= 'PE32'
974 Filename
.SetGuidValue(Guid
)
975 Filename
.SetFileType(self
.FileType
)
976 Filename
.SetFilename(self
.Filename
)
977 Filename
.SetSupArchList(self
.CommonDefines
.SupArchList
)
978 Filename
.SetFeatureFlag(FeatureFlag
)
982 def ToXml(self
, Filename
, Key
):
985 AttributeList
= [['SupArchList', \
986 GetStringOfList(Filename
.GetSupArchList())],
987 ['FileType', Filename
.GetFileType()],
988 ['FeatureFlag', ConvertNEToNOTEQ(Filename
.GetFeatureFlag())],
989 ['GUID', Filename
.GetGuidValue()]
991 Root
= CreateXmlElement('%s' % Key
, Filename
.GetFilename(), [], AttributeList
)
996 return "FileType = %s Filename = %s %s" \
997 % (self
.FileType
, self
.Filename
, self
.CommonDefines
)