def GenUserExtensions(ModuleObject): NewSectionDict = {} for UserExtension in ModuleObject.GetUserExtensionList(): if UserExtension.GetUserID() == DT.TAB_BINARY_HEADER_USERID and \ UserExtension.GetIdentifier() == DT.TAB_BINARY_HEADER_IDENTIFIER: continue if UserExtension.GetIdentifier() == 'Depex': continue Statement = UserExtension.GetStatement() if not Statement: continue ArchList = UserExtension.GetSupArchList() for Index in xrange(0, len(ArchList)): ArchList[Index] = ConvertArchForInstall(ArchList[Index]) ArchList.sort() KeyList = [] CommonPreFix = '' if UserExtension.GetUserID(): CommonPreFix = UserExtension.GetUserID() if CommonPreFix.find('.') > -1: CommonPreFix = '"' + CommonPreFix + '"' if UserExtension.GetIdentifier(): CommonPreFix += '.' + '"' + UserExtension.GetIdentifier() + '"' if ArchList: KeyList = [CommonPreFix + '.' + Arch for Arch in ArchList] else: KeyList = [CommonPreFix] for Key in KeyList: if Key in NewSectionDict: NewSectionDict[Key] = NewSectionDict[Key] + [Statement] else: NewSectionDict[Key] = [Statement] Content = GenSection('UserExtensions', NewSectionDict, False) return Content
def GenDepex(ModuleObject): # # generate [Depex] section # NewSectionDict = Sdict() Content = '' for Depex in ModuleObject.GetPeiDepex() + ModuleObject.GetDxeDepex() + ModuleObject.GetSmmDepex(): HelpTextList = Depex.GetHelpTextList() HelpStr = _GetHelpStr(HelpTextList) CommentStr = GenGenericCommentF(HelpStr) SupArchList = Depex.GetSupArchList() SupModList = Depex.GetModuleType() Expression = Depex.GetDepex() Statement = CommentStr + Expression SupArchList.sort() KeyList = [] if not SupArchList: SupArchList.append(DT.TAB_ARCH_COMMON.lower()) if not SupModList: KeyList = SupArchList else: for ModuleType in SupModList: for Arch in SupArchList: KeyList.append(ConvertArchForInstall(Arch) + '.' + ModuleType) for Key in KeyList: if Key in NewSectionDict: NewSectionDict[Key] = NewSectionDict[Key] + [Statement] else: NewSectionDict[Key] = [Statement] Content += GenSection('Depex', NewSectionDict, False) return Content
def GenLibraryClasses(ModuleObject): # # generate [LibraryClasses] section # Content = '' NewSectionDict = {} if not GlobalData.gIS_BINARY_INF: for LibraryClass in ModuleObject.GetLibraryClassList(): if LibraryClass.GetUsage() == DT.USAGE_ITEM_PRODUCES: continue # # Generate generic comment # HelpTextList = LibraryClass.GetHelpTextList() HelpStr = _GetHelpStr(HelpTextList) CommentStr = GenGenericCommentF(HelpStr) Statement = CommentStr Name = LibraryClass.GetLibraryClass() FFE = LibraryClass.GetFeatureFlag() Statement += Name if FFE: Statement += '|' + FFE ModuleList = LibraryClass.GetSupModuleList() ArchList = LibraryClass.GetSupArchList() for Index in xrange(0, len(ArchList)): ArchList[Index] = ConvertArchForInstall(ArchList[Index]) ArchList.sort() SortedArch = ' '.join(ArchList) KeyList = [] if not ModuleList or IsAllModuleList(ModuleList): KeyList = [SortedArch] else: ModuleString = DT.TAB_VALUE_SPLIT.join(l for l in ModuleList) if not ArchList: SortedArch = DT.TAB_ARCH_COMMON KeyList = [SortedArch + '.' + ModuleString] else: KeyList = [Arch + '.' + ModuleString for Arch in ArchList] for Key in KeyList: if Key in NewSectionDict: NewSectionDict[Key] = NewSectionDict[Key] + [Statement] else: NewSectionDict[Key] = [Statement] Content += GenSection('LibraryClasses', NewSectionDict) else: LibraryClassDict = {} for BinaryFile in ModuleObject.GetBinaryFileList(): if not BinaryFile.AsBuiltList: continue for LibraryItem in BinaryFile.AsBuiltList[0].LibraryInstancesList: Statement = '# Guid: ' + LibraryItem.Guid + ' Version: ' + LibraryItem.Version if len(BinaryFile.SupArchList) == 0: if LibraryClassDict.has_key('COMMON'): LibraryClassDict['COMMON'].append(Statement) else: LibraryClassDict['COMMON'] = ['## @LIB_INSTANCES'] LibraryClassDict['COMMON'].append(Statement) else: for Arch in BinaryFile.SupArchList: if LibraryClassDict.has_key(Arch): LibraryClassDict[Arch].append(Statement) else: LibraryClassDict[Arch] = ['## @LIB_INSTANCES'] LibraryClassDict[Arch].append(Statement) Content += GenSection('LibraryClasses', LibraryClassDict) return Content