## @file GenMetaFileMisc.py # # This file contained the miscellaneous routines for GenMetaFile usage. # # Copyright (c) 2011, Intel Corporation. All rights reserved.
# # 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