]>
Commit | Line | Data |
---|---|---|
4234283c LG |
1 | ## @file DecPomAlignment.py\r |
2 | # This file contained the adapter for convert INF parser object to POM Object\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 | |
16 | DecPomAlignment\r | |
17 | '''\r | |
18 | \r | |
19 | ##\r | |
20 | # Import Modules\r | |
21 | #\r | |
22 | import os.path\r | |
23 | from os import sep\r | |
24 | import platform\r | |
25 | \r | |
26 | import Logger.Log as Logger\r | |
27 | from Logger import StringTable as ST\r | |
28 | from Logger.ToolError import UPT_MUL_DEC_ERROR\r | |
29 | \r | |
30 | from Library.Parsing import NormPath\r | |
31 | from Library.DataType import ARCH_LIST\r | |
32 | from Library.DataType import TAB_GUIDS\r | |
33 | from Library.DataType import TAB_PROTOCOLS\r | |
34 | from Library.DataType import TAB_PPIS\r | |
35 | from Library.DataType import TAB_DEC_DEFINES_PACKAGE_NAME\r | |
36 | from Library.DataType import TAB_DEC_DEFINES_PACKAGE_GUID\r | |
37 | from Library.DataType import TAB_DEC_DEFINES_PACKAGE_VERSION\r | |
38 | from Library.DataType import TAB_DEC_DEFINES_DEC_SPECIFICATION\r | |
39 | from Library.DataType import TAB_ARCH_COMMON\r | |
40 | from Library.CommentParsing import ParseHeaderCommentSection\r | |
41 | from Library.DataType import TAB_INCLUDES\r | |
42 | from Library.CommentParsing import ParseGenericComment\r | |
43 | from Library.DataType import TAB_LIBRARY_CLASSES\r | |
44 | from Library.DataType import TAB_PCDS\r | |
45 | from Library.DataType import TAB_PCDS_FIXED_AT_BUILD_NULL\r | |
46 | from Library.DataType import TAB_PCDS_PATCHABLE_IN_MODULE_NULL\r | |
47 | from Library.DataType import TAB_PCDS_FEATURE_FLAG_NULL\r | |
48 | from Library.DataType import TAB_PCDS_DYNAMIC_EX_NULL\r | |
49 | from Library.DataType import TAB_PCDS_DYNAMIC_NULL\r | |
50 | from Library.DataType import TAB_PTR_TYPE_PCD\r | |
51 | from Library.DataType import ITEM_UNDEFINED\r | |
52 | from Library.CommentParsing import ParseDecPcdGenericComment\r | |
53 | from Library.CommentParsing import ParseDecPcdTailComment\r | |
54 | from Library.Misc import GetFiles\r | |
55 | from Library.Misc import Sdict\r | |
56 | from Parser.DecParser import Dec\r | |
57 | \r | |
58 | from Object.POM.PackageObject import PackageObject\r | |
59 | from Object.POM.CommonObject import UserExtensionObject\r | |
60 | from Object.POM.CommonObject import IncludeObject\r | |
61 | from Object.POM.CommonObject import GuidObject\r | |
62 | from Object.POM.CommonObject import ProtocolObject\r | |
63 | from Object.POM.CommonObject import PpiObject\r | |
64 | from Object.POM.CommonObject import LibraryClassObject\r | |
65 | from Object.POM.CommonObject import PcdObject\r | |
66 | from Object.POM.CommonObject import TextObject\r | |
67 | \r | |
68 | \r | |
69 | ## DecPomAlignment\r | |
70 | #\r | |
71 | # Inherited from PackageObject\r | |
72 | #\r | |
73 | class DecPomAlignment(PackageObject):\r | |
74 | def __init__(self, Filename, WorkspaceDir = None, CheckMulDec = False):\r | |
75 | PackageObject.__init__(self)\r | |
76 | self.UserExtensions = ''\r | |
77 | self.WorkspaceDir = WorkspaceDir\r | |
78 | self.SupArchList = ARCH_LIST\r | |
79 | self.CheckMulDec = CheckMulDec\r | |
80 | self.DecParser = None\r | |
81 | \r | |
82 | #\r | |
83 | # Load Dec file\r | |
84 | #\r | |
85 | self.LoadDecFile(Filename)\r | |
86 | \r | |
87 | #\r | |
88 | # Transfer to Package Object if IsToPackage is True\r | |
89 | #\r | |
90 | self.DecToPackage()\r | |
91 | \r | |
92 | ## Load Dec file\r | |
93 | #\r | |
94 | # Load the file if it exists\r | |
95 | #\r | |
96 | # @param Filename: Input value for filename of Dec file\r | |
97 | #\r | |
98 | def LoadDecFile(self, Filename):\r | |
99 | #\r | |
100 | # Insert a record for file\r | |
101 | #\r | |
102 | Filename = NormPath(Filename)\r | |
103 | (Path, Name) = os.path.split(Filename)\r | |
104 | self.SetFullPath(Filename)\r | |
105 | self.SetRelaPath(Path)\r | |
106 | self.SetFileName(Name)\r | |
107 | self.SetPackagePath(Path[Path.upper().find(self.WorkspaceDir.upper()) + len(self.WorkspaceDir) + 1:])\r | |
108 | self.SetCombinePath(Filename[Filename.upper().find(self.WorkspaceDir.upper()) + len(self.WorkspaceDir) + 1:])\r | |
109 | \r | |
110 | self.DecParser = Dec(Filename)\r | |
111 | \r | |
112 | ## Transfer to Package Object\r | |
113 | # \r | |
114 | # Transfer all contents of a Dec file to a standard Package Object\r | |
115 | #\r | |
116 | def DecToPackage(self):\r | |
117 | #\r | |
118 | # Init global information for the file\r | |
119 | #\r | |
120 | ContainerFile = self.GetFullPath()\r | |
121 | \r | |
122 | #\r | |
123 | # Generate Package Header\r | |
124 | #\r | |
125 | self.GenPackageHeader(ContainerFile)\r | |
126 | \r | |
127 | #\r | |
128 | # Generate Includes\r | |
129 | #\r | |
130 | self.GenIncludes(ContainerFile)\r | |
131 | \r | |
132 | #\r | |
133 | # Generate Guids\r | |
134 | #\r | |
135 | self.GenGuidProtocolPpis(TAB_GUIDS, ContainerFile)\r | |
136 | \r | |
137 | #\r | |
138 | # Generate Protocols\r | |
139 | #\r | |
140 | self.GenGuidProtocolPpis(TAB_PROTOCOLS, ContainerFile)\r | |
141 | \r | |
142 | #\r | |
143 | # Generate Ppis\r | |
144 | #\r | |
145 | self.GenGuidProtocolPpis(TAB_PPIS, ContainerFile)\r | |
146 | \r | |
147 | #\r | |
148 | # Generate LibraryClasses\r | |
149 | #\r | |
150 | self.GenLibraryClasses(ContainerFile)\r | |
151 | \r | |
152 | #\r | |
153 | # Generate Pcds\r | |
154 | #\r | |
155 | self.GenPcds(ContainerFile)\r | |
156 | \r | |
157 | #\r | |
158 | # Generate Module File list, will be used later on to generate \r | |
159 | # distribution\r | |
160 | #\r | |
161 | self.GenModuleFileList(ContainerFile)\r | |
162 | \r | |
163 | #\r | |
164 | # Generate user extensions\r | |
165 | #\r | |
166 | self.GenUserExtensions()\r | |
167 | \r | |
168 | ## Generate user extention\r | |
169 | #\r | |
170 | #\r | |
171 | def GenUserExtensions(self):\r | |
172 | UEObj = self.DecParser.GetUserExtensionSectionObject()\r | |
173 | UEList = UEObj.GetAllUserExtensions()\r | |
174 | for Item in UEList:\r | |
175 | if not Item.UserString:\r | |
176 | continue\r | |
177 | UserExtension = UserExtensionObject()\r | |
178 | UserId = Item.UserId\r | |
179 | if UserId.startswith('"') and UserId.endswith('"'):\r | |
180 | UserId = UserId[1:-1]\r | |
181 | UserExtension.SetUserID(UserId)\r | |
182 | Identifier = Item.IdString\r | |
183 | if Identifier.startswith('"') and Identifier.endswith('"'):\r | |
184 | Identifier = Identifier[1:-1]\r | |
185 | UserExtension.SetIdentifier(Identifier)\r | |
186 | UserExtension.SetStatement(Item.UserString)\r | |
187 | UserExtension.SetSupArchList(\r | |
188 | Item.ArchAndModuleType\r | |
189 | )\r | |
190 | self.SetUserExtensionList(\r | |
191 | self.GetUserExtensionList() + [UserExtension]\r | |
192 | )\r | |
193 | \r | |
194 | ## Generate Package Header\r | |
195 | #\r | |
196 | # Gen Package Header of Dec as <Key> = <Value>\r | |
197 | #\r | |
198 | # @param ContainerFile: The Dec file full path \r | |
199 | #\r | |
200 | def GenPackageHeader(self, ContainerFile):\r | |
201 | Logger.Debug(2, "Generate PackageHeader ...")\r | |
202 | DefinesDict = {}\r | |
203 | \r | |
204 | #\r | |
205 | # Update all defines item in database\r | |
206 | #\r | |
207 | DefObj = self.DecParser.GetDefineSectionObject()\r | |
208 | for Item in DefObj.GetDefines():\r | |
209 | #\r | |
210 | # put items into Dict except for PackageName, Guid, Version, DEC_SPECIFICATION\r | |
211 | #\r | |
212 | SkipItemList = [TAB_DEC_DEFINES_PACKAGE_NAME, \\r | |
213 | TAB_DEC_DEFINES_PACKAGE_GUID, TAB_DEC_DEFINES_PACKAGE_VERSION, TAB_DEC_DEFINES_DEC_SPECIFICATION]\r | |
214 | if Item.Key in SkipItemList:\r | |
215 | continue\r | |
216 | DefinesDict['%s = %s' % (Item.Key, Item.Value)] = TAB_ARCH_COMMON\r | |
217 | \r | |
218 | self.SetBaseName(DefObj.GetPackageName())\r | |
219 | self.SetVersion(DefObj.GetPackageVersion())\r | |
220 | # self.SetName(DefObj.GetPackageName() + ' Version ' + \\r | |
221 | # DefObj.GetPackageVersion())\r | |
222 | self.SetName(os.path.splitext(self.GetFileName())[0])\r | |
223 | self.SetGuid(DefObj.GetPackageGuid())\r | |
224 | \r | |
225 | if DefinesDict:\r | |
226 | UserExtension = UserExtensionObject()\r | |
227 | UserExtension.SetDefinesDict(DefinesDict)\r | |
228 | UserExtension.SetIdentifier('DefineModifiers')\r | |
229 | UserExtension.SetUserID('EDK2') \r | |
230 | self.SetUserExtensionList(\r | |
231 | self.GetUserExtensionList() + [UserExtension]\r | |
232 | )\r | |
233 | \r | |
234 | #\r | |
235 | # Get All header comment section information\r | |
236 | #\r | |
237 | Abstract, Description, Copyright, License = \\r | |
238 | ParseHeaderCommentSection(self.DecParser.GetHeadComment(),\r | |
239 | ContainerFile)\r | |
240 | self.SetAbstract(Abstract)\r | |
241 | self.SetDescription(Description)\r | |
242 | self.SetCopyright(Copyright)\r | |
243 | self.SetLicense(License)\r | |
244 | \r | |
245 | ## GenIncludes\r | |
246 | #\r | |
247 | # Gen Includes of Dec\r | |
248 | # \r | |
249 | # @param ContainerFile: The Dec file full path \r | |
250 | #\r | |
251 | def GenIncludes(self, ContainerFile):\r | |
252 | if ContainerFile:\r | |
253 | pass\r | |
254 | Logger.Debug(2, "Generate %s ..." % TAB_INCLUDES)\r | |
255 | IncludesDict = Sdict()\r | |
256 | \r | |
257 | IncObj = self.DecParser.GetIncludeSectionObject()\r | |
258 | for Item in IncObj.GetAllIncludes():\r | |
259 | IncludePath = os.path.normpath(Item.File)\r | |
260 | if platform.system() != 'Windows':\r | |
261 | IncludePath = IncludePath.replace('\\', '/')\r | |
262 | if IncludePath in IncludesDict:\r | |
263 | if Item.GetArchList() == [TAB_ARCH_COMMON] or IncludesDict[IncludePath] == [TAB_ARCH_COMMON]:\r | |
264 | IncludesDict[IncludePath] = [TAB_ARCH_COMMON]\r | |
265 | else:\r | |
266 | IncludesDict[IncludePath] = IncludesDict[IncludePath] + Item.GetArchList()\r | |
267 | else:\r | |
268 | IncludesDict[IncludePath] = Item.GetArchList()\r | |
269 | \r | |
270 | # \r | |
271 | # get the standardIncludeFileList(industry), packageIncludeFileList\r | |
272 | # (others) for PackageObject \r | |
273 | # \r | |
274 | PackagePath = os.path.split(self.GetFullPath())[0]\r | |
275 | IncludePathList = \\r | |
276 | [os.path.normpath(Path) + sep for Path in IncludesDict.keys()]\r | |
277 | IncludePathList.sort()\r | |
278 | \r | |
279 | #\r | |
280 | # get a non-overlap set of include path, IncludePathList should be \r | |
281 | # sorted, and path should be end with path seperator '\'\r | |
282 | #\r | |
283 | NonOverLapList = []\r | |
284 | for Path1 in IncludePathList:\r | |
285 | for Path2 in NonOverLapList:\r | |
286 | if Path1.startswith(Path2):\r | |
287 | break\r | |
288 | else:\r | |
289 | NonOverLapList.append(Path1)\r | |
290 | #\r | |
291 | # revert the list so the longest path shown first in list, also need\r | |
292 | # to remove the extra path seperator '\'\r | |
293 | # as this list is used to search the supported Arch info\r | |
294 | #\r | |
295 | for IndexN in range (0, len(IncludePathList)):\r | |
296 | IncludePathList[IndexN] = os.path.normpath(IncludePathList[IndexN])\r | |
297 | IncludePathList.sort() \r | |
298 | IncludePathList.reverse()\r | |
299 | #\r | |
300 | # save the include path list for later usage\r | |
301 | #\r | |
302 | self.SetIncludePathList(IncludePathList)\r | |
303 | StandardIncludeFileList = []\r | |
304 | PackageIncludeFileList = []\r | |
305 | \r | |
306 | IncludeFileList = []\r | |
307 | for Path in NonOverLapList:\r | |
308 | FileList = GetFiles(os.path.join(PackagePath, Path), ['CVS', '.svn'], False)\r | |
309 | IncludeFileList += [os.path.normpath(os.path.join(Path, File)) for File in FileList]\r | |
310 | for Includefile in IncludeFileList:\r | |
311 | ExtName = os.path.splitext(Includefile)[1]\r | |
312 | if ExtName.upper() == '.DEC' and self.CheckMulDec:\r | |
313 | Logger.Error('MkPkg', \r | |
314 | UPT_MUL_DEC_ERROR,\r | |
315 | ST.ERR_MUL_DEC_ERROR%(os.path.dirname(ContainerFile), \r | |
316 | os.path.basename(ContainerFile),\r | |
317 | Includefile))\r | |
318 | \r | |
319 | FileCombinePath = os.path.dirname(Includefile)\r | |
320 | Include = IncludeObject()\r | |
321 | for Path in IncludePathList:\r | |
322 | if FileCombinePath.startswith(Path):\r | |
323 | SupArchList = IncludesDict[Path]\r | |
324 | break\r | |
325 | Include.SetFilePath(Includefile)\r | |
326 | Include.SetSupArchList(SupArchList)\r | |
327 | if Includefile.find('IndustryStandard') != -1:\r | |
328 | StandardIncludeFileList.append(Include)\r | |
329 | else:\r | |
330 | PackageIncludeFileList.append(Include) \r | |
331 | \r | |
332 | self.SetStandardIncludeFileList(StandardIncludeFileList)\r | |
333 | \r | |
334 | #\r | |
335 | # put include path into the PackageIncludeFileList\r | |
336 | #\r | |
337 | PackagePathList = []\r | |
338 | IncObj = self.DecParser.GetIncludeSectionObject() \r | |
339 | for Item in IncObj.GetAllIncludes():\r | |
340 | IncludePath = Item.File\r | |
341 | Include = IncludeObject()\r | |
342 | Include.SetFilePath(IncludePath)\r | |
343 | Include.SetSupArchList(Item.GetArchList())\r | |
344 | PackagePathList.append(Include)\r | |
345 | self.SetPackageIncludeFileList(PackagePathList + PackageIncludeFileList)\r | |
346 | \r | |
347 | ## GenPpis\r | |
348 | #\r | |
349 | # Gen Ppis of Dec\r | |
350 | # <CName>=<GuidValue>\r | |
351 | #\r | |
352 | # @param ContainerFile: The Dec file full path \r | |
353 | #\r | |
354 | def GenGuidProtocolPpis(self, Type, ContainerFile):\r | |
355 | if ContainerFile:\r | |
356 | pass\r | |
357 | Logger.Debug(2, "Generate %s ..." % Type)\r | |
358 | \r | |
359 | Obj = None\r | |
360 | Factory = None\r | |
361 | if Type == TAB_GUIDS:\r | |
362 | Obj = self.DecParser.GetGuidSectionObject()\r | |
363 | def CreateGuidObject():\r | |
364 | Object = GuidObject()\r | |
365 | Object.SetGuidTypeList([])\r | |
366 | Object.SetUsage(None)\r | |
367 | Object.SetName(None)\r | |
368 | return Object\r | |
369 | Factory = CreateGuidObject\r | |
370 | elif Type == TAB_PROTOCOLS:\r | |
371 | Obj = self.DecParser.GetProtocolSectionObject()\r | |
372 | \r | |
373 | def CreateProtocolObject():\r | |
374 | return ProtocolObject()\r | |
375 | Factory = CreateProtocolObject\r | |
376 | elif Type == TAB_PPIS:\r | |
377 | Obj = self.DecParser.GetPpiSectionObject()\r | |
378 | \r | |
379 | def CreatePpiObject():\r | |
380 | return PpiObject()\r | |
381 | Factory = CreatePpiObject\r | |
382 | else:\r | |
383 | #\r | |
384 | # Should not be here\r | |
385 | #\r | |
386 | return\r | |
387 | \r | |
388 | DeclarationsList = []\r | |
389 | \r | |
390 | #\r | |
391 | # Go through each arch\r | |
392 | #\r | |
393 | for Item in Obj.GetGuidStyleAllItems():\r | |
394 | Name = Item.GuidCName\r | |
395 | Value = Item.GuidString\r | |
396 | HelpTxt = ParseGenericComment(Item.GetHeadComment() + \\r | |
397 | Item.GetTailComment())\r | |
398 | \r | |
399 | ListObject = Factory()\r | |
400 | ListObject.SetCName(Name)\r | |
401 | ListObject.SetGuid(Value)\r | |
402 | ListObject.SetSupArchList(Item.GetArchList())\r | |
403 | if HelpTxt:\r | |
404 | ListObject.SetHelpTextList([HelpTxt])\r | |
405 | \r | |
406 | DeclarationsList.append(ListObject)\r | |
407 | \r | |
408 | # \r | |
409 | #GuidTypeList is abstracted from help\r | |
410 | #\r | |
411 | if Type == TAB_GUIDS:\r | |
412 | self.SetGuidList(self.GetGuidList() + DeclarationsList)\r | |
413 | elif Type == TAB_PROTOCOLS:\r | |
414 | self.SetProtocolList(self.GetProtocolList() + DeclarationsList)\r | |
415 | elif Type == TAB_PPIS:\r | |
416 | self.SetPpiList(self.GetPpiList() + DeclarationsList)\r | |
417 | \r | |
418 | ## GenLibraryClasses\r | |
419 | #\r | |
420 | # Gen LibraryClasses of Dec\r | |
421 | # <CName>=<GuidValue>\r | |
422 | #\r | |
423 | # @param ContainerFile: The Dec file full path \r | |
424 | #\r | |
425 | def GenLibraryClasses(self, ContainerFile):\r | |
426 | if ContainerFile:\r | |
427 | pass\r | |
428 | Logger.Debug(2, "Generate %s ..." % TAB_LIBRARY_CLASSES)\r | |
429 | LibraryClassDeclarations = []\r | |
430 | \r | |
431 | LibObj = self.DecParser.GetLibraryClassSectionObject()\r | |
432 | for Item in LibObj.GetAllLibraryclasses():\r | |
433 | LibraryClass = LibraryClassObject()\r | |
434 | LibraryClass.SetLibraryClass(Item.Libraryclass)\r | |
435 | LibraryClass.SetSupArchList(Item.GetArchList())\r | |
436 | LibraryClass.SetIncludeHeader(Item.File)\r | |
437 | HelpTxt = ParseGenericComment(Item.GetHeadComment() + \\r | |
438 | Item.GetTailComment(), None, '@libraryclass')\r | |
439 | if HelpTxt:\r | |
440 | LibraryClass.SetHelpTextList([HelpTxt])\r | |
441 | LibraryClassDeclarations.append(LibraryClass)\r | |
442 | \r | |
443 | self.SetLibraryClassList(self.GetLibraryClassList() + \\r | |
444 | LibraryClassDeclarations)\r | |
445 | \r | |
446 | ## GenPcds\r | |
447 | #\r | |
448 | # Gen Pcds of Dec\r | |
449 | # <TokenSpcCName>.<TokenCName>|<Value>|<DatumType>|<Token>\r | |
450 | #\r | |
451 | # @param ContainerFile: The Dec file full path \r | |
452 | #\r | |
453 | def GenPcds(self, ContainerFile):\r | |
454 | Logger.Debug(2, "Generate %s ..." % TAB_PCDS)\r | |
455 | \r | |
456 | PcdObj = self.DecParser.GetPcdSectionObject()\r | |
457 | #\r | |
458 | # Get all Pcds\r | |
459 | # \r | |
460 | PcdDeclarations = []\r | |
461 | IterList = [\r | |
462 | (TAB_PCDS_FIXED_AT_BUILD_NULL, 'FixedPcd'),\r | |
463 | (TAB_PCDS_PATCHABLE_IN_MODULE_NULL, 'PatchPcd'), \r | |
464 | (TAB_PCDS_FEATURE_FLAG_NULL, 'FeaturePcd'),\r | |
465 | (TAB_PCDS_DYNAMIC_EX_NULL, 'PcdEx'), \r | |
466 | (TAB_PCDS_DYNAMIC_NULL, 'Pcd')]\r | |
467 | #\r | |
468 | # For each PCD type\r | |
469 | #\r | |
470 | for PcdType, Type in IterList:\r | |
471 | #\r | |
472 | # Go through all archs\r | |
473 | #\r | |
474 | # for Arch in self.SupArchList + [TAB_ARCH_COMMON]:\r | |
475 | #\r | |
476 | for Item in PcdObj.GetPcdsByType(PcdType.upper()):\r | |
477 | PcdDeclaration = GenPcdDeclaration(\r | |
478 | ContainerFile,\r | |
479 | (Item.TokenSpaceGuidCName, Item.TokenCName,\r | |
480 | Item.DefaultValue, Item.DatumType, Item.TokenValue,\r | |
481 | Type, Item.GetHeadComment(), Item.GetTailComment(),\r | |
482 | '')\r | |
483 | )\r | |
484 | PcdDeclaration.SetSupArchList(Item.GetArchListOfType(PcdType))\r | |
485 | PcdDeclarations.append(PcdDeclaration)\r | |
486 | \r | |
487 | self.SetPcdList(self.GetPcdList() + PcdDeclarations)\r | |
488 | \r | |
489 | \r | |
490 | ## GenModuleFileList\r | |
491 | #\r | |
492 | def GenModuleFileList(self, ContainerFile): \r | |
493 | ModuleFileList = []\r | |
494 | ContainerFileName = os.path.basename(ContainerFile)\r | |
495 | ContainerFilePath = os.path.dirname(ContainerFile)\r | |
496 | for Item in GetFiles(ContainerFilePath, \r | |
497 | ['CVS', '.svn'] + self.GetIncludePathList(), False):\r | |
498 | ExtName = os.path.splitext(Item)[1]\r | |
499 | if ExtName.lower() == '.inf':\r | |
500 | ModuleFileList.append(Item)\r | |
501 | elif ExtName.upper() == '.DEC' and self.CheckMulDec:\r | |
502 | if Item == ContainerFileName:\r | |
503 | continue\r | |
504 | Logger.Error('MkPkg', \r | |
505 | UPT_MUL_DEC_ERROR,\r | |
506 | ST.ERR_MUL_DEC_ERROR%(ContainerFilePath, \r | |
507 | ContainerFileName, \r | |
508 | Item))\r | |
509 | \r | |
510 | self.SetModuleFileList(ModuleFileList)\r | |
511 | \r | |
512 | ## Show detailed information of Package\r | |
513 | #\r | |
514 | # Print all members and their values of Package class\r | |
515 | #\r | |
516 | def ShowPackage(self):\r | |
517 | print '\nName =', self.GetName()\r | |
518 | print '\nBaseName =', self.GetBaseName()\r | |
519 | print '\nVersion =', self.GetVersion() \r | |
520 | print '\nGuid =', self.GetGuid()\r | |
521 | \r | |
522 | print '\nStandardIncludes = %d ' \\r | |
523 | % len(self.GetStandardIncludeFileList()),\r | |
524 | for Item in self.GetStandardIncludeFileList():\r | |
525 | print Item.GetFilePath(), ' ', Item.GetSupArchList()\r | |
526 | print '\nPackageIncludes = %d \n' \\r | |
527 | % len(self.GetPackageIncludeFileList()),\r | |
528 | for Item in self.GetPackageIncludeFileList():\r | |
529 | print Item.GetFilePath(), ' ', Item.GetSupArchList()\r | |
530 | \r | |
531 | print '\nGuids =', self.GetGuidList()\r | |
532 | for Item in self.GetGuidList():\r | |
533 | print Item.GetCName(), Item.GetGuid(), Item.GetSupArchList()\r | |
534 | print '\nProtocols =', self.GetProtocolList()\r | |
535 | for Item in self.GetProtocolList():\r | |
536 | print Item.GetCName(), Item.GetGuid(), Item.GetSupArchList()\r | |
537 | print '\nPpis =', self.GetPpiList()\r | |
538 | for Item in self.GetPpiList():\r | |
539 | print Item.GetCName(), Item.GetGuid(), Item.GetSupArchList()\r | |
540 | print '\nLibraryClasses =', self.GetLibraryClassList()\r | |
541 | for Item in self.GetLibraryClassList():\r | |
542 | print Item.GetLibraryClass(), Item.GetRecommendedInstance(), \\r | |
543 | Item.GetSupArchList()\r | |
544 | print '\nPcds =', self.GetPcdList()\r | |
545 | for Item in self.GetPcdList():\r | |
546 | print 'CName=', Item.GetCName(), 'TokenSpaceGuidCName=', \\r | |
547 | Item.GetTokenSpaceGuidCName(), \\r | |
548 | 'DefaultValue=', Item.GetDefaultValue(), \\r | |
549 | 'ValidUsage=', Item.GetValidUsage(), \\r | |
550 | 'SupArchList', Item.GetSupArchList(), \\r | |
551 | 'Token=', Item.GetToken(), 'DatumType=', Item.GetDatumType()\r | |
552 | \r | |
553 | for Item in self.GetMiscFileList():\r | |
554 | print Item.GetName()\r | |
555 | for FileObjectItem in Item.GetFileList():\r | |
556 | print FileObjectItem.GetURI()\r | |
557 | print '****************\n'\r | |
558 | \r | |
559 | ## GenPcdDeclaration\r | |
560 | #\r | |
561 | # @param ContainerFile: File name of the DEC file\r | |
562 | # @param PcdInfo: Pcd information, of format (TokenGuidCName, \r | |
563 | # TokenName, Value, DatumType, Token, Type, \r | |
564 | # GenericComment, TailComment, Arch)\r | |
565 | # \r | |
566 | def GenPcdDeclaration(ContainerFile, PcdInfo):\r | |
567 | HelpStr = ''\r | |
568 | TailHelpStr = ''\r | |
569 | TokenGuidCName, TokenName, Value, DatumType, Token, Type, \\r | |
570 | GenericComment, TailComment, Arch = PcdInfo\r | |
571 | Pcd = PcdObject()\r | |
572 | Pcd.SetCName(TokenName)\r | |
573 | Pcd.SetToken(Token)\r | |
574 | Pcd.SetTokenSpaceGuidCName(TokenGuidCName)\r | |
575 | Pcd.SetDatumType(DatumType)\r | |
576 | Pcd.SetDefaultValue(Value)\r | |
577 | Pcd.SetValidUsage(Type)\r | |
578 | #\r | |
579 | # MaxDatumSize is required field for 'VOID*' PCD\r | |
580 | #\r | |
581 | if DatumType == TAB_PTR_TYPE_PCD:\r | |
582 | Pcd.SetMaxDatumSize(ITEM_UNDEFINED)\r | |
583 | \r | |
584 | SupArchList = [Arch]\r | |
585 | Pcd.SetSupArchList(SupArchList)\r | |
586 | \r | |
587 | if GenericComment:\r | |
588 | HelpStr, PcdErr = ParseDecPcdGenericComment(GenericComment, \r | |
589 | ContainerFile)\r | |
590 | if PcdErr:\r | |
591 | Pcd.SetPcdErrorsList([PcdErr])\r | |
592 | \r | |
593 | if TailComment:\r | |
594 | SupModuleList, TailHelpStr = ParseDecPcdTailComment(TailComment, \r | |
595 | ContainerFile)\r | |
596 | if SupModuleList:\r | |
597 | Pcd.SetSupModuleList(SupModuleList)\r | |
598 | \r | |
599 | if HelpStr and (not HelpStr.endswith('\n')) and TailHelpStr:\r | |
600 | HelpStr += '\n'\r | |
601 | HelpStr += TailHelpStr\r | |
602 | if HelpStr:\r | |
603 | HelpTxtObj = TextObject() \r | |
604 | HelpTxtObj.SetString(HelpStr)\r | |
605 | Pcd.SetHelpTextList([HelpTxtObj])\r | |
606 | \r | |
607 | return Pcd\r |