From 68dd3962c8b3f63287c66ed6a3873fe28bf3f3fe Mon Sep 17 00:00:00 2001 From: jljusten Date: Thu, 11 Oct 2007 23:24:32 +0000 Subject: [PATCH] BaseTools/Source/Python/Common/ToolDefClassObject.py: Allow 'DEFINE' macros to use previously defined macros. For example: DEFINE A = foo DEFINE B = DEF(A)bar will make B equal foobar. git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@819 7335b38e-4728-0410-8992-fb3ffe349368 --- Source/Python/Common/ToolDefClassObject.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/Source/Python/Common/ToolDefClassObject.py b/Source/Python/Common/ToolDefClassObject.py index 1d8fa91..592e276 100755 --- a/Source/Python/Common/ToolDefClassObject.py +++ b/Source/Python/Common/ToolDefClassObject.py @@ -77,18 +77,14 @@ class ToolDefClassObject(object): File=FileName, Line=Index+1) Value = Value.replace(Ref, self.MacroDictionary[Ref]) + Value = self.ExpandMacros(Value) + MacroName = MacroDefinition[0].strip() self.MacroDictionary["DEF(%s)" % MacroName] = Value EdkLogger.debug(EdkLogger.DEBUG_9, "Line %d: Found macro: %s = %s" % ((Index + 1), MacroName, Value)) continue - MacroReference = gMacroRefPattern.findall(Value) - for Ref in MacroReference: - if Ref not in self.MacroDictionary: - EdkLogger.error("tools_def.txt parser", PARSER_ERROR, - "Macro [%s] has not been defined" % Ref, - File=FileName, Line=Index+1) - Value = Value.replace(Ref, self.MacroDictionary[Ref]) + Value = self.ExpandMacros(Value) List = Name.split('_') if len(List) != 5: @@ -133,6 +129,18 @@ class ToolDefClassObject(object): elif List[Index] not in self.ToolsDefTxtDatabase[KeyList[Index]]: del self.ToolsDefTxtDictionary[Key] + def ExpandMacros(self, Value): + + MacroReference = gMacroRefPattern.findall(Value) + for Ref in MacroReference: + if Ref not in self.MacroDictionary: + EdkLogger.error("tools_def.txt parser", PARSER_ERROR, + "Macro [%s] has not been defined" % Ref, + File=FileName, Line=Index+1) + Value = Value.replace(Ref, self.MacroDictionary[Ref]) + + return Value + def ToolDefDict(WorkSpace): Target = TargetTxtClassObject() Target.LoadTargetTxtFile(WorkSpace + '\\Conf\\target.txt') -- 2.17.1