diff options
author | Yunhua Feng <yunhuax.feng@intel.com> | 2018-06-21 10:37:44 +0800 |
---|---|---|
committer | Yonghong Zhu <yonghong.zhu@intel.com> | 2018-06-29 15:21:01 +0800 |
commit | cd7bd491f3f9c43e4bb6c9516784ef3a09b6e337 (patch) | |
tree | a10c824896d4b5d4896a66152cf6999e65c1f45d | |
parent | 1e2bf55e0971187e006cfd224281b086810d6d8c (diff) | |
download | edk2-cd7bd491f3f9c43e4bb6c9516784ef3a09b6e337.tar.gz edk2-cd7bd491f3f9c43e4bb6c9516784ef3a09b6e337.tar.bz2 edk2-cd7bd491f3f9c43e4bb6c9516784ef3a09b6e337.zip |
BaseTools: Fix parsing multiple nest !include issue
Fix the bug !include file in Components subsection meet syntax error.
Case example:
DSC components:
!include Test1.txt
Test1.txt:
TestPkg/TestDriver.inf {
<PcdsFixedAtBuild>
PcdToken.PcdTest1 | "A"
!include Test2.txt
}
Test2.txt:
!include Test3.txt
Test3.txt:
PcdToken.PcdTest2 | "B"
Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Yunhua Feng <yunhuax.feng@intel.com>
Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
-rw-r--r-- | BaseTools/Source/Python/Workspace/MetaFileParser.py | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/BaseTools/Source/Python/Workspace/MetaFileParser.py b/BaseTools/Source/Python/Workspace/MetaFileParser.py index 8c860d594b..f089758fe6 100644 --- a/BaseTools/Source/Python/Workspace/MetaFileParser.py +++ b/BaseTools/Source/Python/Workspace/MetaFileParser.py @@ -944,7 +944,14 @@ class DscParser(MetaFileParser): self._SubsectionType = MODEL_META_DATA_SUBSECTION_HEADER
# directive line
elif Line[0] == '!':
- self._DirectiveParser()
+ TokenList = GetSplitValueList(Line, ' ', 1)
+ if TokenList[0] == TAB_INCLUDE:
+ for Arch, ModuleType, DefaultStore in self._Scope:
+ if self._SubsectionType != MODEL_UNKNOWN and Arch in OwnerId:
+ self._Owner[-1] = OwnerId[Arch]
+ self._DirectiveParser()
+ else:
+ self._DirectiveParser()
continue
if Line[0] == TAB_OPTION_START and not self._InSubsection:
EdkLogger.error("Parser", FILE_READ_FAILURE, "Missing the '{' before %s in Line %s" % (Line, Index+1), ExtraData=self.MetaFile)
@@ -965,7 +972,7 @@ class DscParser(MetaFileParser): #
for Arch, ModuleType, DefaultStore in self._Scope:
Owner = self._Owner[-1]
- if self._SubsectionType != MODEL_UNKNOWN:
+ if self._SubsectionType != MODEL_UNKNOWN and Arch in OwnerId:
Owner = OwnerId[Arch]
self._LastItem = self._Store(
self._ItemType,
@@ -1190,6 +1197,7 @@ class DscParser(MetaFileParser): if self._CurrentLine[-1] == '{':
self._ValueList[0] = self._CurrentLine[0:-1].strip()
self._InSubsection = True
+ self._SubsectionType = MODEL_UNKNOWN
else:
self._ValueList[0] = self._CurrentLine
@@ -1562,24 +1570,14 @@ class DscParser(MetaFileParser): # set the parser status with current status
Parser._SectionName = self._SectionName
- if self._InSubsection:
- Parser._SectionType = self._SubsectionType
- else:
- Parser._SectionType = self._SectionType
+ Parser._SubsectionType = self._SubsectionType
+ Parser._InSubsection = self._InSubsection
+ Parser._SectionType = self._SectionType
Parser._Scope = self._Scope
Parser._Enabled = self._Enabled
# Parse the included file
Parser.Start()
- # update current status with sub-parser's status
- self._SectionName = Parser._SectionName
- if not self._InSubsection:
- self._SectionType = Parser._SectionType
- self._SubsectionType = Parser._SubsectionType
- self._InSubsection = Parser._InSubsection
-
- self._Scope = Parser._Scope
- self._Enabled = Parser._Enabled
# Insert all records in the table for the included file into dsc file table
Records = IncludedFileTable.GetAll()
|