From d429fcd0d25936ff5861e9c6e37f7cf9285217b2 Mon Sep 17 00:00:00 2001 From: Yonghong Zhu Date: Fri, 15 Apr 2016 16:46:48 +0800 Subject: [PATCH] BaseTools: enhance error handling for DSC file Add logic for DSC file validation for Prebuild init. Add logic to detect error for DSC parser when '{' is missing. Cc: Liming Gao Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Yonghong Zhu Reviewed-by: Liming Gao --- BaseTools/Source/Python/Workspace/MetaFileParser.py | 2 ++ BaseTools/Source/Python/Workspace/WorkspaceDatabase.py | 7 +++---- BaseTools/Source/Python/build/build.py | 3 +++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/BaseTools/Source/Python/Workspace/MetaFileParser.py b/BaseTools/Source/Python/Workspace/MetaFileParser.py index 3b6a3c0dfa..2811fd1ba3 100644 --- a/BaseTools/Source/Python/Workspace/MetaFileParser.py +++ b/BaseTools/Source/Python/Workspace/MetaFileParser.py @@ -915,6 +915,8 @@ class DscParser(MetaFileParser): elif Line[0] == '!': 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) if self._InSubsection: SectionType = self._SubsectionType diff --git a/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py b/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py index 34bc48a0d3..6c548ac709 100644 --- a/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py +++ b/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py @@ -3012,10 +3012,9 @@ determine whether database file is out of date!\n") return PlatformList def _MapPlatform(self, Dscfile): - try: - Platform = self.BuildObject[PathClass(Dscfile), 'COMMON'] - except: - Platform = None + Platform = self.BuildObject[PathClass(Dscfile), 'COMMON'] + if Platform == None: + EdkLogger.error('build', PARSER_ERROR, "Failed to parser DSC file: %s" % Dscfile) return Platform PlatformList = property(_GetPlatformList) diff --git a/BaseTools/Source/Python/build/build.py b/BaseTools/Source/Python/build/build.py index 37ce8e16aa..07891dafdb 100644 --- a/BaseTools/Source/Python/build/build.py +++ b/BaseTools/Source/Python/build/build.py @@ -920,6 +920,9 @@ class Build(): def InitPreBuild(self): self.LoadConfiguration() + ErrorCode, ErrorInfo = self.PlatformFile.Validate(".dsc", False) + if ErrorCode != 0: + EdkLogger.error("build", ErrorCode, ExtraData=ErrorInfo) if self.BuildTargetList: GlobalData.gGlobalDefines['TARGET'] = self.BuildTargetList[0] if self.ArchList: -- 2.39.2