BaseTool Branch: https://edk2-buildtools.svn.sourceforge.net/svnroot/edk2-buildtools/branches/Releases/BaseTools_r2100 Signed-off-by: lgao4 Reviewed-by: hchen30 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12214 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			155 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| ## @file GenMetaFileMisc.py
 | |
| #
 | |
| # This file contained the miscellaneous routines for GenMetaFile usage.
 | |
| #
 | |
| # Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
 | |
| #
 | |
| # This program and the accompanying materials are licensed and made available 
 | |
| # under the terms and conditions of the BSD License which accompanies this 
 | |
| # distribution. The full text of the license may be found at 
 | |
| # http://opensource.org/licenses/bsd-license.php
 | |
| #
 | |
| # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | |
| # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | |
| #
 | |
| 
 | |
| '''
 | |
| GenMetaFileMisc
 | |
| '''
 | |
| 
 | |
| from Library import DataType as DT
 | |
| from Library import GlobalData
 | |
| from Parser.DecParser import Dec
 | |
| 
 | |
| # AddExternToDefineSec
 | |
| #
 | |
| #  @param SectionDict: string of source file path/name
 | |
| #  @param Arch:     string of source file family field
 | |
| #  @param ExternList:  string of source file FeatureFlag field
 | |
| #   
 | |
| def AddExternToDefineSec(SectionDict, Arch, ExternList):
 | |
|     for ArchList, EntryPoint, UnloadImage, Constructor, Destructor, FFE, HelpStringList in ExternList:
 | |
|         if Arch or ArchList:
 | |
|             if EntryPoint:
 | |
|                 Statement = '%s = %s' % (DT.TAB_INF_DEFINES_ENTRY_POINT, EntryPoint)
 | |
|                 if FFE:
 | |
|                     Statement += ' | %s' % FFE
 | |
|                 if len(HelpStringList) > 0:
 | |
|                     Statement = HelpStringList[0].GetString() + '\n' + Statement
 | |
|                 if len(HelpStringList) > 1:
 | |
|                     Statement = Statement + HelpStringList[1].GetString()
 | |
|                 SectionDict[Arch] = SectionDict[Arch] + [Statement]
 | |
|             if UnloadImage:
 | |
|                 Statement = '%s = %s' % (DT.TAB_INF_DEFINES_UNLOAD_IMAGE, UnloadImage)
 | |
|                 if FFE:
 | |
|                     Statement += ' | %s' % FFE
 | |
|                 
 | |
|                 if len(HelpStringList) > 0:
 | |
|                     Statement = HelpStringList[0].GetString() + '\n' + Statement
 | |
|                 if len(HelpStringList) > 1:
 | |
|                     Statement = Statement + HelpStringList[1].GetString()
 | |
|                 SectionDict[Arch] = SectionDict[Arch] + [Statement]
 | |
|             if Constructor:
 | |
|                 Statement = '%s = %s' % (DT.TAB_INF_DEFINES_CONSTRUCTOR, Constructor)
 | |
|                 if FFE:
 | |
|                     Statement += ' | %s' % FFE
 | |
|                     
 | |
|                 if len(HelpStringList) > 0:
 | |
|                     Statement = HelpStringList[0].GetString() + '\n' + Statement
 | |
|                 if len(HelpStringList) > 1:
 | |
|                     Statement = Statement + HelpStringList[1].GetString()      
 | |
|                 SectionDict[Arch] = SectionDict[Arch] + [Statement]  
 | |
|             if Destructor:
 | |
|                 Statement = '%s = %s' % (DT.TAB_INF_DEFINES_DESTRUCTOR, Destructor)
 | |
|                 if FFE:
 | |
|                     Statement += ' | %s' % FFE
 | |
|                     
 | |
|                 if len(HelpStringList) > 0:
 | |
|                     Statement = HelpStringList[0].GetString() + '\n' + Statement
 | |
|                 if len(HelpStringList) > 1:
 | |
|                     Statement = Statement + HelpStringList[1].GetString()
 | |
|                 SectionDict[Arch] = SectionDict[Arch] + [Statement]
 | |
|                 
 | |
| ## ObtainPcdName
 | |
| #
 | |
| # Using TokenSpaceGuidValue and Token to obtain PcdName from DEC file
 | |
| #
 | |
| def ObtainPcdName(Packages, TokenSpaceGuidValue, Token):
 | |
|     for PackageDependency in Packages:
 | |
|         #
 | |
|         # Generate generic comment
 | |
|         #
 | |
|         Guid = PackageDependency.GetGuid()
 | |
|         Version = PackageDependency.GetVersion()
 | |
|           
 | |
|         #
 | |
|         # find package path/name
 | |
|         # 
 | |
|         for PkgInfo in GlobalData.gWSPKG_LIST:
 | |
|             if Guid == PkgInfo[1]:
 | |
|                 if (not Version) or (Version == PkgInfo[2]):
 | |
|                     Path = PkgInfo[3]
 | |
|                     break
 | |
|     
 | |
|         DecFile = Dec(Path)
 | |
|         DecGuidsDict = DecFile.GetGuidSectionObject().ValueDict
 | |
|         DecPcdsDict = DecFile.GetPcdSectionObject().ValueDict
 | |
|         
 | |
|         TokenSpaceGuidName = ''
 | |
|         PcdCName = ''
 | |
|         TokenSpaceGuidNameFound = False
 | |
|         PcdCNameFound = False
 | |
|         
 | |
|         #
 | |
|         # Get TokenSpaceGuidCName from Guids section 
 | |
|         #
 | |
|         for GuidKey in DecGuidsDict:
 | |
|             GuidList = DecGuidsDict[GuidKey]
 | |
|             if TokenSpaceGuidNameFound:
 | |
|                 break
 | |
|             for GuidItem in GuidList:
 | |
|                 if TokenSpaceGuidValue == GuidItem.GuidString:
 | |
|                     TokenSpaceGuidName = GuidItem.GuidCName
 | |
|                     TokenSpaceGuidNameFound = True
 | |
|                     break
 | |
|     
 | |
|         #
 | |
|         # Retrieve PcdCName from Pcds Section
 | |
|         #
 | |
|         for PcdKey in DecPcdsDict:
 | |
|             PcdList = DecPcdsDict[PcdKey]
 | |
|             if PcdCNameFound:
 | |
|                 break
 | |
|             for PcdItem in PcdList:
 | |
|                 if TokenSpaceGuidName == PcdItem.TokenSpaceGuidCName and Token == PcdItem.TokenValue:
 | |
|                     PcdCName = PcdItem.TokenCName
 | |
|                     PcdCNameFound = True
 | |
|                     break        
 | |
|         
 | |
|     return TokenSpaceGuidName, PcdCName
 | |
| 
 | |
| ## _TransferDict
 | |
| #  transfer dict that using (Statement, SortedArch) as key, 
 | |
| #  (GenericComment, UsageComment) as value into a dict that using SortedArch as
 | |
| #  key and NewStatement as value 
 | |
| #
 | |
| def TransferDict(OrigDict):
 | |
|     NewDict = {}
 | |
| 
 | |
|     for Statement, SortedArch in OrigDict:
 | |
|         Comment = OrigDict[Statement, SortedArch]
 | |
|         #
 | |
|         # apply the NComment/1Comment rule
 | |
|         #
 | |
|         if Comment.find('\n') != len(Comment) - 1:    
 | |
|             NewStateMent = Comment + Statement
 | |
|         else:
 | |
|             NewStateMent = Statement + ' ' + Comment.rstrip('\n')
 | |
| 
 | |
|         if SortedArch in NewDict:
 | |
|             NewDict[SortedArch] = NewDict[SortedArch] + [NewStateMent]
 | |
|         else:
 | |
|             NewDict[SortedArch] = [NewStateMent]
 | |
| 
 | |
|     return NewDict                
 | |
|                  |