From: Yonghong Zhu Date: Fri, 15 Apr 2016 08:46:48 +0000 (+0800) Subject: BaseTools: enhance error handling for DSC file X-Git-Tag: edk2-stable201903~7289 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=d429fcd0d25936ff5861e9c6e37f7cf9285217b2 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 --- 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: