4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync## @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# This file is used to define class objects of INF file [Depex] section.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# It will consumed by InfParser.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# This program and the accompanying materials are licensed and made available
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# under the terms and conditions of the BSD License which accompanies this
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# http://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync'''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncInfDepexObject
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync'''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Library import DataType as DT
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Library import GlobalData
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncimport Logger.Log as Logger
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Logger import ToolError
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Logger import StringTable as ST
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Object.Parser.InfCommonObject import InfSectionCommonDef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Library.ParserValidate import IsValidArch
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncclass InfDepexContentItem():
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def __init__(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.SectionType = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.SectionString = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetSectionType(self, SectionType):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.SectionType = SectionType
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetSectionType(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.SectionType
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetSectionString(self, SectionString):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.SectionString = SectionString
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetSectionString(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.SectionString
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncclass InfDepexItem():
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def __init__(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.DepexContent = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.ModuleType = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.SupArch = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.HelpString = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.FeatureFlagExp = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.InfDepexContentItemList = []
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetFeatureFlagExp(self, FeatureFlagExp):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.FeatureFlagExp = FeatureFlagExp
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetFeatureFlagExp(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.FeatureFlagExp
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetSupArch(self, Arch):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.SupArch = Arch
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetSupArch(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.SupArch
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetHelpString(self, HelpString):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.HelpString = HelpString
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetHelpString(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.HelpString
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetModuleType(self, Type):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.ModuleType = Type
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetModuleType(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.ModuleType
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetDepexConent(self, Content):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.DepexContent = Content
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetDepexContent(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.DepexContent
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetInfDepexContentItemList(self, InfDepexContentItemList):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.InfDepexContentItemList = InfDepexContentItemList
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetInfDepexContentItemList(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.InfDepexContentItemList
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync## InfDepexObject
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncclass InfDepexObject(InfSectionCommonDef):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def __init__(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.Depex = []
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.AllContent = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.SectionContent = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync InfSectionCommonDef.__init__(self)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetDepex(self, DepexContent, KeyList=None, CommentList=None):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for KeyItem in KeyList:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Arch = KeyItem[0]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ModuleType = KeyItem[1]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync InfDepexItemIns = InfDepexItem()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Validate Arch
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if IsValidArch(Arch.strip().upper()):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync InfDepexItemIns.SetSupArch(Arch)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Logger.Error("InfParser",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ToolError.FORMAT_INVALID,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ST.ERR_INF_PARSER_DEFINE_NAME_INVALID % (Arch),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync File=GlobalData.gINF_MODULE_NAME,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Line=KeyItem[2])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Validate Module Type
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ModuleType and ModuleType != 'COMMON':
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ModuleType in DT.VALID_DEPEX_MODULE_TYPE_LIST:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync InfDepexItemIns.SetModuleType(ModuleType)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Logger.Error("InfParser",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ToolError.FORMAT_INVALID,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ST.ERR_INF_PARSER_DEPEX_SECTION_MODULE_TYPE_ERROR % (ModuleType),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync File=GlobalData.gINF_MODULE_NAME,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Line=KeyItem[2])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Parser content in [Depex] section.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DepexString = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HelpString = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Get Depex Expression
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for Line in DepexContent:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LineContent = Line[0].strip()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if LineContent.find(DT.TAB_COMMENT_SPLIT) > -1:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LineContent = LineContent[:LineContent.find(DT.TAB_COMMENT_SPLIT)]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if LineContent:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DepexString = DepexString + LineContent + DT.END_OF_LINE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync continue
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if DepexString.endswith(DT.END_OF_LINE):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DepexString = DepexString[:-1]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if not DepexString.strip():
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync continue
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Get Help Text
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for HelpLine in CommentList:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HelpString = HelpString + HelpLine + DT.END_OF_LINE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if HelpString.endswith(DT.END_OF_LINE):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HelpString = HelpString[:-1]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync InfDepexItemIns.SetDepexConent(DepexString)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync InfDepexItemIns.SetHelpString(HelpString)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.Depex.append(InfDepexItemIns)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return True
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetDepex(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.Depex
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetAllContent(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return self.AllContent