BaseTools: Copy "TianoCore" userextensions into As Built Inf

Per build spec to update the tool to copy "TianoCore" userextensions to
As Built INF file.

Cc: Liming Gao <liming.gao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Yonghong Zhu <yonghong.zhu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
Yonghong Zhu 2017-04-13 14:33:05 +08:00
parent 78bcd52abb
commit dfa41b4a48
2 changed files with 54 additions and 0 deletions

View File

@ -143,6 +143,8 @@ ${END}
${depexsection_item} ${depexsection_item}
${userextension_tianocore_item}
${tail_comments} ${tail_comments}
[BuildOptions.${module_arch}] [BuildOptions.${module_arch}]
@ -3088,6 +3090,30 @@ class ModuleAutoGen(AutoGen):
self._DepexExpressionList[ModuleType] = DepexExpressionList self._DepexExpressionList[ModuleType] = DepexExpressionList
return self._DepexExpressionList return self._DepexExpressionList
# Get the tiano core user extension, it is contain dependent library.
# @retval: a list contain tiano core userextension.
#
def _GetTianoCoreUserExtensionList(self):
TianoCoreUserExtentionList = []
for M in [self.Module] + self.DependentLibraryList:
Filename = M.MetaFile.Path
InfObj = InfSectionParser.InfSectionParser(Filename)
TianoCoreUserExtenList = InfObj.GetUserExtensionTianoCore()
for TianoCoreUserExtent in TianoCoreUserExtenList:
for Section in TianoCoreUserExtent.keys():
ItemList = Section.split(TAB_SPLIT)
Arch = self.Arch
if len(ItemList) == 4:
Arch = ItemList[3]
if Arch.upper() == TAB_ARCH_COMMON or Arch.upper() == self.Arch.upper():
TianoCoreList = []
TianoCoreList.extend([TAB_SECTION_START + Section + TAB_SECTION_END])
TianoCoreList.extend(TianoCoreUserExtent[Section][:])
TianoCoreList.append('\n')
TianoCoreUserExtentionList.append(TianoCoreList)
return TianoCoreUserExtentionList
## Return the list of specification version required for the module ## Return the list of specification version required for the module
# #
# @retval list The list of specification defined in module file # @retval list The list of specification defined in module file
@ -4059,6 +4085,16 @@ class ModuleAutoGen(AutoGen):
for Library in self.LibraryAutoGenList: for Library in self.LibraryAutoGenList:
AsBuiltInfDict['libraryclasses_item'] += [Library.MetaFile.File.replace('\\', '/')] AsBuiltInfDict['libraryclasses_item'] += [Library.MetaFile.File.replace('\\', '/')]
# Generated UserExtensions TianoCore section.
# All tianocore user extensions are copied.
UserExtStr = ''
for TianoCore in self._GetTianoCoreUserExtensionList():
UserExtStr += '\n'.join(TianoCore)
ExtensionFile = os.path.join(self.MetaFile.Dir, TianoCore[1])
if os.path.isfile(ExtensionFile):
shutil.copy2(ExtensionFile, self.OutputDir)
AsBuiltInfDict['userextension_tianocore_item'] = UserExtStr
# Generated depex expression section in comments. # Generated depex expression section in comments.
AsBuiltInfDict['depexsection_item'] = '' AsBuiltInfDict['depexsection_item'] = ''
DepexExpresion = self._GetDepexExpresionString() DepexExpresion = self._GetDepexExpresionString()

View File

@ -62,6 +62,24 @@ class InfSectionParser():
SectionData = [] SectionData = []
SectionLine = '' SectionLine = ''
# Get user extension TianoCore data
#
# @return: a list include some dictionary that key is section and value is a list contain all data.
def GetUserExtensionTianoCore(self):
UserExtensionTianoCore = []
if not self._FileSectionDataList:
return UserExtensionTianoCore
for SectionDataDict in self._FileSectionDataList:
for key in SectionDataDict.keys():
if key.lower().startswith("[userextensions") and key.lower().find('.tianocore.') > -1:
SectionLine = key.lstrip(TAB_SECTION_START).rstrip(TAB_SECTION_END)
SubSectionList = [SectionLine]
if str(SectionLine).find(TAB_COMMA_SPLIT) > -1:
SubSectionList = str(SectionLine).split(TAB_COMMA_SPLIT)
for SubSection in SubSectionList:
if SubSection.lower().find('.tianocore.') > -1:
UserExtensionTianoCore.append({SubSection: SectionDataDict[key]})
return UserExtensionTianoCore
# Get depex expresion # Get depex expresion
# #