Reviewed-by: Liming Gao <liming....@intel.com> >-----Original Message----- >From: Zhu, Yonghong >Sent: Sunday, January 22, 2017 11:28 AM >To: edk2-devel@lists.01.org >Cc: Gao, Liming <liming....@intel.com> >Subject: [Patch] BaseTools: Extend the Macro used in the FDF !include >statement > >Current it only support the system environment variables in the !include >statement, $(WORKSPACE), $(PACKAGES_PATH), $(EFI_SOURCE), >$(EDK_SOURCE), >$(ECP_SOURCE), this patch extend the usage to support the Global macros >and the macro which defined before the statement. > >Cc: Liming Gao <liming....@intel.com> >Contributed-under: TianoCore Contribution Agreement 1.0 >Signed-off-by: Yonghong Zhu <yonghong....@intel.com> >--- > BaseTools/Source/Python/GenFds/FdfParser.py | 41 >+++++++++++++++++++++-------- > 1 file changed, 30 insertions(+), 11 deletions(-) > >diff --git a/BaseTools/Source/Python/GenFds/FdfParser.py >b/BaseTools/Source/Python/GenFds/FdfParser.py >index e1295f2..27688e2 100644 >--- a/BaseTools/Source/Python/GenFds/FdfParser.py >+++ b/BaseTools/Source/Python/GenFds/FdfParser.py >@@ -618,31 +618,50 @@ class FdfParser: > # @param self The object pointer > # > def PreprocessIncludeFile(self): > # nested include support > Processed = False >+ MacroDict = {} > while self.__GetNextToken(): > >- if self.__Token == '!include': >+ if self.__Token == 'DEFINE': >+ if not self.__GetNextToken(): >+ raise Warning("expected Macro name", self.FileName, >self.CurrentLineNumber) >+ Macro = self.__Token >+ if not self.__IsToken( "="): >+ raise Warning("expected '='", self.FileName, >self.CurrentLineNumber) >+ Value = self.__GetExpression() >+ MacroDict[Macro] = Value >+ >+ elif self.__Token == '!include': > Processed = True > IncludeLine = self.CurrentLineNumber > IncludeOffset = self.CurrentOffsetWithinLine - len('!include') > if not self.__GetNextToken(): > raise Warning("expected include file name", self.FileName, >self.CurrentLineNumber) > IncFileName = self.__Token >- __IncludeMacros = {} >- for Macro in ['WORKSPACE', 'ECP_SOURCE', 'EFI_SOURCE', >'EDK_SOURCE']: >+ PreIndex = 0 >+ StartPos = IncFileName.find('$(', PreIndex) >+ EndPos = IncFileName.find(')', StartPos+2) >+ while StartPos != -1 and EndPos != -1: >+ Macro = IncFileName[StartPos+2 : EndPos] > MacroVal = self.__GetMacroValue(Macro) >- if MacroVal: >- __IncludeMacros[Macro] = MacroVal >+ if not MacroVal: >+ if Macro in MacroDict: >+ MacroVal = MacroDict[Macro] >+ if MacroVal != None: >+ IncFileName = IncFileName.replace('$(' + Macro + ')', >MacroVal, 1) >+ if MacroVal.find('$(') != -1: >+ PreIndex = StartPos >+ else: >+ PreIndex = StartPos + len(MacroVal) >+ else: >+ raise Warning("The Macro %s is not defined" %Macro, >self.FileName, self.CurrentLineNumber) >+ StartPos = IncFileName.find('$(', PreIndex) >+ EndPos = IncFileName.find(')', StartPos+2) > >- try: >- IncludedFile = NormPath(ReplaceMacro(IncFileName, >__IncludeMacros, RaiseError=True)) >- except: >- raise Warning("only these system environment variables are >permitted to start the path of the included file: " >- "$(WORKSPACE), $(ECP_SOURCE), $(EFI_SOURCE), >$(EDK_SOURCE)", >- self.FileName, self.CurrentLineNumber) >+ IncludedFile = NormPath(IncFileName) > # > # First search the include file under the same directory as > FDF file > # > IncludedFile1 = PathClass(IncludedFile, >os.path.dirname(self.FileName)) > ErrorCode = IncludedFile1.Validate()[0] >-- >2.6.1.windows.1
_______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel