| ## @file | |
| # This file is used to define class objects of INF file [Depex] 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. | |
| ''' | |
| InfDepexObject | |
| ''' | |
| from Library import DataType as DT | |
| from Library import GlobalData | |
| import Logger.Log as Logger | |
| from Logger import ToolError | |
| from Logger import StringTable as ST | |
| from Object.Parser.InfCommonObject import InfSectionCommonDef | |
| from Library.ParserValidate import IsValidArch | |
| class InfDepexContentItem(): | |
| def __init__(self): | |
| self.SectionType = '' | |
| self.SectionString = '' | |
| def SetSectionType(self, SectionType): | |
| self.SectionType = SectionType | |
| def GetSectionType(self): | |
| return self.SectionType | |
| def SetSectionString(self, SectionString): | |
| self.SectionString = SectionString | |
| def GetSectionString(self): | |
| return self.SectionString | |
| class InfDepexItem(): | |
| def __init__(self): | |
| self.DepexContent = '' | |
| self.ModuleType = '' | |
| self.SupArch = '' | |
| self.HelpString = '' | |
| self.FeatureFlagExp = '' | |
| self.InfDepexContentItemList = [] | |
| def SetFeatureFlagExp(self, FeatureFlagExp): | |
| self.FeatureFlagExp = FeatureFlagExp | |
| def GetFeatureFlagExp(self): | |
| return self.FeatureFlagExp | |
| def SetSupArch(self, Arch): | |
| self.SupArch = Arch | |
| def GetSupArch(self): | |
| return self.SupArch | |
| def SetHelpString(self, HelpString): | |
| self.HelpString = HelpString | |
| def GetHelpString(self): | |
| return self.HelpString | |
| def SetModuleType(self, Type): | |
| self.ModuleType = Type | |
| def GetModuleType(self): | |
| return self.ModuleType | |
| def SetDepexConent(self, Content): | |
| self.DepexContent = Content | |
| def GetDepexContent(self): | |
| return self.DepexContent | |
| def SetInfDepexContentItemList(self, InfDepexContentItemList): | |
| self.InfDepexContentItemList = InfDepexContentItemList | |
| def GetInfDepexContentItemList(self): | |
| return self.InfDepexContentItemList | |
| ## InfDepexObject | |
| # | |
| # | |
| # | |
| class InfDepexObject(InfSectionCommonDef): | |
| def __init__(self): | |
| self.Depex = [] | |
| self.AllContent = '' | |
| self.SectionContent = '' | |
| InfSectionCommonDef.__init__(self) | |
| def SetDepex(self, DepexContent, KeyList=None, CommentList=None): | |
| for KeyItem in KeyList: | |
| Arch = KeyItem[0] | |
| ModuleType = KeyItem[1] | |
| InfDepexItemIns = InfDepexItem() | |
| # | |
| # Validate Arch | |
| # | |
| if IsValidArch(Arch.strip().upper()): | |
| InfDepexItemIns.SetSupArch(Arch) | |
| else: | |
| Logger.Error("InfParser", | |
| ToolError.FORMAT_INVALID, | |
| ST.ERR_INF_PARSER_DEFINE_NAME_INVALID % (Arch), | |
| File=GlobalData.gINF_MODULE_NAME, | |
| Line=KeyItem[2]) | |
| # | |
| # Validate Module Type | |
| # | |
| if ModuleType and ModuleType != 'COMMON': | |
| if ModuleType in DT.VALID_DEPEX_MODULE_TYPE_LIST: | |
| InfDepexItemIns.SetModuleType(ModuleType) | |
| else: | |
| Logger.Error("InfParser", | |
| ToolError.FORMAT_INVALID, | |
| ST.ERR_INF_PARSER_DEPEX_SECTION_MODULE_TYPE_ERROR % (ModuleType), | |
| File=GlobalData.gINF_MODULE_NAME, | |
| Line=KeyItem[2]) | |
| # | |
| # Parser content in [Depex] section. | |
| # | |
| DepexString = '' | |
| HelpString = '' | |
| # | |
| # Get Depex Expression | |
| # | |
| for Line in DepexContent: | |
| LineContent = Line[0].strip() | |
| if LineContent.find(DT.TAB_COMMENT_SPLIT) > -1: | |
| LineContent = LineContent[:LineContent.find(DT.TAB_COMMENT_SPLIT)] | |
| if LineContent: | |
| DepexString = DepexString + LineContent + DT.END_OF_LINE | |
| continue | |
| if DepexString.endswith(DT.END_OF_LINE): | |
| DepexString = DepexString[:-1] | |
| if not DepexString.strip(): | |
| continue | |
| # | |
| # Get Help Text | |
| # | |
| for HelpLine in CommentList: | |
| HelpString = HelpString + HelpLine + DT.END_OF_LINE | |
| if HelpString.endswith(DT.END_OF_LINE): | |
| HelpString = HelpString[:-1] | |
| InfDepexItemIns.SetDepexConent(DepexString) | |
| InfDepexItemIns.SetHelpString(HelpString) | |
| self.Depex.append(InfDepexItemIns) | |
| return True | |
| def GetDepex(self): | |
| return self.Depex | |
| def GetAllContent(self): | |
| return self.AllContent |