]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/UPT/Object/Parser/DecObject.py
BaseTools: Clean up source files
[mirror_edk2.git] / BaseTools / Source / Python / UPT / Object / Parser / DecObject.py
CommitLineData
4234283c 1## @file\r
f7496d71 2# This file is used to define class objects for DEC file. It will consumed by\r
4234283c
LG
3#DecParser\r
4#\r
f7496d71 5# Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>\r
4234283c 6#\r
f7496d71
LG
7# This program and the accompanying materials are licensed and made available\r
8# under the terms and conditions of the BSD License which accompanies this\r
9# distribution. The full text of the license may be found at\r
4234283c
LG
10# http://opensource.org/licenses/bsd-license.php\r
11#\r
12# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
13# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
14\r
15'''\r
16DecObject\r
17'''\r
18\r
19## Import modules\r
20#\r
21import os.path\r
22\r
23from Library.Misc import Sdict\r
24from Library.DataType import TAB_GUIDS\r
25from Library.DataType import TAB_PPIS\r
26from Library.DataType import TAB_PROTOCOLS\r
27from Library.DataType import TAB_DEC_DEFINES\r
28from Library.DataType import TAB_INCLUDES\r
29from Library.DataType import TAB_LIBRARY_CLASSES\r
30from Library.DataType import TAB_USER_EXTENSIONS\r
31from Library.DataType import TAB_PCDS\r
32from Library.DataType import TAB_ARCH_COMMON\r
33\r
34## _DecComments\r
35#\r
36# Base class for all data objects which have head and tail comments\r
37#\r
38class _DecComments:\r
39\r
40 ##constructor\r
41 #\r
42 def __init__(self):\r
43 self._HeadComment = []\r
44 self._TailComment = []\r
45\r
46 ## GetComments\r
47 #\r
48 def GetComments(self):\r
49 return self._HeadComment, self._TailComment\r
50\r
51 ## GetHeadComment\r
f7496d71 52 #\r
4234283c
LG
53 def GetHeadComment(self):\r
54 return self._HeadComment\r
55\r
56 ## SetHeadComment\r
57 #\r
58 # @param Comment: comment content\r
59 #\r
60 def SetHeadComment(self, Comment):\r
61 self._HeadComment = Comment\r
62\r
63 ## GetTailComment\r
f7496d71 64 #\r
4234283c
LG
65 def GetTailComment(self):\r
66 return self._TailComment\r
67\r
68 ## SetTailComment\r
69 #\r
70 # @param Comment: comment content\r
71 #\r
72 def SetTailComment(self, Comment):\r
73 self._TailComment = Comment\r
74\r
75## _DecBaseObject\r
76#\r
77# Base class that hold common info\r
78#\r
79class _DecBaseObject(_DecComments):\r
80 def __init__(self, PkgFullName):\r
81 _DecComments.__init__(self)\r
82 #\r
83 # Key is combined with (Arch, SectionType)\r
84 # Default is common\r
85 #\r
86 self.ValueDict = Sdict()\r
87 self._PkgFullName = PkgFullName\r
88 self._PackagePath, self._FileName = os.path.split(PkgFullName)\r
89 self._SecName = ''\r
90\r
91 ## GetSectionName\r
f7496d71 92 #\r
4234283c
LG
93 def GetSectionName(self):\r
94 return self._SecName\r
95\r
96 ## GetPackagePath\r
f7496d71 97 #\r
4234283c
LG
98 def GetPackagePath(self):\r
99 return self._PackagePath\r
100\r
101 ## GetPackageFile\r
f7496d71 102 #\r
4234283c
LG
103 def GetPackageFile(self):\r
104 return self._FileName\r
105\r
106 ## GetPackageFullName\r
f7496d71 107 #\r
4234283c
LG
108 def GetPackageFullName(self):\r
109 return self._PkgFullName\r
110\r
111 ## AddItem\r
112 # Add sub-item to current object, sub-class should override it if needed\r
113 #\r
114 # @param Item: Sub-item to be added\r
115 # @param Scope: A list store section name and arch info\r
116 #\r
117 def AddItem(self, Item, Scope):\r
118 if not Scope:\r
119 return\r
120 if not Item:\r
121 return\r
122 ArchModule = []\r
123 for Ele in Scope:\r
124 if Ele[1] in self.ValueDict:\r
125 self.ValueDict[Ele[1]].append(Item)\r
126 else:\r
127 self.ValueDict[Ele[1]] = [Item]\r
128 ArchModule.append(Ele[1])\r
129 Item.ArchAndModuleType = ArchModule\r
130\r
131 ## _GetItemByArch\r
132 # Helper class used by sub-class\r
133 # @param Arch: arch\r
134 #\r
135 def _GetItemByArch(self, Arch):\r
136 Arch = Arch.upper()\r
137 if Arch not in self.ValueDict:\r
138 return []\r
139 return self.ValueDict[Arch]\r
140\r
141 ## _GetAllItems\r
142 # Get all items, union all arches, items in returned list are unique\r
143 #\r
144 def _GetAllItems(self):\r
145 Retlst = []\r
146 for Arch in self.ValueDict:\r
147 for Item in self.ValueDict[Arch]:\r
148 if Item not in Retlst:\r
149 Retlst.append(Item)\r
150 return Retlst\r
151\r
152## _DecItemBaseObject\r
153#\r
f7496d71 154# Module type and arch the item belongs to\r
4234283c
LG
155#\r
156class _DecItemBaseObject(_DecComments):\r
157 def __init__(self):\r
158 _DecComments.__init__(self)\r
159 #\r
160 # Item's arch, if PCD, also include PCD type\r
161 #\r
162 self.ArchAndModuleType = []\r
163\r
164 ## GetArchList\r
f7496d71 165 #\r
4234283c
LG
166 def GetArchList(self):\r
167 ArchSet = set()\r
168 for Arch in self.ArchAndModuleType:\r
169 ArchSet.add(Arch)\r
170 return list(ArchSet)\r
171\r
172## DecDefineObject\r
173#\r
174# Class to hold define section infomation\r
175#\r
176class DecDefineObject(_DecBaseObject):\r
177 def __init__(self, PkgFullName):\r
178 _DecBaseObject.__init__(self, PkgFullName)\r
179 self._SecName = TAB_DEC_DEFINES.upper()\r
180 self._DecSpec = ''\r
181 self._PkgName = ''\r
182 self._PkgGuid = ''\r
183 self._PkgVersion = ''\r
184 self._PkgUniFile = ''\r
185\r
186 ## GetPackageSpecification\r
f7496d71 187 #\r
4234283c
LG
188 def GetPackageSpecification(self):\r
189 return self._DecSpec\r
190\r
191 def SetPackageSpecification(self, DecSpec):\r
192 self._DecSpec = DecSpec\r
193\r
194 ## GetPackageName\r
f7496d71 195 #\r
4234283c
LG
196 def GetPackageName(self):\r
197 return self._PkgName\r
198\r
199 def SetPackageName(self, PkgName):\r
200 self._PkgName = PkgName\r
201\r
202 ## GetPackageGuid\r
f7496d71 203 #\r
4234283c
LG
204 def GetPackageGuid(self):\r
205 return self._PkgGuid\r
206\r
207 def SetPackageGuid(self, PkgGuid):\r
208 self._PkgGuid = PkgGuid\r
209\r
210 ## GetPackageVersion\r
f7496d71 211 #\r
4234283c
LG
212 def GetPackageVersion(self):\r
213 return self._PkgVersion\r
214\r
215 def SetPackageVersion(self, PkgVersion):\r
216 self._PkgVersion = PkgVersion\r
217\r
218 ## GetPackageUniFile\r
f7496d71 219 #\r
4234283c
LG
220 def GetPackageUniFile(self):\r
221 return self._PkgUniFile\r
222\r
223 def SetPackageUniFile(self, PkgUniFile):\r
224 self._PkgUniFile = PkgUniFile\r
225\r
226 ## GetDefines\r
f7496d71 227 #\r
4234283c
LG
228 def GetDefines(self):\r
229 return self._GetItemByArch(TAB_ARCH_COMMON)\r
230\r
231 ## GetAllDefines\r
f7496d71 232 #\r
4234283c
LG
233 def GetAllDefines(self):\r
234 return self._GetAllItems()\r
235\r
236## DecDefineItemObject\r
237#\r
238# Each item of define section\r
239#\r
240class DecDefineItemObject(_DecItemBaseObject):\r
241 def __init__(self):\r
242 _DecItemBaseObject.__init__(self)\r
243 self.Key = ''\r
244 self.Value = ''\r
245\r
246 ## __hash__\r
f7496d71 247 #\r
4234283c
LG
248 def __hash__(self):\r
249 return hash(self.Key + self.Value)\r
250\r
251 ## __eq__\r
252 #\r
253 def __eq__(self, Other):\r
254 return id(self) == id(Other)\r
255\r
256 ## __str__\r
f7496d71 257 #\r
4234283c
LG
258 def __str__(self):\r
259 return str(self.ArchAndModuleType) + '\n' + self.Key + \\r
260 ' = ' + self.Value\r
261\r
262## DecIncludeObject\r
263#\r
264# Class to hold include section info\r
265#\r
266class DecIncludeObject(_DecBaseObject):\r
267 def __init__(self, PkgFullName):\r
268 _DecBaseObject.__init__(self, PkgFullName)\r
269 self._SecName = TAB_INCLUDES.upper()\r
270\r
271 ## GetIncludes\r
f7496d71 272 #\r
4234283c
LG
273 def GetIncludes(self, Arch=TAB_ARCH_COMMON):\r
274 return self._GetItemByArch(Arch)\r
275\r
276 ## GetAllIncludes\r
f7496d71 277 #\r
4234283c
LG
278 def GetAllIncludes(self):\r
279 return self._GetAllItems()\r
280\r
281## DecIncludeItemObject\r
282#\r
283# Item of include section\r
284#\r
285class DecIncludeItemObject(_DecItemBaseObject):\r
286 def __init__(self, File, Root):\r
287 self.File = File\r
288 self.Root = Root\r
289 _DecItemBaseObject.__init__(self)\r
290\r
291 ## __hash__\r
f7496d71 292 #\r
4234283c
LG
293 def __hash__(self):\r
294 return hash(self.File)\r
295\r
296 ## __eq__\r
297 #\r
298 def __eq__(self, Other):\r
299 return id(self) == id(Other)\r
300\r
301 ## __str__\r
f7496d71 302 #\r
4234283c
LG
303 def __str__(self):\r
304 return self.File\r
305\r
306## DecLibraryclassObject\r
307#\r
308# Class to hold library class section info\r
309#\r
310class DecLibraryclassObject(_DecBaseObject):\r
311 def __init__(self, PkgFullName):\r
312 _DecBaseObject.__init__(self, PkgFullName)\r
313 self._PackagePath, self._FileName = os.path.split(PkgFullName)\r
314 self._SecName = TAB_LIBRARY_CLASSES.upper()\r
315\r
316 ## GetLibraryclasses\r
f7496d71 317 #\r
4234283c
LG
318 def GetLibraryclasses(self, Arch=TAB_ARCH_COMMON):\r
319 return self._GetItemByArch(Arch)\r
320\r
321 ## GetAllLibraryclasses\r
f7496d71 322 #\r
4234283c
LG
323 def GetAllLibraryclasses(self):\r
324 return self._GetAllItems()\r
325\r
326## DecLibraryclassItemObject\r
327# Item of library class section\r
328#\r
329class DecLibraryclassItemObject(_DecItemBaseObject):\r
330 def __init__(self, Libraryclass, File, Root):\r
331 _DecItemBaseObject.__init__(self)\r
332 self.File = File\r
333 self.Root = Root\r
334 self.Libraryclass = Libraryclass\r
335\r
336 ## __hash__\r
f7496d71 337 #\r
4234283c
LG
338 def __hash__(self):\r
339 return hash(self.Libraryclass + self.File)\r
340\r
341 ## __eq__\r
342 #\r
343 def __eq__(self, Other):\r
344 return id(self) == id(Other)\r
345\r
346 ## __str__\r
f7496d71 347 #\r
4234283c
LG
348 def __str__(self):\r
349 return self.Libraryclass + '|' + self.File\r
350\r
351## DecPcdObject\r
352# Class to hold PCD section\r
353#\r
354class DecPcdObject(_DecBaseObject):\r
355 def __init__(self, PkgFullName):\r
356 _DecBaseObject.__init__(self, PkgFullName)\r
357 self._SecName = TAB_PCDS.upper()\r
358\r
359 ## AddItem\r
360 #\r
361 # Diff from base class\r
362 #\r
363 # @param Item: Item\r
364 # @param Scope: Scope\r
365 #\r
366 def AddItem(self, Item, Scope):\r
367 if not Scope:\r
368 return\r
369 if not Item:\r
370 return\r
371 ArchModule = []\r
372 for Type, Arch in Scope:\r
373 if (Type, Arch) in self.ValueDict:\r
374 self.ValueDict[Type, Arch].append(Item)\r
375 else:\r
376 self.ValueDict[Type, Arch] = [Item]\r
377 ArchModule.append([Type, Arch])\r
378 Item.ArchAndModuleType = ArchModule\r
379\r
380 ## GetPcds\r
381 #\r
382 # @param PcdType: PcdType\r
383 # @param Arch: Arch\r
f7496d71 384 #\r
4234283c
LG
385 def GetPcds(self, PcdType, Arch=TAB_ARCH_COMMON):\r
386 PcdType = PcdType.upper()\r
387 Arch = Arch.upper()\r
388 if (PcdType, Arch) not in self.ValueDict:\r
389 return []\r
390 return self.ValueDict[PcdType, Arch]\r
391\r
392 ## GetPcdsByType\r
393 #\r
394 # @param PcdType: PcdType\r
f7496d71 395 #\r
4234283c
LG
396 def GetPcdsByType(self, PcdType):\r
397 PcdType = PcdType.upper()\r
398 Retlst = []\r
399 for TypeInDict, Arch in self.ValueDict:\r
400 if TypeInDict != PcdType:\r
401 continue\r
402 for Item in self.ValueDict[PcdType, Arch]:\r
403 if Item not in Retlst:\r
404 Retlst.append(Item)\r
405 return Retlst\r
406\r
407## DecPcdItemObject\r
408#\r
409# Item of PCD section\r
410#\r
411# @param _DecItemBaseObject: _DecItemBaseObject object\r
412#\r
413class DecPcdItemObject(_DecItemBaseObject):\r
414 def __init__(self, Guid, Name, Value, DatumType,\r
415 Token, MaxDatumSize=''):\r
416 _DecItemBaseObject.__init__(self)\r
417 self.TokenCName = Name\r
418 self.TokenSpaceGuidCName = Guid\r
419 self.DatumType = DatumType\r
420 self.DefaultValue = Value\r
421 self.TokenValue = Token\r
422 self.MaxDatumSize = MaxDatumSize\r
423\r
424 ## __hash__\r
f7496d71 425 #\r
4234283c
LG
426 def __hash__(self):\r
427 return hash(self.TokenSpaceGuidCName + self.TokenCName)\r
428\r
429 ## __eq__\r
430 #\r
431 def __eq__(self, Other):\r
432 return id(self) == id(Other)\r
433\r
434 ## GetArchListOfType\r
435 #\r
436 # @param PcdType: PcdType\r
f7496d71 437 #\r
4234283c
LG
438 def GetArchListOfType(self, PcdType):\r
439 ItemSet = set()\r
440 PcdType = PcdType.upper()\r
441 for Type, Arch in self.ArchAndModuleType:\r
442 if Type != PcdType:\r
443 continue\r
444 ItemSet.add(Arch)\r
445 return list(ItemSet)\r
446\r
447## DecGuidObjectBase\r
448#\r
449# Base class for PPI, Protocol, and GUID.\r
450# Hold same data but has different method for clarification in sub-class\r
451#\r
452# @param _DecBaseObject: Dec Base Object\r
453#\r
454class DecGuidObjectBase(_DecBaseObject):\r
455 def __init__(self, PkgFullName):\r
456 _DecBaseObject.__init__(self, PkgFullName)\r
457\r
458 ## GetGuidStyleItems\r
459 #\r
460 # @param Arch: Arch\r
f7496d71 461 #\r
4234283c
LG
462 def GetGuidStyleItems(self, Arch=TAB_ARCH_COMMON):\r
463 return self._GetItemByArch(Arch)\r
464\r
465 ## GetGuidStyleAllItems\r
f7496d71 466 #\r
4234283c
LG
467 def GetGuidStyleAllItems(self):\r
468 return self._GetAllItems()\r
469\r
470## DecGuidItemObject\r
471#\r
472# Item of GUID, PPI and Protocol section\r
473#\r
474# @param _DecItemBaseObject: Dec Item Base Object\r
475#\r
476class DecGuidItemObject(_DecItemBaseObject):\r
477 def __init__(self, CName, GuidCValue, GuidString):\r
478 _DecItemBaseObject.__init__(self)\r
479 self.GuidCName = CName\r
480 self.GuidCValue = GuidCValue\r
481 self.GuidString = GuidString\r
482\r
483 ## __hash__\r
f7496d71 484 #\r
4234283c
LG
485 def __hash__(self):\r
486 return hash(self.GuidCName)\r
487\r
488 ## __eq__\r
489 #\r
490 def __eq__(self, Other):\r
491 return id(self) == id(Other)\r
492\r
493 ## __str__\r
f7496d71 494 #\r
4234283c
LG
495 def __str__(self):\r
496 return self.GuidCName + ' = ' + self.GuidCValue\r
497\r
498## DecGuidObject\r
499#\r
500# Class for GUID section\r
501#\r
502# @param DecGuidObjectBase: Dec Guid Object Base\r
503#\r
504class DecGuidObject(DecGuidObjectBase):\r
505 def __init__(self, PkgFullName):\r
506 DecGuidObjectBase.__init__(self, PkgFullName)\r
507 self._SecName = TAB_GUIDS.upper()\r
508\r
509 ## GetGuids\r
f7496d71 510 #\r
4234283c
LG
511 # @param Arch: Arch\r
512 #\r
513 def GetGuids(self, Arch=TAB_ARCH_COMMON):\r
514 return self._GetItemByArch(Arch)\r
515\r
516 ## GetAllGuids\r
f7496d71 517 #\r
4234283c
LG
518 def GetAllGuids(self):\r
519 return self._GetAllItems()\r
520\r
521## DecPpiObject\r
522#\r
523# Class for PPI seciont\r
524#\r
525# @param DecGuidObjectBase: Dec Guid Object Base\r
526#\r
527class DecPpiObject(DecGuidObjectBase):\r
528 def __init__(self, PkgFullName):\r
529 DecGuidObjectBase.__init__(self, PkgFullName)\r
530 self._SecName = TAB_PPIS.upper()\r
531\r
532 ## GetPpis\r
f7496d71 533 #\r
4234283c 534 # @param Arch: Arch\r
f7496d71 535 #\r
4234283c
LG
536 def GetPpis(self, Arch=TAB_ARCH_COMMON):\r
537 return self._GetItemByArch(Arch)\r
538\r
539 ## GetAllPpis\r
f7496d71 540 #\r
4234283c
LG
541 def GetAllPpis(self):\r
542 return self._GetAllItems()\r
543\r
544## DecProtocolObject\r
545#\r
546# Class for protocol section\r
547#\r
548# @param DecGuidObjectBase: Dec Guid Object Base\r
549#\r
550class DecProtocolObject(DecGuidObjectBase):\r
551 def __init__(self, PkgFullName):\r
552 DecGuidObjectBase.__init__(self, PkgFullName)\r
553 self._SecName = TAB_PROTOCOLS.upper()\r
554\r
555 ## GetProtocols\r
f7496d71 556 #\r
4234283c 557 # @param Arch: Arch\r
f7496d71 558 #\r
4234283c
LG
559 def GetProtocols(self, Arch=TAB_ARCH_COMMON):\r
560 return self._GetItemByArch(Arch)\r
561\r
562 ## GetAllProtocols\r
f7496d71 563 #\r
4234283c
LG
564 def GetAllProtocols(self):\r
565 return self._GetAllItems()\r
566\r
567## DecUserExtensionObject\r
568#\r
569# Class for user extension section\r
570#\r
571# @param _DecBaseObject: Dec Guid Object Base\r
572#\r
573class DecUserExtensionObject(_DecBaseObject):\r
574 def __init__(self, PkgFullName):\r
575 _DecBaseObject.__init__(self, PkgFullName)\r
576 self._SecName = TAB_USER_EXTENSIONS.upper()\r
577 self.ItemList = []\r
578\r
579 ## GetProtocols\r
f7496d71 580 #\r
4234283c
LG
581 # @param Item: Item\r
582 # @param Scope: Scope\r
f7496d71 583 #\r
4234283c
LG
584 def AddItem(self, Item, Scope):\r
585 if not Scope:\r
586 pass\r
587 if not Item:\r
588 return\r
589 self.ItemList.append(Item)\r
590\r
591 ## GetAllUserExtensions\r
f7496d71 592 #\r
4234283c
LG
593 def GetAllUserExtensions(self):\r
594 return self.ItemList\r
595\r
596\r
597## DecUserExtensionItemObject\r
598# Item for user extension section\r
599#\r
600# @param _DecItemBaseObject: Dec Item Base Object\r
601#\r
602class DecUserExtensionItemObject(_DecItemBaseObject):\r
603 def __init__(self):\r
604 _DecItemBaseObject.__init__(self)\r
605 self.UserString = ''\r
606 self.UserId = ''\r
607 self.IdString = ''\r
608\r
609\r
610\r
611\r