From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by mx.groups.io with SMTP id smtpd.web12.3434.1575363869844175584 for ; Tue, 03 Dec 2019 01:04:29 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.43, mailfrom: zhijux.fan@intel.com) X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 03 Dec 2019 01:04:29 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,272,1571727600"; d="dat'59?scan'59,208,59";a="200931465" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by orsmga007.jf.intel.com with ESMTP; 03 Dec 2019 01:04:28 -0800 Received: from fmsmsx111.amr.corp.intel.com (10.18.116.5) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 3 Dec 2019 01:04:27 -0800 Received: from shsmsx107.ccr.corp.intel.com (10.239.4.96) by fmsmsx111.amr.corp.intel.com (10.18.116.5) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 3 Dec 2019 01:04:26 -0800 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.19]) by SHSMSX107.ccr.corp.intel.com ([169.254.9.164]) with mapi id 14.03.0439.000; Tue, 3 Dec 2019 17:04:25 +0800 From: "Fan, ZhijuX" To: "devel@edk2.groups.io" CC: "Gao, Liming" , "Feng, Bob C" Subject: [PATCH] BaseTools:Enhance the way to handling included dsc file Thread-Topic: [PATCH] BaseTools:Enhance the way to handling included dsc file Thread-Index: AdWpuKZqHHRpiPmTQ1SghliWTUMOcQ== Date: Tue, 3 Dec 2019 09:04:25 +0000 Message-ID: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiNzg1ZWQ3OWItODE1OC00NGY2LWE3ZDktOGMwM2YwN2VkZWYzIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiQmtLNURiMXh5YTBSOVFUS05IaU5CMnQwSHEzQUFvcERYbGlUUWJvdTJIYytta210XC9yXC8zckhWajhBZ3J2SkxvIn0= dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: zhijux.fan@intel.com X-Groupsio-MsgNum: 51594 Content-Type: multipart/mixed; boundary="_000_FAD0D7E0AE0FA54D987F6E72435CAFD50AFEE88CSHSMSX101ccrcor_" Content-Language: en-US --_000_FAD0D7E0AE0FA54D987F6E72435CAFD50AFEE88CSHSMSX101ccrcor_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable BZ:https://bugzilla.tianocore.org/show_bug.cgi?id=3D2400 In Dsc Parser, included dsc file is parsed always no matter if its condition is False gUefiOvmfPkgTokenSpaceGuid.test1|FALSE !if gUefiOvmfPkgTokenSpaceGuid.test1 =3D=3D FALSE !include OvmfPkg/test1.dsc !else !include OvmfPkg/test2.dsc !endif In the above case, since the conditional result is FALSE, "test2.dsc" is not parsed. The patch avoids processing redundant dsc files and improves the way Tool handles them. Cc: Liming Gao Cc: Bob Feng Signed-off-by: Zhiju.Fan --- .../Source/Python/Workspace/MetaFileParser.py | 79 +++++++++++-------= ---- 1 file changed, 40 insertions(+), 39 deletions(-) diff --git a/BaseTools/Source/Python/Workspace/MetaFileParser.py b/BaseTool= s/Source/Python/Workspace/MetaFileParser.py index 8a665b118e..a3b6edbd15 100644 --- a/BaseTools/Source/Python/Workspace/MetaFileParser.py +++ b/BaseTools/Source/Python/Workspace/MetaFileParser.py @@ -1612,46 +1612,47 @@ class DscParser(MetaFileParser): # First search the include file under the same directory as DS= C file # IncludedFile1 =3D PathClass(IncludedFile, self.MetaFile.Dir) - ErrorCode, ErrorInfo1 =3D IncludedFile1.Validate() - if ErrorCode !=3D 0: - # - # Also search file under the WORKSPACE directory - # - IncludedFile1 =3D PathClass(IncludedFile, GlobalData.gWork= space) - ErrorCode, ErrorInfo2 =3D IncludedFile1.Validate() + if self._Enabled: + ErrorCode, ErrorInfo1 =3D IncludedFile1.Validate() if ErrorCode !=3D 0: - EdkLogger.error('parser', ErrorCode, File=3Dself._File= WithError, - Line=3Dself._LineIndex + 1, ExtraData= =3DErrorInfo1 + "\n" + ErrorInfo2) - - self._FileWithError =3D IncludedFile1 - - FromItem =3D self._Content[self._ContentIndex - 1][0] - if self._InSubsection: - Owner =3D self._Content[self._ContentIndex - 1][8] - else: - Owner =3D self._Content[self._ContentIndex - 1][0] - IncludedFileTable =3D MetaFileStorage(self._RawTable.DB, Inclu= dedFile1, MODEL_FILE_DSC, False, FromItem=3DFromItem) - Parser =3D DscParser(IncludedFile1, self._FileType, self._Arch= , IncludedFileTable, - Owner=3DOwner, From=3DFromItem) - - self.IncludedFiles.add (IncludedFile1) - - # set the parser status with current status - Parser._SectionName =3D self._SectionName - Parser._SubsectionType =3D self._SubsectionType - Parser._InSubsection =3D self._InSubsection - Parser._SectionType =3D self._SectionType - Parser._Scope =3D self._Scope - Parser._Enabled =3D self._Enabled - # Parse the included file - Parser.StartParse() - # Insert all records in the table for the included file into d= sc file table - Records =3D IncludedFileTable.GetAll() - if Records: - self._Content[self._ContentIndex:self._ContentIndex] =3D R= ecords - self._Content.pop(self._ContentIndex - 1) - self._ValueList =3D None - self._ContentIndex -=3D 1 + # + # Also search file under the WORKSPACE directory + # + IncludedFile1 =3D PathClass(IncludedFile, GlobalData.g= Workspace) + ErrorCode, ErrorInfo2 =3D IncludedFile1.Validate() + if ErrorCode !=3D 0: + EdkLogger.error('parser', ErrorCode, File=3Dself._= FileWithError, + Line=3Dself._LineIndex + 1, ExtraD= ata=3DErrorInfo1 + "\n" + ErrorInfo2) + + self._FileWithError =3D IncludedFile1 + + FromItem =3D self._Content[self._ContentIndex - 1][0] + if self._InSubsection: + Owner =3D self._Content[self._ContentIndex - 1][8] + else: + Owner =3D self._Content[self._ContentIndex - 1][0] + IncludedFileTable =3D MetaFileStorage(self._RawTable.DB, I= ncludedFile1, MODEL_FILE_DSC, False, FromItem=3DFromItem) + Parser =3D DscParser(IncludedFile1, self._FileType, self._= Arch, IncludedFileTable, + Owner=3DOwner, From=3DFromItem) + + self.IncludedFiles.add (IncludedFile1) + + # set the parser status with current status + Parser._SectionName =3D self._SectionName + Parser._SubsectionType =3D self._SubsectionType + Parser._InSubsection =3D self._InSubsection + Parser._SectionType =3D self._SectionType + Parser._Scope =3D self._Scope + Parser._Enabled =3D self._Enabled + # Parse the included file + Parser.StartParse() + # Insert all records in the table for the included file in= to dsc file table + Records =3D IncludedFileTable.GetAll() + if Records: + self._Content[self._ContentIndex:self._ContentIndex] = =3D Records + self._Content.pop(self._ContentIndex - 1) + self._ValueList =3D None + self._ContentIndex -=3D 1 =20 def __ProcessPackages(self): self._ValueList[0] =3D ReplaceMacro(self._ValueList[0], self._Macr= os) --=20 2.14.1.windows.1 --_000_FAD0D7E0AE0FA54D987F6E72435CAFD50AFEE88CSHSMSX101ccrcor_ Content-Disposition: attachment; filename="winmail.dat" Content-Transfer-Encoding: base64 Content-Type: application/ms-tnef; name="winmail.dat" eJ8+Iu9sAQaQCAAEAAAAAAABAAEAAQeQBgAIAAAA5AQAAAAAAADoAAEJgAEAIQAAAEM1NUUyMEY2 MzY5NzE1NEY5RUUxNDVFM0REOEQxOTc3ADoHAQ2ABAACAAAAAgACAAEFgAMADgAAAOMHDAADAAkA BAAZAAIAIQEBIIADAA4AAADjBwwAAwAJAAQAGQACACEBAQiABwAYAAAASVBNLk1pY3Jvc29mdCBN YWlsLk5vdGUAMQgBBIABAEAAAABbUEFUQ0hdIEJhc2VUb29sczpFbmhhbmNlIHRoZSB3YXkgdG8g aGFuZGxpbmcgaW5jbHVkZWQgZHNjIGZpbGUAfBYBC4ABACEAAABDNTVFMjBGNjM2OTcxNTRGOUVF MTQ1RTNERDhEMTk3NwA6BwEDkAYAlBgAADgAAAACAX8AAQAAAEgAAAA8RkFEMEQ3RTBBRTBGQTU0 RDk4N0Y2RTcyNDM1Q0FGRDUwQUZFRTg4Q0BTSFNNU1gxMDEuY2NyLmNvcnAuaW50ZWwuY29tPgAL AB8OAQAAAAIBCRABAAAAdwgAAHMIAADOGQAATFpGdUdFbfVhAApmYmlkBAAAY2PAcGcxMjUyAP4D Q/B0ZXh0AfcCpAPjAgAEY2gKwHNldDAg7wdtAoMAUBFNMgqABrQCgJZ9CoAIyDsJYjE5DsC/CcMW cgoyFnECgBViKgmwcwnwBJBhdAWyDlADYHOibwGAIEV4EcFuGDBdBlJ2BJAXtgIQcgDAdH0IUG4a MRAgBcAFoBtkZJogA1IgECIXslx2CJDkd2sLgGQ1HVME8AdADRdwMApxF/Jia21rBnMBkAAgIEJN X0LgRUdJTn0K/AHxC/ERH7BaOmgCQHBzOsAvL2J1Z3oDEAtgJC50BzBubwWhZS4BBbBnL3Nob3df QSJRLmNnaT8N0D2kMjQeoFxsC4BlCoGVJRRJA6BEBPAgUBHi6HIsIAuAYwpAAQAcYLpkJiFmAxAZ 4AQAIAqxxxIAHGAHQHdheQQgIxC+IBsRG6ElBQaQJsB0BCDfG+EN4CLgAiAn4kYHQBIAISUMICBn VQEQaU8Adm1mUGtnVG8KawnwUwqwY2VHdQcN0CLQB5B0MXxGQehMU0UlBSEqASyfLa34ID09KzAu uSxwL2Am5GogL/UvLkMuJ2Eu9mW3K2gyrzO0MjQrKpFmJQ9sdGgZ4AGgbxowG9Bh/xIAJrAAkCbg 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 AIBGAGEAbgAsACAAWgBoAGkAagB1AFgAAABTAE0AVABQAAAAegBoAGkAagB1AHgALgBmAGEAbgBA AGkAbgB0AGUAbAAuAGMAbwBtAAAAHwACXQEAAAAqAAAAegBoAGkAagB1AHgALgBmAGEAbgBAAGkA bgB0AGUAbAAuAGMAbwBtAAAAAAAfAOVfAQAAADIAAABzAGkAcAA6AHoAaABpAGoAdQB4AC4AZgBh AG4AQABpAG4AdABlAGwALgBjAG8AbQAAAAAAHwAaDAEAAAAYAAAARgBhAG4ALAAgAFoAaABpAGoA dQBYAAAAHwAfDAEAAAAqAAAAegBoAGkAagB1AHgALgBmAGEAbgBAAGkAbgB0AGUAbAAuAGMAbwBt AAAAAAAfAB4MAQAAAAoAAABTAE0AVABQAAAAAAACARkMAQAAAGQAAAAAAAAAgSsfpL6jEBmdbgDd AQ9UAgAAAIBGAGEAbgAsACAAWgBoAGkAagB1AFgAAABTAE0AVABQAAAAegBoAGkAagB1AHgALgBm AGEAbgBAAGkAbgB0AGUAbAAuAGMAbwBtAAAAHwABXQEAAAAqAAAAegBoAGkAagB1AHgALgBmAGEA bgBAAGkAbgB0AGUAbAAuAGMAbwBtAAAAAAAfAPg/AQAAABgAAABGAGEAbgAsACAAWgBoAGkAagB1 AFgAAAAfACNAAQAAACoAAAB6AGgAaQBqAHUAeAAuAGYAYQBuAEAAaQBuAHQAZQBsAC4AYwBvAG0A AAAAAB8AIkABAAAACgAAAFMATQBUAFAAAAAAAAIB+T8BAAAAZAAAAAAAAACBKx+kvqMQGZ1uAN0B D1QCAAAAgEYAYQBuACwAIABaAGgAaQBqAHUAWAAAAFMATQBUAFAAAAB6AGgAaQBqAHUAeAAuAGYA YQBuAEAAaQBuAHQAZQBsAC4AYwBvAG0AAAAfAAldAQAAACoAAAB6AGgAaQBqAHUAeAAuAGYAYQBu AEAAaQBuAHQAZQBsAC4AYwBvAG0AAAAAAAsAQDoBAAAAHwAaAAEAAAASAAAASQBQAE0ALgBOAG8A dABlAAAAAAADAPE/CQQAAAsAQDoBAAAAAwD9P+QEAAACAQswAQAAABAAAADFXiD2NpcVT57hRePd jRl3AwAXAAEAAABAADkAgLLlqLip1QFAAAgwRADmqLip1QEfAACAhgMCAAAAAADAAAAAAAAARgEA AAAeAAAAYQBjAGMAZQBwAHQAbABhAG4AZwB1AGEAZwBlAAAAAAABAAAADAAAAGUAbgAtAFUAUwAA AB8ANwABAAAAgAAAAFsAUABBAFQAQwBIAF0AIABCAGEAcwBlAFQAbwBvAGwAcwA6AEUAbgBoAGEA bgBjAGUAIAB0AGgAZQAgAHcAYQB5ACAAdABvACAAaABhAG4AZABsAGkAbgBnACAAaQBuAGMAbAB1 AGQAZQBkACAAZABzAGMAIABmAGkAbABlAAAAHwA9AAEAAAACAAAAAAAAAAMANgAAAAAAAgFxAAEA AAAWAAAAAdWpuKZqHHRpiPmTQ1SghliWTUMOcQAAHwBwAAEAAACAAAAAWwBQAEEAVABDAEgAXQAg AEIAYQBzAGUAVABvAG8AbABzADoARQBuAGgAYQBuAGMAZQAgAHQAaABlACAAdwBhAHkAIAB0AG8A IABoAGEAbgBkAGwAaQBuAGcAIABpAG4AYwBsAHUAZABlAGQAIABkAHMAYwAgAGYAaQBsAGUAAAAf ADUQAQAAAJAAAAA8AEYAQQBEADAARAA3AEUAMABBAEUAMABGAEEANQA0AEQAOQA4ADcARgA2AEUA NwAyADQAMwA1AEMAQQBGAEQANQAwAEEARgBFAEUAOAA4AEMAQABTAEgAUwBNAFMAWAAxADAAMQAu AGMAYwByAC4AYwBvAHIAcAAuAGkAbgB0AGUAbAAuAGMAbwBtAD4AAAADAN4/n04AAEAABzCAPeGo uKnVAQIBCwABAAAAEAAAAMVeIPY2lxVPnuFF492NGXcDACYAAAAAAAIBRwABAAAAMgAAAGM9VVM7 YT1NQ0k7cD1JbnRlbDtsPVNIU01TWDEwMS0xOTEyMDMwOTA0MjVaLTIxNTIAAAACARAwAQAAAEYA AAAAAAAAJne9OTvsOEmkphU9y6V7QgcA+tDX4K4PpU2Yf25yQ1yv1QAAAEQRXgAAppNoNoh2bEun StPrR5pMZAAACVTARQAAAAAfAPo/AQAAABgAAABGAGEAbgAsACAAWgBoAGkAagB1AFgAAAADAAlZ AQAAAEAAAIAIIAYAAAAAAMAAAAAAAABGAAAAAL+FAAAAsdKmuKnVAQsAAIAIIAYAAAAAAMAAAAAA AABGAAAAAIKFAAAAAAAAAgEAgAggBgAAAAAAwAAAAAAAAEYAAAAAQIUAAAEAAACCAQAAAwEBAAAA QQAAAAgAAAAAABEAQwBUAFAAQwBsAGEAcwBzAGkAZgBpAGMAYQB0AGkAbwBuABFDVFBDbGFzc2lm aWNhdGlvbgAAAAAAAAAAIwAAABFDAFQAUABDAGwAYQBzAHMAaQBmAGkAYwBhAHQAaQBvAG4AAAAA AEEAAAAIAAAAAAAWAFQAaQB0AHUAcwBDAFQAUABDAGwAYQBzAHMAaQBmAGkAYwBhAHQAaQBvAG4A FlRpdHVzQ1RQQ2xhc3NpZmljYXRpb24AAAAAAAAAAC0AAAAWVABpAHQAdQBzAEMAVABQAEMAbABh AHMAcwBpAGYAaQBjAGEAdABpAG8AbgAAAAAAQQAAAAgAAAAAABMAWAAtAFQASQBUAFUAUwAtAE0A ZQB0AGEAZABhAHQAYQAtADQAMAATWC1USVRVUy1NZXRhZGF0YS00MAAAAAAAAAAAJwAAABNYAC0A VABJAFQAVQBTAC0ATQBlAHQAYQBkAGEAdABhAC0ANAAwAAAAAAAAAB8AAIApAwIAAAAAAMAAAAAA AABGAQAAACQAAABDAFQAUABDAGwAYQBzAHMAaQBmAGkAYwBhAHQAaQBvAG4AAAABAAAADgAAAEMA VABQAF8ATgBUAAAAAAAfAACAhgMCAAAAAADAAAAAAAAARgEAAAAoAAAAeAAtAGMAdABwAGMAbABh AHMAcwBpAGYAaQBjAGEAdABpAG8AbgAAAAEAAAAOAAAAQwBUAFAAXwBOAFQAAAAAAB8AAICGAwIA AAAAAMAAAAAAAABGAQAAACgAAAB4AC0AdABpAHQAdQBzAC0AbQBlAHQAYQBkAGEAdABhAC0ANAAw AAAAAQAAAFoDAABlAHkASgBEAFkAWABSAGwAWgAyADkAeQBlAFUAeABoAFkAbQBWAHMAYwB5AEkA NgBJAGkASQBzAEkAawAxAGwAZABHAEYAawBZAFgAUgBoAEkAagBwADcASQBtADUAegBJAGoAbwBp AGEASABSADAAYwBEAHAAYwBMADEAdwB2AGQAMwBkADMATABuAFIAcABkAEgAVgB6AEwAbQBOAHYA YgBWAHcAdgBiAG4ATgBjAEwAMABsAHUAZABHAFYAcwBNAHkASQBzAEkAbQBsAGsASQBqAG8AaQBO AHoAZwAxAFoAVwBRADMATwBXAEkAdABPAEQARQAxAE8AQwAwADAATgBHAFkAMgBMAFcARQAzAFoA RABrAHQATwBHAE0AdwBNADIAWQB3AE4AMgBWAGsAWgBXAFkAegBJAGkAdwBpAGMASABKAHYAYwBI AE0AaQBPAGwAdAA3AEkAbQA0AGkATwBpAEoARABWAEYAQgBEAGIARwBGAHoAYwAyAGwAbQBhAFcA TgBoAGQARwBsAHYAYgBpAEkAcwBJAG4AWgBoAGIASABNAGkATwBsAHQANwBJAG4AWgBoAGIASABW AGwASQBqAG8AaQBRADEAUgBRAFgAMAA1AFUASQBuADEAZABmAFYAMQA5AEwAQwBKAFQAZABXAEoA cQBaAFcATgAwAFQARwBGAGkAWgBXAHgAegBJAGoAcABiAFgAUwB3AGkAVgBFADEARABWAG0AVgB5 AGMAMgBsAHYAYgBpAEkANgBJAGoARQAzAEwAagBFAHcATABqAEUANABNAEQAUQB1AE4ARABrAGkA TABDAEoAVQBjAG4AVgB6AGQARwBWAGsAVABHAEYAaQBaAFcAeABJAFkAWABOAG8ASQBqAG8AaQBR AG0AdABMAE4AVQBSAGkATQBYAGgANQBZAFQAQgBTAE8AVgBGAFUAUwAwADUASQBhAFUANQBDAE0A bgBRAHcAUwBIAEUAegBRAFUARgB2AGMARQBSAFkAYgBHAGwAVQBVAFcASgB2AGQAVABKAEkAWQB5 AHQAdABhADIAMQAwAFgAQwA5AHkAWABDADgAegBjAGsAaABXAGEAagBoAEIAWgAzAEoAMgBTAGsA eAB2AEkAbgAwAD0AAAAAAB8AAICGAwIAAAAAAMAAAAAAAABGAQAAABgAAABkAGwAcAAtAHAAcgBv AGQAdQBjAHQAAAABAAAAGgAAAGQAbABwAGUALQB3AGkAbgBkAG8AdwBzAAAAAAAfAACAhgMCAAAA AADAAAAAAAAARgEAAAAYAAAAZABsAHAALQB2AGUAcgBzAGkAbwBuAAAAAQAAABIAAAAxADEALgAy AC4AMAAuADYAAAAAAB8AAICGAwIAAAAAAMAAAAAAAABGAQAAABoAAABkAGwAcAAtAHIAZQBhAGMA dABpAG8AbgAAAAAAAQAAABQAAABuAG8ALQBhAGMAdABpAG8AbgAAAAIBAIAIIAYAAAAAAMAAAAAA AABGAQAAADYAAABJAG4AVAByAGEAbgBzAGkAdABNAGUAcwBzAGEAZwBlAEMAbwByAHIAZQBsAGEA dABvAHIAAAAAAAEAAAAQAAAAEd6EaOk1aEqbSG+9UhpAeQMADTT9PwAAHwAAgIYDAgAAAAAAwAAA AAAAAEYBAAAAIAAAAHgALQBtAHMALQBoAGEAcwAtAGEAdAB0AGEAYwBoAAAAAQAAAAIAAAAAAAAA HwAAgIYDAgAAAAAAwAAAAAAAAEYBAAAAIgAAAHgALQBvAHIAaQBnAGkAbgBhAHQAaQBuAGcALQBp AHAAAAAAAAEAAAAgAAAAWwAxADAALgAyADMAOQAuADEAMgA3AC4ANAAwAF0AAAAaFQ== --_000_FAD0D7E0AE0FA54D987F6E72435CAFD50AFEE88CSHSMSX101ccrcor_--