From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 4A18421A18AAA for ; Thu, 13 Apr 2017 00:37:43 -0700 (PDT) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 13 Apr 2017 00:37:42 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.37,194,1488873600"; d="scan'208";a="73504379" Received: from shwdeopenpsi168.ccr.corp.intel.com ([10.239.158.121]) by orsmga002.jf.intel.com with ESMTP; 13 Apr 2017 00:37:41 -0700 From: Yonghong Zhu To: edk2-devel@lists.01.org Cc: Liming Gao Date: Thu, 13 Apr 2017 15:37:38 +0800 Message-Id: <1492069058-18964-1-git-send-email-yonghong.zhu@intel.com> X-Mailer: git-send-email 2.6.1.windows.1 Subject: [Patch] BaseTools: Copy "TianoCore" userextensions into As Built Inf X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Apr 2017 07:37:43 -0000 Per build spec to update the tool to copy "TianoCore" userextensions to As Built INF file. Cc: Liming Gao Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Yonghong Zhu --- BaseTools/Source/Python/AutoGen/AutoGen.py | 36 ++++++++++++++++++++++ .../Source/Python/AutoGen/InfSectionParser.py | 18 +++++++++++ 2 files changed, 54 insertions(+) diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py b/BaseTools/Source/Python/AutoGen/AutoGen.py index 285e4a4..c18802f 100644 --- a/BaseTools/Source/Python/AutoGen/AutoGen.py +++ b/BaseTools/Source/Python/AutoGen/AutoGen.py @@ -138,10 +138,12 @@ ${END} ## @LIB_INSTANCES${BEGIN} # ${libraryclasses_item}${END} ${depexsection_item} +${userextension_tianocore_item} + ${tail_comments} [BuildOptions.${module_arch}] ## @AsBuilt${BEGIN} ## ${flags_item}${END} @@ -3077,10 +3079,34 @@ class ModuleAutoGen(AutoGen): if len(DepexExpressionList) > 0: EdkLogger.verbose('') self._DepexExpressionList[ModuleType] = 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 # # @retval list The list of specification defined in module file # def _GetSpecification(self): @@ -4044,10 +4070,20 @@ class ModuleAutoGen(AutoGen): # Generated LibraryClasses section in comments. for Library in self.LibraryAutoGenList: 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. AsBuiltInfDict['depexsection_item'] = '' DepexExpresion = self._GetDepexExpresionString() if DepexExpresion: AsBuiltInfDict['depexsection_item'] = DepexExpresion diff --git a/BaseTools/Source/Python/AutoGen/InfSectionParser.py b/BaseTools/Source/Python/AutoGen/InfSectionParser.py index 7f78236..cdc9e5e 100644 --- a/BaseTools/Source/Python/AutoGen/InfSectionParser.py +++ b/BaseTools/Source/Python/AutoGen/InfSectionParser.py @@ -60,10 +60,28 @@ class InfSectionParser(): FindEnd = True self._FileSectionDataList.append({SectionLine: SectionData[:]}) SectionData = [] 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 # # @return: a list include some dictionary that key is section and value is a list contain all data. def GetDepexExpresionList(self): -- 2.6.1.windows.1