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
		
			
				
	
	
		
			240 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			240 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| ## @file
 | |
| # This file is used to define class objects of INF file [Sources] section. 
 | |
| # It will consumed by InfParser. 
 | |
| #
 | |
| # 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.
 | |
| 
 | |
| '''
 | |
| InfSourcesObject
 | |
| '''
 | |
| 
 | |
| import os
 | |
| 
 | |
| from Logger import StringTable as ST
 | |
| from Logger import ToolError
 | |
| import Logger.Log as Logger
 | |
| from Library import GlobalData 
 | |
| 
 | |
| from Library.Misc import Sdict
 | |
| from Library.ExpressionValidate import IsValidFeatureFlagExp 
 | |
| from Object.Parser.InfCommonObject import InfSectionCommonDef
 | |
| from Library.Misc import ValidFile  
 | |
| from Library.ParserValidate import IsValidFamily
 | |
| from Library.ParserValidate import IsValidPath
 | |
| 
 | |
| ## __GenSourceInstance    
 | |
| #
 | |
| #  
 | |
| def GenSourceInstance(Item, CurrentLineOfItem, ItemObj):
 | |
|     
 | |
|     IsValidFileFlag = False
 | |
|     
 | |
|     if len(Item) < 6 and len(Item) >= 1:
 | |
|         #
 | |
|         # File | Family | TagName | ToolCode | FeatureFlagExpr
 | |
|         #
 | |
|         if len(Item) == 5:
 | |
|             #
 | |
|             # Validate Feature Flag Express
 | |
|             #
 | |
|             if Item[4].strip() == '':
 | |
|                 Logger.Error("InfParser", 
 | |
|                              ToolError.FORMAT_INVALID,
 | |
|                              ST.ERR_INF_PARSER_FEATURE_FLAG_EXP_MISSING,
 | |
|                              File=CurrentLineOfItem[2], 
 | |
|                              Line=CurrentLineOfItem[1], 
 | |
|                              ExtraData=CurrentLineOfItem[0])
 | |
|             #
 | |
|             # Validate FFE    
 | |
|             #
 | |
|             FeatureFlagRtv = IsValidFeatureFlagExp(Item[4].strip())
 | |
|             if not FeatureFlagRtv[0]:
 | |
|                 Logger.Error("InfParser", 
 | |
|                              ToolError.FORMAT_INVALID,
 | |
|                              ST.ERR_INF_PARSER_FEATURE_FLAG_EXP_SYNTAX_INVLID%(FeatureFlagRtv[1]),
 | |
|                              File=CurrentLineOfItem[2], 
 | |
|                              Line=CurrentLineOfItem[1], 
 | |
|                              ExtraData=CurrentLineOfItem[0])
 | |
|             ItemObj.SetFeatureFlagExp(Item[4])
 | |
|         if len(Item) >= 4:
 | |
|             if Item[3].strip() == '':
 | |
|                 ItemObj.SetToolCode(Item[3])
 | |
|             else:
 | |
|                 Logger.Error("InfParser", 
 | |
|                              ToolError.FORMAT_INVALID,
 | |
|                              ST.ERR_INF_PARSER_TOOLCODE_NOT_PERMITTED%(Item[2]),
 | |
|                              File=CurrentLineOfItem[2], 
 | |
|                              Line=CurrentLineOfItem[1], 
 | |
|                              ExtraData=CurrentLineOfItem[0])                        
 | |
|         if len(Item) >= 3:
 | |
|             if Item[2].strip() == '':
 | |
|                 ItemObj.SetTagName(Item[2])
 | |
|             else:
 | |
|                 Logger.Error("InfParser", 
 | |
|                              ToolError.FORMAT_INVALID,
 | |
|                              ST.ERR_INF_PARSER_TAGNAME_NOT_PERMITTED%(Item[2]),
 | |
|                              File=CurrentLineOfItem[2], 
 | |
|                              Line=CurrentLineOfItem[1], 
 | |
|                              ExtraData=CurrentLineOfItem[0])
 | |
|         if len(Item) >= 2:
 | |
|             if IsValidFamily(Item[1].strip()):
 | |
|                 #
 | |
|                 # To align with UDP specification. "*" is not permitted in UDP specification
 | |
|                 #
 | |
|                 if Item[1].strip() == "*":
 | |
|                     Item[1] = ""
 | |
|                 ItemObj.SetFamily(Item[1])
 | |
|             else:
 | |
|                 Logger.Error("InfParser", 
 | |
|                              ToolError.FORMAT_INVALID,
 | |
|                              ST.ERR_INF_PARSER_SOURCE_SECTION_FAMILY_INVALID%(Item[1]),
 | |
|                              File=CurrentLineOfItem[2], 
 | |
|                              Line=CurrentLineOfItem[1], 
 | |
|                              ExtraData=CurrentLineOfItem[0])
 | |
|         if len(Item) >= 1:
 | |
|             #
 | |
|             # Validate file name exist.
 | |
|             #
 | |
|             FullFileName = os.path.normpath(os.path.realpath(os.path.join(GlobalData.gINF_MODULE_DIR, Item[0])))
 | |
|             if not (ValidFile(FullFileName) or ValidFile(Item[0])):
 | |
|                 Logger.Error("InfParser", 
 | |
|                              ToolError.FORMAT_INVALID,
 | |
|                              ST.ERR_FILELIST_EXIST%(Item[0]),
 | |
|                              File=CurrentLineOfItem[2], 
 | |
|                              Line=CurrentLineOfItem[1], 
 | |
|                              ExtraData=CurrentLineOfItem[0])
 | |
|             
 | |
|             #
 | |
|             # Validate file exist/format.
 | |
|             #
 | |
|     
 | |
|             if IsValidPath(Item[0], GlobalData.gINF_MODULE_DIR):
 | |
|                 IsValidFileFlag = True
 | |
|             else:
 | |
|                 Logger.Error("InfParser", 
 | |
|                              ToolError.FORMAT_INVALID,
 | |
|                              ST.ERR_INF_PARSER_FILE_NOT_EXIST_OR_NAME_INVALID%(Item[0]),
 | |
|                              File=CurrentLineOfItem[2], 
 | |
|                              Line=CurrentLineOfItem[1], 
 | |
|                              ExtraData=CurrentLineOfItem[0])
 | |
|                 return False
 | |
|             if IsValidFileFlag:
 | |
|                 ItemObj.SetSourceFileName(Item[0])      
 | |
|     else:
 | |
|         Logger.Error("InfParser", 
 | |
|                      ToolError.FORMAT_INVALID, 
 | |
|                      ST.ERR_INF_PARSER_SOURCES_SECTION_CONTENT_ERROR,
 | |
|                      File=CurrentLineOfItem[2], 
 | |
|                      Line=CurrentLineOfItem[1],
 | |
|                      ExtraData=CurrentLineOfItem[0])
 | |
|         
 | |
|     return ItemObj  
 | |
| 
 | |
| ## InfSourcesItemObject()
 | |
| # 
 | |
| #
 | |
| class InfSourcesItemObject():
 | |
|     def __init__(self, \
 | |
|                  SourceFileName = '', \
 | |
|                  Family = '', \
 | |
|                  TagName = '', \
 | |
|                  ToolCode = '', \
 | |
|                  FeatureFlagExp = ''):
 | |
|         self.SourceFileName = SourceFileName
 | |
|         self.Family         = Family
 | |
|         self.TagName        = TagName
 | |
|         self.ToolCode       = ToolCode
 | |
|         self.FeatureFlagExp = FeatureFlagExp
 | |
|         self.HeaderString   = ''
 | |
|         self.TailString     = ''
 | |
|         self.SupArchList    = []
 | |
|         
 | |
|     def SetSourceFileName(self, SourceFilename):
 | |
|         self.SourceFileName = SourceFilename
 | |
|     def GetSourceFileName(self):
 | |
|         return self.SourceFileName
 | |
|     
 | |
|     def SetFamily(self, Family):
 | |
|         self.Family = Family
 | |
|     def GetFamily(self):
 | |
|         return self.Family
 | |
|     
 | |
|     def SetTagName(self, TagName):
 | |
|         self.TagName = TagName
 | |
|     def GetTagName(self):
 | |
|         return self.TagName
 | |
|     
 | |
|     def SetToolCode(self, ToolCode):
 | |
|         self.ToolCode = ToolCode
 | |
|     def GetToolCode(self):
 | |
|         return self.ToolCode
 | |
|     
 | |
|     def SetFeatureFlagExp(self, FeatureFlagExp):
 | |
|         self.FeatureFlagExp = FeatureFlagExp
 | |
|     def GetFeatureFlagExp(self):
 | |
|         return self.FeatureFlagExp
 | |
|     
 | |
|     def SetHeaderString(self, HeaderString):
 | |
|         self.HeaderString = HeaderString
 | |
|     def GetHeaderString(self):
 | |
|         return self.HeaderString
 | |
| 
 | |
|     def SetTailString(self, TailString):
 | |
|         self.TailString = TailString
 | |
|     def GetTailString(self):
 | |
|         return self.TailString
 | |
|     
 | |
|     def SetSupArchList(self, SupArchList):
 | |
|         self.SupArchList = SupArchList
 | |
|     def GetSupArchList(self):
 | |
|         return self.SupArchList  
 | |
| ##
 | |
| #
 | |
| #
 | |
| #
 | |
| class InfSourcesObject(InfSectionCommonDef):
 | |
|     def __init__(self):
 | |
|         self.Sources = Sdict()
 | |
|         InfSectionCommonDef.__init__(self)
 | |
|         
 | |
|     def SetSources(self, SourceList, Arch = None):
 | |
|         __SupArchList = []
 | |
|         for ArchItem in Arch:
 | |
|             #
 | |
|             # Validate Arch
 | |
|             #            
 | |
|             if (ArchItem == '' or ArchItem == None):
 | |
|                 ArchItem = 'COMMON'  
 | |
|             __SupArchList.append(ArchItem)   
 | |
| 
 | |
|         for Item in SourceList:
 | |
|             ItemObj = InfSourcesItemObject()
 | |
|             CurrentLineOfItem = Item[2]
 | |
|             Item = Item[0] 
 | |
|             
 | |
|             ItemObj = GenSourceInstance(Item, CurrentLineOfItem, ItemObj)
 | |
|                 
 | |
|             ItemObj.SetSupArchList(__SupArchList) 
 | |
|                                                                                                       
 | |
|             if self.Sources.has_key((ItemObj)):           
 | |
|                 SourceContent = self.Sources[ItemObj]
 | |
|                 SourceContent.append(ItemObj)
 | |
|                 self.Sources[ItemObj] = SourceContent
 | |
|             else:
 | |
|                 SourceContent = []
 | |
|                 SourceContent.append(ItemObj)
 | |
|                 self.Sources[ItemObj] = SourceContent
 | |
|         
 | |
|         return True
 | |
|      
 | |
|     def GetSources(self):
 | |
|         return self.Sources
 | |
|      |