From nobody Sun Sep 7 12:38:58 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1526321403089255.18128590296863; Mon, 14 May 2018 11:10:03 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 0A5382096967F; Mon, 14 May 2018 11:09:30 -0700 (PDT) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 592A621CB74A7 for ; Mon, 14 May 2018 11:09:25 -0700 (PDT) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 May 2018 11:09:24 -0700 Received: from jcarsey-desk1.amr.corp.intel.com ([10.7.159.144]) by orsmga001.jf.intel.com with ESMTP; 14 May 2018 11:09:24 -0700 X-Original-To: edk2-devel@lists.01.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.100; helo=mga07.intel.com; envelope-from=jaben.carsey@intel.com; receiver=edk2-devel@lists.01.org X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,401,1520924400"; d="scan'208";a="55814283" From: Jaben Carsey To: edk2-devel@lists.01.org Date: Mon, 14 May 2018 11:09:18 -0700 Message-Id: X-Mailer: git-send-email 2.16.2.windows.1 In-Reply-To: References: In-Reply-To: References: Subject: [edk2] [PATCH v1 09/11] BaseTools: refactor to stop re-allocating strings X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Liming Gao MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" strings are immutable. allocate minimal duplication. Cc: Liming Gao Cc: Yonghong Zhu Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Jaben Carsey --- BaseTools/Source/Python/AutoGen/AutoGen.py | 94 ++++++++++= +--------- BaseTools/Source/Python/AutoGen/GenC.py | 2 +- BaseTools/Source/Python/AutoGen/GenDepex.py | 15 ++-- BaseTools/Source/Python/AutoGen/GenMake.py | 6 +- BaseTools/Source/Python/AutoGen/GenVar.py | 2 +- BaseTools/Source/Python/AutoGen/IdfClassObject.py | 2 +- BaseTools/Source/Python/AutoGen/StrGather.py | 4 +- BaseTools/Source/Python/AutoGen/UniClassObject.py | 3 +- BaseTools/Source/Python/AutoGen/ValidCheckingInfoObject.py | 17 ++-- BaseTools/Source/Python/Common/Expression.py | 42 +++++---- BaseTools/Source/Python/Common/Misc.py | 8 +- BaseTools/Source/Python/Common/String.py | 2 +- BaseTools/Source/Python/CommonDataClass/CommonClass.py | 29 +++--- BaseTools/Source/Python/GenFds/Capsule.py | 19 ++-- BaseTools/Source/Python/GenFds/FdfParser.py | 8 +- BaseTools/Source/Python/GenFds/FfsInfStatement.py | 8 +- BaseTools/Source/Python/GenFds/Fv.py | 72 +++++-----= ----- BaseTools/Source/Python/GenFds/GenFds.py | 4 +- BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py | 24 ++--- BaseTools/Source/Python/GenFds/OptionRom.py | 2 - BaseTools/Source/Python/GenFds/Vtf.py | 76 +++++-----= ------ BaseTools/Source/Python/Table/TableDataModel.py | 11 +-- BaseTools/Source/Python/Workspace/DscBuildData.py | 14 +-- BaseTools/Source/Python/Workspace/InfBuildData.py | 4 +- BaseTools/Source/Python/Workspace/MetaDataTable.py | 10 +-- BaseTools/Source/Python/Workspace/MetaFileParser.py | 4 +- 26 files changed, 196 insertions(+), 286 deletions(-) diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py b/BaseTools/Source/= Python/AutoGen/AutoGen.py index 599331060187..4ccb50a0a0af 100644 --- a/BaseTools/Source/Python/AutoGen/AutoGen.py +++ b/BaseTools/Source/Python/AutoGen/AutoGen.py @@ -815,42 +815,46 @@ class WorkspaceAutoGen(AutoGen): _PcdName =3D FfsFile.NameGuid.lstrip("PCD(").rstri= p(")") PcdFoundFlag =3D False for Pa in self.AutoGenObjectList: - if not PcdFoundFlag: - for PcdItem in Pa.AllPcdList: - if (PcdItem.TokenSpaceGuidCName + "." = + PcdItem.TokenCName) =3D=3D _PcdName: + # + # once found, get out of the loop + # + if PcdFoundFlag: + break + for PcdItem in Pa.AllPcdList: + if "{TSG}.{CN}".format(TSG=3DPcdItem.Token= SpaceGuidCName, CN=3DPcdItem.TokenCName) =3D=3D _PcdName: + # + # First convert from CFormatGuid to GU= ID string + # + _PcdGuidString =3D GuidStructureString= ToGuidString(PcdItem.DefaultValue) + + if not _PcdGuidString: # - # First convert from CFormatGuid t= o GUID string + # Then try Byte array. # - _PcdGuidString =3D GuidStructureSt= ringToGuidString(PcdItem.DefaultValue) - - if not _PcdGuidString: - # - # Then try Byte array. - # - _PcdGuidString =3D GuidStructu= reByteArrayToGuidString(PcdItem.DefaultValue) + _PcdGuidString =3D GuidStructureBy= teArrayToGuidString(PcdItem.DefaultValue) =20 - if not _PcdGuidString: - # - # Not Byte array or CFormat GU= ID, raise error. - # - EdkLogger.error("build", - FORMAT_INVALID, - "The format of= PCD value is incorrect. PCD: %s , Value: %s\n" % (_PcdName, PcdItem.Defaul= tValue), - ExtraData=3Dse= lf.FdfFile) + if not _PcdGuidString: + # + # Not Byte array or CFormat GUID, = raise error. + # + EdkLogger.error("build", + FORMAT_INVALID, + "The format of PCD= value is incorrect. PCD: %s , Value: %s\n" % (_PcdName, PcdItem.DefaultVal= ue), + ExtraData=3Dself.F= dfFile) =20 - if _PcdGuidString.upper() not in _= GuidDict: - _GuidDict[_PcdGuidString.upper= ()] =3D FfsFile - PcdFoundFlag =3D True - break - else: - EdkLogger.error("build", - FORMAT_INVALID, - "Duplicate GUI= D found for these lines: Line %d: %s and Line %d: %s. GUID: %s" % (FfsFile.= CurrentLineNum, - = FfsFile.Cu= rrentLineContent, - = _GuidDict[= _PcdGuidString.upper()].CurrentLineNum, - = _GuidDict[= _PcdGuidString.upper()].CurrentLineContent, - = FfsFile.Na= meGuid.upper()), - ExtraData=3Dse= lf.FdfFile) + if _PcdGuidString.upper() not in _Guid= Dict: + _GuidDict[_PcdGuidString.upper()] = =3D FfsFile + PcdFoundFlag =3D True + break + else: + EdkLogger.error("build", + FORMAT_INVALID, + "Duplicate GUID fo= und for these lines: Line %d: %s and Line %d: %s. GUID: %s" % (FfsFile.Curr= entLineNum, + = FfsFile.Curren= tLineContent, + = _GuidDict[_Pcd= GuidString.upper()].CurrentLineNum, + = _GuidDict[_Pcd= GuidString.upper()].CurrentLineContent, + = FfsFile.NameGu= id.upper()), + ExtraData=3Dself.F= dfFile) =20 if FfsFile.NameGuid.upper() not in _GuidDict: _GuidDict[FfsFile.NameGuid.upper()] =3D FfsFile @@ -1832,13 +1836,13 @@ class PlatformAutoGen(AutoGen): if os.path.isabs(self.OutputDir): self._BuildDir =3D path.join( path.abspath(self.OutputDir), - self.BuildTarget + "_" + self.= ToolChain, + "{BT}_{TC}".format(BT=3Dself.B= uildTarget, TC=3Dself.ToolChain), ) else: self._BuildDir =3D path.join( self.WorkspaceDir, self.OutputDir, - self.BuildTarget + "_" + self.= ToolChain, + "{BT}_{TC}".format(BT=3Dself.B= uildTarget, TC=3Dself.ToolChain), ) GlobalData.gBuildDirectory =3D self._BuildDir return self._BuildDir @@ -1916,7 +1920,7 @@ class PlatformAutoGen(AutoGen): Value =3D self.BuildOption[Tool][Attr][1:] else: if Attr !=3D 'PATH': - Value +=3D " " + self.BuildOption[Tool][At= tr] + Value =3D "{Val} {At}".format(Val=3DValue,= At=3Dself.BuildOption[Tool][Attr]) else: Value =3D self.BuildOption[Tool][Attr] =20 @@ -1934,8 +1938,10 @@ class PlatformAutoGen(AutoGen): ToolsDef +=3D "\n" =20 SaveFileOnChange(self.ToolDefinitionFile, ToolsDef) - for DllPath in DllPathList: - os.environ["PATH"] =3D DllPath + os.pathsep + os.environ["= PATH"] + os.environ["PATH"]=3D'{new}{sep}{start}'.format( + new=3Dos.pathsep.join(DllPathList), + sep=3Dos.pathsep, + start=3Dos.environ["PATH"]) os.environ["MAKE_FLAGS"] =3D MakeFlags =20 return self._ToolDefinitions @@ -1943,7 +1949,7 @@ class PlatformAutoGen(AutoGen): ## Return the paths of tools def _GetToolDefFile(self): if self._ToolDefFile is None: - self._ToolDefFile =3D os.path.join(self.MakeFileDir, "TOOLS_DE= F." + self.Arch) + self._ToolDefFile =3D os.path.join(self.MakeFileDir, "TOOLS_DE= F.{ARCH}".format(ARCH=3Dself.Arch)) return self._ToolDefFile =20 ## Retrieve the toolchain family of given toolchain tag. Default to 'M= SFT'. @@ -2215,7 +2221,7 @@ class PlatformAutoGen(AutoGen): =20 LibraryInstance[LibraryClassName] =3D LibraryModule LibraryConsumerList.append(LibraryModule) - EdkLogger.verbose("\t" + str(LibraryClassName) + " : "= + str(LibraryModule)) + EdkLogger.verbose("\t{LCN}:{LM}".format(LCN=3Dstr(Libr= aryClassName), LM=3Dstr(LibraryModule))) else: LibraryModule =3D LibraryInstance[LibraryClassName] =20 @@ -2295,7 +2301,7 @@ class PlatformAutoGen(AutoGen): # for Item in LibraryList: if ConsumedByList[Item] !=3D [] and Item in Constructor and le= n(Constructor) > 1: - ErrorMessage =3D "\tconsumed by " + "\n\tconsumed by ".joi= n(str(L) for L in ConsumedByList[Item]) + ErrorMessage =3D "\tconsumed by {LIST}".format(LIST=3D"\n\= tconsumed by ".join(str(L) for L in ConsumedByList[Item])) EdkLogger.error("build", BUILD_ERROR, 'Library [%s] with c= onstructors has a cycle' % str(Item), ExtraData=3DErrorMessage, File=3Dself.Meta= File) if Item not in SortedLibraryList: @@ -2491,7 +2497,7 @@ class PlatformAutoGen(AutoGen): if Library not in LibraryList: LibraryList.append(Library) LibraryConsumerList.append(Library) - EdkLogger.verbose("\t" + LibraryName + " : " + str(Lib= rary) + ' ' + str(type(Library))) + EdkLogger.verbose("\t{LN}:{LIB} {TYPE}".format(LN=3DLi= braryName, LIB=3Dstr(Library), TYPE=3Dstr(type(Library)))) return LibraryList =20 ## Calculate the priority value of the build option @@ -2604,7 +2610,7 @@ class PlatformAutoGen(AutoGen): else: # append options for the same tool except PATH if Attr !=3D 'PATH': - BuildOptions[Tool][Attr] +=3D " " + Option= s[Key] + BuildOptions[Tool][Attr] =3D "{ORIG} {NEW}= ".format(ORIG=3DBuildOptions[Tool][Attr], NEW=3DOptions[Key]) else: BuildOptions[Tool][Attr] =3D Options[Key] # Build Option Family has been checked, which need't to be checked= again for family. @@ -2639,7 +2645,7 @@ class PlatformAutoGen(AutoGen): else: # append options for the same tool except PATH if Attr !=3D 'PATH': - BuildOptions[Tool][Attr] +=3D " " + Option= s[Key] + BuildOptions[Tool][Attr] =3D "{ORIG} {NEW}= ".format(ORIG=3DBuildOptions[Tool][Attr], NEW=3DOptions[Key]) else: BuildOptions[Tool][Attr] =3D Options[Key] return BuildOptions @@ -2693,7 +2699,7 @@ class PlatformAutoGen(AutoGen): BuildOptions[Tool][Attr] =3D mws.handleWsMacro(Val= ue[1:]) else: if Attr !=3D 'PATH': - BuildOptions[Tool][Attr] +=3D " " + mws.handle= WsMacro(Value) + BuildOptions[Tool][Attr] =3D "{ORIG} {NEW}".fo= rmat(ORIG=3DBuildOptions[Tool][Attr], NEW=3Dmws.handleWsMacro(Value)) else: BuildOptions[Tool][Attr] =3D mws.handleWsMacro= (Value) =20 diff --git a/BaseTools/Source/Python/AutoGen/GenC.py b/BaseTools/Source/Pyt= hon/AutoGen/GenC.py index 46c7c1c1390b..e73d83395255 100644 --- a/BaseTools/Source/Python/AutoGen/GenC.py +++ b/BaseTools/Source/Python/AutoGen/GenC.py @@ -917,7 +917,7 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd): TokenNumber =3D PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceG= uidCName] AutoGenH.Append('\n#define %s %dU\n' % (PcdTokenName, TokenNumber= )) =20 - EdkLogger.debug(EdkLogger.DEBUG_3, "Creating code for " + TokenCName += "." + Pcd.TokenSpaceGuidCName) + EdkLogger.debug(EdkLogger.DEBUG_3, "Creating code for {TCN}.{CN}".form= at(TCN=3DTokenCName, CN=3DPcd.TokenSpaceGuidCName)) if Pcd.Type not in gItemTypeStringDatabase: EdkLogger.error("build", AUTOGEN_ERROR, "Unknown PCD type [%s] of PCD %s.%s" % (Pcd.Type, = Pcd.TokenSpaceGuidCName, TokenCName), diff --git a/BaseTools/Source/Python/AutoGen/GenDepex.py b/BaseTools/Source= /Python/AutoGen/GenDepex.py index ed5df2b75440..873ed6e59300 100644 --- a/BaseTools/Source/Python/AutoGen/GenDepex.py +++ b/BaseTools/Source/Python/AutoGen/GenDepex.py @@ -156,19 +156,16 @@ class DependencyExpression: EdkLogger.debug(EdkLogger.DEBUG_8, repr(self)) if Optimize: self.Optimize() - EdkLogger.debug(EdkLogger.DEBUG_8, "\n Optimized: " + repr(= self)) + EdkLogger.debug(EdkLogger.DEBUG_8, "\n Optimized: {ME}".for= mat(ME=3Drepr(self))) =20 def __str__(self): return " ".join(self.TokenList) =20 def __repr__(self): - WellForm =3D '' - for Token in self.PostfixNotation: - if Token in self.SupportedOpcode: - WellForm +=3D "\n " + Token - else: - WellForm +=3D ' ' + Token - return WellForm + return ''.join("{sep}{tok}".format( + tok=3DToken, + sep=3D"\n " if Token in DependencyExpression.SupportedO= pcode else ' ') + for Token in self.PostfixNotation) =20 ## Split the expression string into token list def GetExpressionTokenList(self): @@ -359,11 +356,9 @@ class DependencyExpression: else: Buffer.write(self.GetGuidValue(Item)) =20 - FilePath =3D "" FileChangeFlag =3D True if File is None: sys.stdout.write(Buffer.getvalue()) - FilePath =3D "STDOUT" else: FileChangeFlag =3D SaveFileOnChange(File, Buffer.getvalue(), T= rue) =20 diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py b/BaseTools/Source/= Python/AutoGen/GenMake.py index 30280d449f62..4ae977ccd400 100644 --- a/BaseTools/Source/Python/AutoGen/GenMake.py +++ b/BaseTools/Source/Python/AutoGen/GenMake.py @@ -1029,7 +1029,7 @@ cleanlib: with open(F.Path, 'r') as f: FileContent =3D f.read() except BaseException, X: - EdkLogger.error("build", FILE_OPEN_FAILURE, ExtraData= =3DF.Path + "\n\t" + str(X)) + EdkLogger.error("build", FILE_OPEN_FAILURE, ExtraData= =3D"{PATH}\n\t{VAL}".format(PATH=3DF.Path, VAL=3Dstr(X))) =20 if len(FileContent) =3D=3D 0: continue @@ -1552,9 +1552,9 @@ class TopLevelMakefile(BuildFile): else: pcdname =3D '.'.join(pcd[0:2]) if pcd[3].startswith('{'): - ExtraOption +=3D " --pcd " + pcdname + '=3D' + 'H' + '"' += pcd[3] + '"' + ExtraOption =3D '{ORIG} --pcd {NAME}=3DH"{VAL}"'.format(NA= ME=3Dpcdname, VAL=3Dpcd[3], ORIG=3DExtraOption) else: - ExtraOption +=3D " --pcd " + pcdname + '=3D' + pcd[3] + ExtraOption =3D "{ORIG} --pcd {NAME}=3D{VAL}".format(NAME= =3Dpcdname, VAL=3Dpcd[3], ORIG=3DExtraOption) =20 MakefileName =3D self._FILE_NAME_[self._FileType] SubBuildCommandList =3D [] diff --git a/BaseTools/Source/Python/AutoGen/GenVar.py b/BaseTools/Source/P= ython/AutoGen/GenVar.py index 2eab278d6876..35f022ac2e19 100644 --- a/BaseTools/Source/Python/AutoGen/GenVar.py +++ b/BaseTools/Source/Python/AutoGen/GenVar.py @@ -78,7 +78,7 @@ class VariableMgr(object): value_list +=3D [hex(unpack("B",data_byte)[0])] newvalue[int(item.var_offset,16) if item.var_offset.upper(= ).startswith("0X") else int(item.var_offset)] =3D value_list try: - newvaluestr =3D "{" + ",".join(VariableMgr.assemble_variab= le(newvalue)) +"}" + newvaluestr =3D '{{{mid}}}'.format(mid=3D",".join(Variable= Mgr.assemble_variable(newvalue))) except: EdkLogger.error("build", AUTOGEN_ERROR, "Variable offset c= onflict in PCDs: %s \n" % (" and ".join(item.pcdname for item in sku_var_in= fo_offset_list))) n =3D sku_var_info_offset_list[0] diff --git a/BaseTools/Source/Python/AutoGen/IdfClassObject.py b/BaseTools/= Source/Python/AutoGen/IdfClassObject.py index 8b84806f9f36..8a1f51daf435 100644 --- a/BaseTools/Source/Python/AutoGen/IdfClassObject.py +++ b/BaseTools/Source/Python/AutoGen/IdfClassObject.py @@ -121,7 +121,7 @@ def SearchImageID(ImageFileObject, FileList): for Line in f: ImageIdList =3D IMAGE_TOKEN.findall(Line) for ID in ImageIdList: - EdkLogger.debug(EdkLogger.DEBUG_5, "Found ImageID = identifier: " + ID) + EdkLogger.debug(EdkLogger.DEBUG_5, "Found ImageID = identifier: {id}".format(id=3DID)) ImageFileObject.SetImageIDReferenced(ID) =20 class ImageFileObject(object): diff --git a/BaseTools/Source/Python/AutoGen/StrGather.py b/BaseTools/Sourc= e/Python/AutoGen/StrGather.py index c0a39e4a12f1..bc5a23e9d920 100644 --- a/BaseTools/Source/Python/AutoGen/StrGather.py +++ b/BaseTools/Source/Python/AutoGen/StrGather.py @@ -110,7 +110,7 @@ def DecToHexStr(Dec, Digit =3D 8): # def DecToHexList(Dec, Digit =3D 8): Hex =3D '{0:0{1}X}'.format(Dec,Digit) - return ["0x" + Hex[Bit:Bit + 2] for Bit in range(Digit - 2, -1, -2)] + return ["0x{HEX}".format(HEX=3DHex[Bit:Bit + 2]) for Bit in range(Digi= t - 2, -1, -2)] =20 ## Convert a acsii string to a hex list # @@ -532,7 +532,7 @@ def SearchString(UniObjectClass, FileList, IsCompatible= Mode): with open(File, 'r') as f: for Line in f: for StrName in STRING_TOKEN.findall(Line): - EdkLogger.debug(EdkLogger.DEBUG_5, "Found string i= dentifier: " + StrName) + EdkLogger.debug(EdkLogger.DEBUG_5, "Found string i= dentifier: {NAME}".format(NAME=3DStrName)) UniObjectClass.SetStringReferenced(StrName) =20 UniObjectClass.ReToken() diff --git a/BaseTools/Source/Python/AutoGen/UniClassObject.py b/BaseTools/= Source/Python/AutoGen/UniClassObject.py index bb37fbfd6a0c..73ca5b54778f 100644 --- a/BaseTools/Source/Python/AutoGen/UniClassObject.py +++ b/BaseTools/Source/Python/AutoGen/UniClassObject.py @@ -161,8 +161,7 @@ class Ucs2Codec(codecs.Codec): for Char in input: CodePoint =3D ord(Char) if CodePoint >=3D 0xd800 and CodePoint <=3D 0xdfff: - raise ValueError("Code Point is in range reserved for " + - "UTF-16 surrogate pairs") + raise ValueError("Code Point is in range reserved for UTF-= 16 surrogate pairs") elif CodePoint > 0xffff: raise ValueError("Code Point too large to encode in UCS-2") return self.__utf16.encode(input) diff --git a/BaseTools/Source/Python/AutoGen/ValidCheckingInfoObject.py b/B= aseTools/Source/Python/AutoGen/ValidCheckingInfoObject.py index 2c6bb8e396a9..b2a9bb1134ed 100644 --- a/BaseTools/Source/Python/AutoGen/ValidCheckingInfoObject.py +++ b/BaseTools/Source/Python/AutoGen/ValidCheckingInfoObject.py @@ -186,7 +186,7 @@ class VAR_CHECK_PCD_VARIABLE_TAB(object): self.Type =3D 0 self.Reserved =3D 0 self.Attributes =3D 0x00000000 - self.Guid =3D eval("[" + TokenSpaceGuid.replace("{", "").replace("= }", "") + "]") + self.Guid =3D eval("[{GUID}]".format(GUID=3DTokenSpaceGuid.replace= ("{", "").replace("}", ""))) self.Name =3D PcdCName self.validtab =3D [] =20 @@ -258,7 +258,6 @@ class VAR_CHECK_PCD_VALID_LIST(VAR_CHECK_PCD_VALID_OBJ): else: self.data.add(int(valid_num)) =20 - =20 self.Length =3D 5 + len(self.data) * self.StorageWidth =20 =20 @@ -266,13 +265,10 @@ class VAR_CHECK_PCD_VALID_RANGE(VAR_CHECK_PCD_VALID_O= BJ): def __init__(self, VarOffset, validrange, PcdDataType): super(VAR_CHECK_PCD_VALID_RANGE, self).__init__(VarOffset, validra= nge, PcdDataType) self.Type =3D 2 - RangeExpr =3D "" - i =3D 0 - for item in self.rawdata: - if i =3D=3D 0: - RangeExpr =3D "( " + item + " )" - else: - RangeExpr =3D RangeExpr + "OR ( " + item + " )" + if self.rawdata: + RangeExpr =3D "( {ITEM} )".format(ITEM=3Dself.rawdata[-1]) + else: + RangeExpr =3D "" range_result =3D RangeExpression(RangeExpr, self.PcdDataType)(True) for rangelist in range_result: for obj in rangelist.pop(): @@ -285,5 +281,4 @@ def GetValidationObject(PcdClass, VarOffset): return VAR_CHECK_PCD_VALID_RANGE(VarOffset, PcdClass.validaterange= s, PcdClass.DatumType) if PcdClass.validlists: return VAR_CHECK_PCD_VALID_LIST(VarOffset, PcdClass.validlists, Pc= dClass.DatumType) - else: - return None + return None diff --git a/BaseTools/Source/Python/Common/Expression.py b/BaseTools/Sourc= e/Python/Common/Expression.py index e5d17e6b4de0..36f2654fc9cf 100644 --- a/BaseTools/Source/Python/Common/Expression.py +++ b/BaseTools/Source/Python/Common/Expression.py @@ -133,7 +133,7 @@ def BuildOptionValue(PcdValue, GuidDict): elif PcdValue.startswith(("L'", "'")): InputValue =3D PcdValue elif PcdValue.startswith('L'): - InputValue =3D 'L"' + PcdValue[1:] + '"' + InputValue =3D 'L"{VAL}"'.format(VAL=3DPcdValue[1:]) else: InputValue =3D PcdValue if IsFieldValueAnArray(InputValue): @@ -178,7 +178,7 @@ def ReplaceExprMacro(String, Macros, ExceptionList =3D = None): # For example: DEFINE ARCH =3D IA32 X64 # $(ARCH) is replaced with "IA32 X64" if ExceptionList and Macro in ExceptionList: - RetStr +=3D '"' + Macros[Macro] + '"' + RetStr =3D '{ORIG}"{MACRO}"'.format(MACRO=3DMacros[Mac= ro], ORIG=3DRetStr) elif Macros[Macro].strip(): RetStr +=3D Macros[Macro] else: @@ -197,7 +197,7 @@ def IntToStr(Value): while Value > 0: StrList.append(chr(Value & 0xff)) Value =3D Value >> 8 - Value =3D '"' + ''.join(StrList) + '"' + Value =3D '"{VAL}"'.format(VAL=3D''.join(StrList)) return Value =20 SupportedInMacroList =3D ['TARGET', 'TOOL_CHAIN_TAG', 'ARCH', 'FAMILY'] @@ -223,17 +223,24 @@ class BaseExpression(object): class ValueExpression(BaseExpression): # Logical operator mapping LogicalOperators =3D { - '&&' : 'and', '||' : 'or', - '!' : 'not', 'AND': 'and', - 'OR' : 'or' , 'NOT': 'not', - 'XOR': '^' , 'xor': '^', - 'EQ' : '=3D=3D' , 'NE' : '!=3D', - 'GT' : '>' , 'LT' : '<', - 'GE' : '>=3D' , 'LE' : '<=3D', + '&&' : 'and', + '||' : 'or', + '!' : 'not', + 'AND': 'and', + 'OR' : 'or', + 'NOT': 'not', + 'XOR': '^', + 'xor': '^', + 'EQ' : '=3D=3D', + 'NE' : '!=3D', + 'GT' : '>', + 'LT' : '<', + 'GE' : '>=3D', + 'LE' : '<=3D', 'IN' : 'in' } =20 - NonLetterOpLst =3D ['+', '-', '*', '/', '%', '&', '|', '^', '~', '<<',= '>>', '!', '=3D', '>', '<', '?', ':'] + NonLetterOpLst =3D {'+', '-', '*', '/', '%', '&', '|', '^', '~', '<<',= '>>', '!', '=3D', '>', '<', '?', ':'} =20 =20 SymbolPattern =3D re.compile("(" @@ -710,18 +717,15 @@ class ValueExpression(BaseExpression): if Expr.startswith('L"'): # Skip L self._Idx +=3D 1 - UStr =3D self.__GetString() - self._Token =3D 'L"' + UStr + '"' + self._Token =3D 'L"{STR}"'.format(STR=3Dself.__GetString()) return self._Token elif Expr.startswith("L'"): # Skip L self._Idx +=3D 1 - UStr =3D self.__GetString() - self._Token =3D "L'" + UStr + "'" + self._Token =3D "L'{STR}'".format(STR=3Dself.__GetString()) return self._Token elif Expr.startswith("'"): - UStr =3D self.__GetString() - self._Token =3D "'" + UStr + "'" + self._Token =3D "'{STR}'".format(STR=3Dself.__GetString()) return self._Token elif Expr.startswith('UINT'): Re =3D re.compile('(?:UINT8|UINT16|UINT32|UINT64)\((.+)\)') @@ -758,7 +762,7 @@ class ValueExpression(BaseExpression): return self.__GetString() elif Ch =3D=3D '{': return self.__GetArray() - elif Ch =3D=3D '(' or Ch =3D=3D ')': + elif Ch in {'(', ')'}: self._Idx +=3D 1 self._Token =3D Ch return self._Token @@ -768,7 +772,7 @@ class ValueExpression(BaseExpression): # Parse operator def _GetOperator(self): self.__SkipWS() - LegalOpLst =3D ['&&', '||', '!=3D', '=3D=3D', '>=3D', '<=3D'] + se= lf.NonLetterOpLst + ['?',':'] + LegalOpLst =3D {'&&', '||', '!=3D', '=3D=3D', '>=3D', '<=3D', '?',= ':'}.union(self.NonLetterOpLst) =20 self._Token =3D '' Expr =3D self._Expr[self._Idx:] diff --git a/BaseTools/Source/Python/Common/Misc.py b/BaseTools/Source/Pyth= on/Common/Misc.py index 0bfb26548d9b..bfb6e56a923f 100644 --- a/BaseTools/Source/Python/Common/Misc.py +++ b/BaseTools/Source/Python/Common/Misc.py @@ -713,7 +713,7 @@ class TemplateString(object): self._SubSectionList =3D [TemplateSection] =20 def __str__(self): - return self._Template + " : " + str(self._PlaceHolderList) + return "{TEM} : {LIST}".format(TEM=3Dself._Template, LIST=3Dst= r(self._PlaceHolderList)) =20 def Instantiate(self, PlaceHolderValues): RepeatTime =3D -1 @@ -894,7 +894,7 @@ class Progressor: TimeUp =3D self.Interval time.sleep(self._CheckInterval) TimeUp -=3D self._CheckInterval - sys.stdout.write(" " + self.CodaMessage + "\n") + sys.stdout.write(" {MSG}\n".format(MSG=3Dself.CodaMessage)) sys.stdout.flush() =20 ## Abort the progress display @@ -1313,7 +1313,7 @@ def ParseFieldValue (Value): if Value[0] =3D=3D '"' and Value[-1] =3D=3D '"': Value =3D Value[1:-1] try: - Value =3D "'" + uuid.UUID(Value).get_bytes_le() + "'" + Value =3D "'{GUID}'".format(GUID=3Duuid.UUID(Value).get_bytes_= le()) except ValueError, Message: raise BadExpression('%s' % Message) Value, Size =3D ParseFieldValue(Value) @@ -2050,7 +2050,7 @@ class SkuClass(): ArrayStrList.append(hex(int(self.AvailableSkuIds[skuna= me]))) skuname =3D self.GetNextSkuId(skuname) ArrayStrList.append("0x0") - ArrayStr =3D "{" + ",".join(ArrayStrList) + "}" + ArrayStr =3D "{{{ARRAY}}}".format(ARRAY=3D",".join(ArrayStrLis= t)) return ArrayStr def __GetAvailableSkuIds(self): return self.AvailableSkuIds diff --git a/BaseTools/Source/Python/Common/String.py b/BaseTools/Source/Py= thon/Common/String.py index 34361ecdd58c..1516e6c2ae9c 100644 --- a/BaseTools/Source/Python/Common/String.py +++ b/BaseTools/Source/Python/Common/String.py @@ -712,7 +712,7 @@ def RaiseParserError(Line, Section, File, Format=3D'', = LineNo=3D -1): LineNo =3D GetLineNo(open(os.path.normpath(File), 'r').read(), Lin= e) ErrorMsg =3D "Invalid statement '%s' is found in section '%s'" % (Line= , Section) if Format !=3D '': - Format =3D "Correct format is " + Format + Format =3D "Correct format is {FMT}".format(FMT=3DFormat) EdkLogger.error("Parser", PARSER_ERROR, ErrorMsg, File=3DFile, Line=3D= LineNo, ExtraData=3DFormat, RaiseError=3DEdkLogger.IsRaiseError) =20 ## WorkspaceFile diff --git a/BaseTools/Source/Python/CommonDataClass/CommonClass.py b/BaseT= ools/Source/Python/CommonDataClass/CommonClass.py index e29f5211d5c7..d7123fe91ee1 100644 --- a/BaseTools/Source/Python/CommonDataClass/CommonClass.py +++ b/BaseTools/Source/Python/CommonDataClass/CommonClass.py @@ -35,16 +35,14 @@ # @var DefaultValue: To store value for DefaultValue # class SkuInfoClass(object): - def __init__(self, SkuIdName =3D '', SkuId =3D '', VariableName =3D ''= , VariableGuid =3D '', VariableOffset =3D '',=20 - HiiDefaultValue =3D '', VpdOffset =3D '', DefaultValue = =3D '', VariableGuidValue =3D '', VariableAttribute =3D '', DefaultStore = =3D None): + def __init__(self, SkuIdName =3D '', SkuId =3D '', VariableName =3D ''= , VariableGuid =3D '', VariableOffset =3D '', + HiiDefaultValue =3D '', VpdOffset =3D '', DefaultValue = =3D '', VariableGuidValue =3D '', VariableAttribute =3D '', DefaultStore = =3D {}): self.SkuIdName =3D SkuIdName self.SkuId =3D SkuId =20 # # Used by Hii # - if DefaultStore is None: - DefaultStore =3D {} self.VariableName =3D VariableName self.VariableGuid =3D VariableGuid self.VariableGuidValue =3D VariableGuidValue @@ -68,15 +66,18 @@ class SkuInfoClass(object): # Convert each member of the class to string # Organize to a signle line format string # - # @retval Rtn Formatted String + # @retval Formatted String # def __str__(self): - Rtn =3D 'SkuId =3D ' + str(self.SkuId) + "," + \ - 'SkuIdName =3D ' + str(self.SkuIdName) + "," + \ - 'VariableName =3D ' + str(self.VariableName) + "," + \ - 'VariableGuid =3D ' + str(self.VariableGuid) + "," + \ - 'VariableOffset =3D ' + str(self.VariableOffset) + ","= + \ - 'HiiDefaultValue =3D ' + str(self.HiiDefaultValue) + "= ," + \ - 'VpdOffset =3D ' + str(self.VpdOffset) + "," + \ - 'DefaultValue =3D ' + str(self.DefaultValue) + "," - return Rtn + return 'SkuId =3D {SKUID},SkuIdName =3D {SKUNAME},'\ + 'VariableName =3D {VARNAME},VariableGuid =3D {VARGUID},'\ + 'VariableOffset =3D {VAROFFSET},HiiDefaultValue =3D {DEF},'\ + 'VpdOffset =3D {OFFSET},DefaultValue =3D {DEF2},'.format( + SKUID=3Dself.SkuId, + SKUNAME=3Dself.SkuIdName, + VARNAME=3Dself.VariableName, + VARGUID=3Dself.VariableGuid, + VAROFFSET=3Dself.VariableOffset, + DEF=3Dself.HiiDefaultValue, + OFFSET=3Dself.VpdOffset, + DEF2=3Dself.DefaultValue) diff --git a/BaseTools/Source/Python/GenFds/Capsule.py b/BaseTools/Source/P= ython/GenFds/Capsule.py index 6aae2fcb7d97..ab5ea9fc0dd0 100644 --- a/BaseTools/Source/Python/GenFds/Capsule.py +++ b/BaseTools/Source/Python/GenFds/Capsule.py @@ -28,9 +28,8 @@ from struct import pack from GenFds import FindExtendTool from Common import EdkLogger from Common.BuildToolError import * +from Common.DataType import TAB_LINE_BREAK =20 - -T_CHAR_LF =3D '\n' WIN_CERT_REVISION =3D 0x0200 WIN_CERT_TYPE_EFI_GUID =3D 0x0EF1 EFI_CERT_TYPE_PKCS7_GUID =3D uuid.UUID('{4aafd29d-68df-49ee-8aa9-347d37566= 5a7}') @@ -209,16 +208,14 @@ class Capsule (CapsuleClassObject) : return self.GenFmpCapsule() =20 CapInfFile =3D self.GenCapInf() - CapInfFile.writelines("[files]" + T_CHAR_LF) + CapInfFile.writelines("[files]{END}".format(END=3DTAB_LINE_BREAK)) CapFileList =3D [] for CapsuleDataObj in self.CapsuleDataList : CapsuleDataObj.CapsuleName =3D self.CapsuleName FileName =3D CapsuleDataObj.GenCapsuleSubItem() CapsuleDataObj.CapsuleName =3D None CapFileList.append(FileName) - CapInfFile.writelines("EFI_FILE_NAME =3D " + \ - FileName + \ - T_CHAR_LF) + CapInfFile.writelines("EFI_FILE_NAME =3D {NAME}{END}".format(N= AME=3DFileName, END=3DTAB_LINE_BREAK)) SaveFileOnChange(self.CapInfFileName, CapInfFile.getvalue(), False) CapInfFile.close() # @@ -245,16 +242,12 @@ class Capsule (CapsuleClassObject) : # def GenCapInf(self): self.CapInfFileName =3D os.path.join(GenFdsGlobalVariable.FvDir, - self.UiCapsuleName + "_Cap" + '.inf') + "{NAME}_Cap.inf".format(NAME=3Dself.UiC= apsuleName)) CapInfFile =3D StringIO.StringIO() =20 - CapInfFile.writelines("[options]" + T_CHAR_LF) + CapInfFile.writelines("[options]{END}".format(END=3DTAB_LINE_BREAK= )) =20 for Item in self.TokensDict: - CapInfFile.writelines("EFI_" + \ - Item + \ - ' =3D ' + \ - self.TokensDict[Item] + \ - T_CHAR_LF) + CapInfFile.writelines("EFI_{ITEM} =3D {ENTRY}{END}".format(ITE= M=3DItem, ENTRY=3Dself.TokensDict[Item], END=3DTAB_LINE_BREAK)) =20 return CapInfFile diff --git a/BaseTools/Source/Python/GenFds/FdfParser.py b/BaseTools/Source= /Python/GenFds/FdfParser.py index d511cf4f9d5a..55348083b954 100644 --- a/BaseTools/Source/Python/GenFds/FdfParser.py +++ b/BaseTools/Source/Python/GenFds/FdfParser.py @@ -2019,9 +2019,9 @@ class FdfParser: AllStrLen =3D len (AllString) DataString =3D "" while AllStrLen > 4: - DataString =3D DataString + "0x" + AllString[AllStrLen - 2: Al= lStrLen] + "," + DataString =3D "{ORIG}0x{VAL},".format(ORIG=3DDataString, VAL= =3DAllString[AllStrLen - 2: AllStrLen]) AllStrLen =3D AllStrLen - 2 - DataString =3D DataString + AllString[:AllStrLen] + "," + DataString =3D "{ORIG}{VAL},".format(ORIG=3DDataString, VAL=3DAllS= tring[:AllStrLen]) =20 # byte value array if len (self.__Token) <=3D 4: @@ -2059,9 +2059,9 @@ class FdfParser: AllStrLen =3D len (AllString) DataString =3D "" while AllStrLen > 4: - DataString =3D DataString + "0x" + AllString[AllStrLen - 2= : AllStrLen] + "," + DataString =3D "{ORIG}0x{VAL},".format(ORIG=3DDataString, = VAL=3DAllString[AllStrLen - 2: AllStrLen]) AllStrLen =3D AllStrLen - 2 - DataString =3D DataString + AllString[:AllStrLen] + "," + DataString =3D "{ORIG}{VAL},".format(ORIG=3DDataString, VAL=3D= AllString[:AllStrLen]) =20 # byte value array if len (self.__Token) <=3D 4: diff --git a/BaseTools/Source/Python/GenFds/FfsInfStatement.py b/BaseTools/= Source/Python/GenFds/FfsInfStatement.py index 39426b939b4a..e4276c3a8c07 100644 --- a/BaseTools/Source/Python/GenFds/FfsInfStatement.py +++ b/BaseTools/Source/Python/GenFds/FfsInfStatement.py @@ -361,7 +361,7 @@ class FfsInfStatement(FfsInfStatementClassObject): os.makedirs(self.OutputPath) =20 self.EfiOutputPath, self.EfiDebugPath =3D self.__GetEFIOutPutPath_= _() - GenFdsGlobalVariable.VerboseLogger( "ModuelEFIPath: " + self.EfiOu= tputPath) + GenFdsGlobalVariable.VerboseLogger( "ModuelEFIPath: {PATH}".format= (PATH=3Dself.EfiOutputPath)) =20 ## PatchEfiFile # @@ -564,7 +564,7 @@ class FfsInfStatement(FfsInfStatementClassObject): =20 Rule =3D GenFdsGlobalVariable.FdfParser.Profile.RuleDict.get(R= uleName) if Rule is not None: - GenFdsGlobalVariable.VerboseLogger ("Want To Find Rule Nam= e is : " + RuleName) + GenFdsGlobalVariable.VerboseLogger ("Want To Find Rule Nam= e is : {NAME}".format(NAME=3DRuleName)) return Rule =20 RuleName =3D 'RULE' + \ @@ -582,7 +582,7 @@ class FfsInfStatement(FfsInfStatementClassObject): =20 Rule =3D GenFdsGlobalVariable.FdfParser.Profile.RuleDict.get(RuleN= ame) if Rule is not None: - GenFdsGlobalVariable.VerboseLogger ("Want To Find Rule Name is= : " + RuleName) + GenFdsGlobalVariable.VerboseLogger ("Want To Find Rule Name is= : {NAME}".format(NAME=3DRuleName)) return Rule =20 if Rule is None : @@ -634,7 +634,7 @@ class FfsInfStatement(FfsInfStatementClassObject): CurArchList =3D TargetArchList if PlatformArchList !=3D []: CurArchList =3D list(set (TargetArchList) & set (PlatformArchL= ist)) - GenFdsGlobalVariable.VerboseLogger ("Valid target architecture(s) = is : " + " ".join(CurArchList)) + GenFdsGlobalVariable.VerboseLogger ("Valid target architecture(s) = is : {ARCH}".format(ARCH=3D" ".join(CurArchList))) =20 ArchList =3D [] if self.KeyStringList !=3D []: diff --git a/BaseTools/Source/Python/GenFds/Fv.py b/BaseTools/Source/Python= /GenFds/Fv.py index d4b0611fc55a..c672f1d7d8fa 100644 --- a/BaseTools/Source/Python/GenFds/Fv.py +++ b/BaseTools/Source/Python/GenFds/Fv.py @@ -108,9 +108,7 @@ class FV (FvClassObject): FfsFileList.append(FileName) # Add Apriori file name to Inf file if not Flag: - self.FvInfFile.writelines("EFI_FILE_NAME =3D " + \ - FileName + \ - TAB_LINE_BREAK) + self.FvInfFile.writelines("EFI_FILE_NAME =3D {FN}{END}".fo= rmat(FN=3DFileName, END=3DTAB_LINE_BREAK)) =20 # Process Modules in FfsList for FfsFile in self.FfsList : @@ -122,9 +120,7 @@ class FV (FvClassObject): FileName =3D FfsFile.GenFfs(MacroDict, FvParentAddr=3DBaseAddr= ess, IsMakefile=3DFlag, FvName=3Dself.UiFvName) FfsFileList.append(FileName) if not Flag: - self.FvInfFile.writelines("EFI_FILE_NAME =3D " + \ - FileName + \ - TAB_LINE_BREAK) + self.FvInfFile.writelines("EFI_FILE_NAME =3D {FN}{END}".fo= rmat(FN=3DFileName, END=3DTAB_LINE_BREAK)) if not Flag: SaveFileOnChange(self.InfFileName, self.FvInfFile.getvalue(), = False) self.FvInfFile.close() @@ -267,67 +263,46 @@ class FV (FvClassObject): # # Add [Options] # - self.FvInfFile.writelines("[options]" + TAB_LINE_BREAK) + self.FvInfFile.writelines("[options]{END}".format(END=3DTAB_LINE_B= REAK)) if BaseAddress is not None : - self.FvInfFile.writelines("EFI_BASE_ADDRESS =3D " + \ - BaseAddress + \ - TAB_LINE_BREAK) + self.FvInfFile.writelines("EFI_BASE_ADDRESS =3D {BA}{END}".for= mat(BA=3DBaseAddress,END=3DTAB_LINE_BREAK)) =20 if BlockSize is not None: - self.FvInfFile.writelines("EFI_BLOCK_SIZE =3D " + \ - '0x%X' %BlockSize + \ - TAB_LINE_BREAK) + self.FvInfFile.writelines("EFI_BLOCK_SIZE =3D 0x{BS:x}{END}".f= ormat(BS=3DBlockSize,END=3DTAB_LINE_BREAK)) if BlockNum is not None: - self.FvInfFile.writelines("EFI_NUM_BLOCKS =3D " + \ - ' 0x%X' %BlockNum + \ - TAB_LINE_BREAK) + self.FvInfFile.writelines("EFI_NUM_BLOCKS =3D 0x{BN:x}{E= ND}".format(BN=3DBlockNum, END=3DTAB_LINE_BREAK)) else: if self.BlockSizeList =3D=3D []: if not self._GetBlockSize(): #set default block size is 1 - self.FvInfFile.writelines("EFI_BLOCK_SIZE =3D 0x1" + = TAB_LINE_BREAK) + self.FvInfFile.writelines("EFI_BLOCK_SIZE =3D 0x1{END= }".format(END=3DTAB_LINE_BREAK)) =20 for BlockSize in self.BlockSizeList : if BlockSize[0] is not None: - self.FvInfFile.writelines("EFI_BLOCK_SIZE =3D " + \ - '0x%X' %BlockSize[0] + \ - TAB_LINE_BREAK) + self.FvInfFile.writelines("EFI_BLOCK_SIZE =3D 0x{BS:x= }{END}".format(BS=3DBlockSize[0], END=3DTAB_LINE_BREAK)) =20 if BlockSize[1] is not None: - self.FvInfFile.writelines("EFI_NUM_BLOCKS =3D " + \ - ' 0x%X' %BlockSize[1] + \ - TAB_LINE_BREAK) + self.FvInfFile.writelines("EFI_NUM_BLOCKS =3D 0x{BN:= x}{END}".format(BN=3DBlockSize[1], END=3DTAB_LINE_BREAK)) =20 if self.BsBaseAddress is not None: - self.FvInfFile.writelines('EFI_BOOT_DRIVER_BASE_ADDRESS =3D ' = + \ - '0x%X' %self.BsBaseAddress) + self.FvInfFile.writelines('EFI_BOOT_DRIVER_BASE_ADDRESS =3D 0x= {BA:x}'.format(BA=3Dself.BsBaseAddress)) if self.RtBaseAddress is not None: - self.FvInfFile.writelines('EFI_RUNTIME_DRIVER_BASE_ADDRESS =3D= ' + \ - '0x%X' %self.RtBaseAddress) + self.FvInfFile.writelines('EFI_RUNTIME_DRIVER_BASE_ADDRESS =3D= 0x{BA:x}'.format(BA=3Dself.RtBaseAddress)) # # Add attribute # - self.FvInfFile.writelines("[attributes]" + TAB_LINE_BREAK) + self.FvInfFile.writelines("[attributes]{END}".format(END=3DTAB_LIN= E_BREAK)) =20 - self.FvInfFile.writelines("EFI_ERASE_POLARITY =3D " + \ - ' %s' %ErasePloarity + \ - TAB_LINE_BREAK) - if not (self.FvAttributeDict is None): + self.FvInfFile.writelines("EFI_ERASE_POLARITY =3D {EP}{END}".fo= rmat(EP=3DErasePloarity, END=3DTAB_LINE_BREAK)) + if self.FvAttributeDict: for FvAttribute in self.FvAttributeDict.keys() : if FvAttribute =3D=3D "FvUsedSizeEnable": - if self.FvAttributeDict[FvAttribute].upper() in ('TRUE= ', '1') : + if self.FvAttributeDict[FvAttribute].upper() in {'TRUE= ', '1'}: self.UsedSizeEnable =3D True continue - self.FvInfFile.writelines("EFI_" + \ - FvAttribute + \ - ' =3D ' + \ - self.FvAttributeDict[FvAttribute= ] + \ - TAB_LINE_BREAK ) - if self.FvAlignment is not None: - self.FvInfFile.writelines("EFI_FVB2_ALIGNMENT_" + \ - self.FvAlignment.strip() + \ - " =3D TRUE" + \ - TAB_LINE_BREAK) + self.FvInfFile.writelines("EFI_{FA} =3D {VAL}{END}".format= (FA=3DFvAttribute, VAL=3Dself.FvAttributeDict[FvAttribute], END=3DTAB_LINE_= BREAK)) + if self.FvAlignment: + self.FvInfFile.writelines("EFI_FVB2_ALIGNMENT_{FA} =3D TRUE{EN= D}".format(FA=3Dself.FvAlignment.strip(), END=3DTAB_LINE_BREAK)) =20 # # Generate FV extension header file @@ -410,16 +385,11 @@ class FV (FvClassObject): if Changed: if os.path.exists (self.InfFileName): os.remove (self.InfFileName) - self.FvInfFile.writelines("EFI_FV_EXT_HEADER_FILE_NAME =3D= " + \ - FvExtHeaderFileName = + \ - TAB_LINE_BREAK) - + self.FvInfFile.writelines("EFI_FV_EXT_HEADER_FILE_NAME =3D= {NAME}{END}".format(NAME=3DFvExtHeaderFileName, END=3DTAB_LINE_BREAK)) =20 # # Add [Files] # - self.FvInfFile.writelines("[files]" + TAB_LINE_BREAK) + self.FvInfFile.writelines("[files]{END}".format(END=3DTAB_LINE_BRE= AK)) if VtfDict and self.UiFvName in VtfDict: - self.FvInfFile.writelines("EFI_FILE_NAME =3D " = + \ - VtfDict[self.UiFvName] = + \ - TAB_LINE_BREAK) + self.FvInfFile.writelines("EFI_FILE_NAME =3D {NAME}{END}".form= at(NAME=3DVtfDict[self.UiFvName], END=3DTAB_LINE_BREAK)) diff --git a/BaseTools/Source/Python/GenFds/GenFds.py b/BaseTools/Source/Py= thon/GenFds/GenFds.py index f0b51e25dfa2..998bd5345c3c 100644 --- a/BaseTools/Source/Python/GenFds/GenFds.py +++ b/BaseTools/Source/Python/GenFds/GenFds.py @@ -95,7 +95,7 @@ def main(): if 'EDK_SOURCE' in os.environ: GenFdsGlobalVariable.EdkSourceDir =3D os.path.normcase(os.= environ['EDK_SOURCE']) if (Options.debug): - GenFdsGlobalVariable.VerboseLogger("Using Workspace:" + Wo= rkspace) + GenFdsGlobalVariable.VerboseLogger("Using Workspace: {WKSP= }".format(WKSP=3DWorkspace)) if Options.GenfdsMultiThread: GenFdsGlobalVariable.EnableGenfdsMultiThread =3D True os.chdir(GenFdsGlobalVariable.WorkSpaceDir) @@ -207,7 +207,7 @@ def main(): GlobalData.gEdkSource =3D List[1].strip() GlobalData.gGlobalDefines["EDK_SOURCE"] =3D Global= Data.gEdkSource continue - elif List[0].strip() in ["WORKSPACE", "TARGET", "TOOLC= HAIN"]: + elif List[0].strip() in {"WORKSPACE", "TARGET", "TOOLC= HAIN"}: GlobalData.gGlobalDefines[List[0].strip()] =3D Lis= t[1].strip() else: GlobalData.gCommandLineDefines[List[0].strip()] = =3D List[1].strip() diff --git a/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py b/BaseT= ools/Source/Python/GenFds/GenFdsGlobalVariable.py index 8537800bc2b2..b840079e7ad4 100644 --- a/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py +++ b/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py @@ -295,7 +295,6 @@ class GenFdsGlobalVariable: if not os.path.exists(GenFdsGlobalVariable.FfsDir) : os.makedirs(GenFdsGlobalVariable.FfsDir) =20 - T_CHAR_LF =3D '\n' # # Create FV Address inf file # @@ -313,13 +312,9 @@ class GenFdsGlobalVariable: # # Add [Options] # - FvAddressFile.writelines("[options]" + T_CHAR_LF) - FvAddressFile.writelines("EFI_BOOT_DRIVER_BASE_ADDRESS =3D " += \ - BsAddress + \ - T_CHAR_LF) - FvAddressFile.writelines("EFI_RUNTIME_DRIVER_BASE_ADDRESS =3D = " + \ - RtAddress + \ - T_CHAR_LF) + FvAddressFile.writelines("[options]{END}".format(END=3DDataTyp= e.TAB_LINE_BREAK)) + FvAddressFile.writelines("EFI_BOOT_DRIVER_BASE_ADDRESS =3D {BS= }{END}".format(BS=3DBsAddress, END=3DDataType.TAB_LINE_BREAK)) + FvAddressFile.writelines("EFI_RUNTIME_DRIVER_BASE_ADDRESS =3D = {RT}{END}".format(RT=3DRtAddress, END=3DDataType.TAB_LINE_BREAK)) =20 =20 def SetEnv(FdfParser, WorkSpace, ArchList, GlobalData): @@ -352,7 +347,6 @@ class GenFdsGlobalVariable: if not os.path.exists(GenFdsGlobalVariable.FfsDir): os.makedirs(GenFdsGlobalVariable.FfsDir) =20 - T_CHAR_LF =3D '\n' # # Create FV Address inf file # @@ -376,13 +370,9 @@ class GenFdsGlobalVariable: # # Add [Options] # - FvAddressFile.writelines("[options]" + T_CHAR_LF) - FvAddressFile.writelines("EFI_BOOT_DRIVER_BASE_ADDRESS =3D " += \ - BsAddress + \ - T_CHAR_LF) - FvAddressFile.writelines("EFI_RUNTIME_DRIVER_BASE_ADDRESS =3D = " + \ - RtAddress + \ - T_CHAR_LF) + FvAddressFile.writelines("[options]{END}".format(END=3DDataTyp= e.TAB_LINE_BREAK)) + FvAddressFile.writelines("EFI_BOOT_DRIVER_BASE_ADDRESS =3D {BS= }{END}".format(BS=3DBsAddress, END=3DDataType.TAB_LINE_BREAK)) + FvAddressFile.writelines("EFI_RUNTIME_DRIVER_BASE_ADDRESS =3D = {RT}{END}".format(RT=3DRtAddress, END=3DDataType.TAB_LINE_BREAK)) =20 ## ReplaceWorkspaceMacro() # @@ -692,7 +682,7 @@ class GenFdsGlobalVariable: if " ".join(Cmd).strip() not in GenFdsGlobalVariable.SecCmdLis= t: GenFdsGlobalVariable.SecCmdList.append(" ".join(Cmd).strip= ()) else: - GenFdsGlobalVariable.CallExternalTool(Cmd, "Failed to call " += ToolPath, returnValue) + GenFdsGlobalVariable.CallExternalTool(Cmd, "Failed to call {PA= TH}".format(PATH=3DToolPath), returnValue) =20 def CallExternalTool (cmd, errorMess, returnValue=3D[]): =20 diff --git a/BaseTools/Source/Python/GenFds/OptionRom.py b/BaseTools/Source= /Python/GenFds/OptionRom.py index b05841529940..0b8e79588ff1 100644 --- a/BaseTools/Source/Python/GenFds/OptionRom.py +++ b/BaseTools/Source/Python/GenFds/OptionRom.py @@ -27,8 +27,6 @@ from Common.Misc import SaveFileOnChange from Common import EdkLogger from Common.BuildToolError import * =20 -T_CHAR_LF =3D '\n' - ##=20 # # diff --git a/BaseTools/Source/Python/GenFds/Vtf.py b/BaseTools/Source/Pytho= n/GenFds/Vtf.py index 291070827b78..6016b6d94e94 100644 --- a/BaseTools/Source/Python/GenFds/Vtf.py +++ b/BaseTools/Source/Python/GenFds/Vtf.py @@ -19,7 +19,7 @@ from GenFdsGlobalVariable import GenFdsGlobalVariable import Common.LongFilePathOs as os from CommonDataClass.FdfClass import VtfClassObject from Common.LongFilePathSupport import OpenLongFilePath as open -T_CHAR_LF =3D '\n' +from Common.DataType import TAB_LINE_BREAK =20 ## generate VTF # @@ -43,7 +43,7 @@ class Vtf (VtfClassObject): # def GenVtf(self, FdAddressDict) : self.GenBsfInf() - OutputFile =3D os.path.join(GenFdsGlobalVariable.FvDir, self.UiNam= e + '.Vtf') + OutputFile =3D os.path.join(GenFdsGlobalVariable.FvDir, '{NAME}.Vt= f'.format(self.UiName)) BaseAddArg =3D self.GetBaseAddressArg(FdAddressDict) OutputArg, VtfRawDict =3D self.GenOutputArg() =20 @@ -69,77 +69,43 @@ class Vtf (VtfClassObject): self.BsfInfName =3D os.path.join(GenFdsGlobalVariable.FvDir, self.= UiName + '.inf') with open(self.BsfInfName, 'w') as BsfInf: if self.ResetBin is not None: - BsfInf.writelines ("[OPTIONS]" + T_CHAR_LF) - BsfInf.writelines ("IA32_RST_BIN" + \ - " =3D " + \ - GenFdsGlobalVariable.MacroExtend(GenFds= GlobalVariable.ReplaceWorkspaceMacro(self.ResetBin)) + \ - T_CHAR_LF) - BsfInf.writelines (T_CHAR_LF) + BsfInf.writelines ("[OPTIONS]{END}".format(END=3DTAB_LINE_= BREAK)) + BsfInf.writelines ("IA32_RST_BIN =3D {DATA}{END}".format( + DATA=3DGenFdsGlobalVariable.MacroExtend(GenFdsGlobalVa= riable.ReplaceWorkspaceMacro(self.ResetBin)), + END=3DTAB_LINE_BREAK)) + BsfInf.writelines (TAB_LINE_BREAK) =20 - BsfInf.writelines ("[COMPONENTS]" + T_CHAR_LF) + BsfInf.writelines ("[COMPONENTS]{END}".format(END=3DTAB_LINE_B= REAK)) =20 for ComponentObj in self.ComponentStatementList : - BsfInf.writelines ("COMP_NAME" + \ - " =3D " + \ - ComponentObj.CompName + \ - T_CHAR_LF) + BsfInf.writelines ("COMP_NAME =3D {DATA}{END}".format(DATA= =3DComponentObj.CompName,END=3DTAB_LINE_BREAK)) + if ComponentObj.CompLoc.upper() =3D=3D 'NONE': - BsfInf.writelines ("COMP_LOC" + \ - " =3D " + \ - 'N' + \ - T_CHAR_LF) - + BsfInf.writelines ("COMP_LOC =3D N{END}".format(END=3D= TAB_LINE_BREAK)) elif ComponentObj.FilePos is not None: - BsfInf.writelines ("COMP_LOC" + \ - " =3D " + \ - ComponentObj.FilePos + \ - T_CHAR_LF) + BsfInf.writelines ("COMP_LOC =3D {POS}{END}".format(PO= S=3DComponentObj.FilePos, END=3DTAB_LINE_BREAK)) else: Index =3D FvList.index(ComponentObj.CompLoc.upper()) if Index =3D=3D 0: - BsfInf.writelines ("COMP_LOC" + \ - " =3D " + \ - 'F' + \ - T_CHAR_LF) + BsfInf.writelines ("COMP_LOC =3D F{END}".format(EN= D=3DTAB_LINE_BREAK)) elif Index =3D=3D 1: - BsfInf.writelines ("COMP_LOC" + \ - " =3D " + \ - 'S' + \ - T_CHAR_LF) + BsfInf.writelines ("COMP_LOC =3D S{END}".format(EN= D=3DTAB_LINE_BREAK)) =20 - BsfInf.writelines ("COMP_TYPE" + \ - " =3D " + \ - ComponentObj.CompType + \ - T_CHAR_LF) - BsfInf.writelines ("COMP_VER" + \ - " =3D " + \ - ComponentObj.CompVer + \ - T_CHAR_LF) - BsfInf.writelines ("COMP_CS" + \ - " =3D " + \ - ComponentObj.CompCs + \ - T_CHAR_LF) + BsfInf.writelines ("COMP_TYPE =3D {DATA}{END}".format(DATA= =3DComponentObj.CompType,END=3DTAB_LINE_BREAK)) + BsfInf.writelines ("COMP_VER =3D {DATA}{END}".format(DATA= =3DComponentObj.CompVer,END=3DTAB_LINE_BREAK)) + BsfInf.writelines ("COMP_CS =3D {DATA}{END}".format(DATA= =3DComponentObj.CompCs,END=3DTAB_LINE_BREAK)) =20 BinPath =3D ComponentObj.CompBin if BinPath !=3D '-': BinPath =3D GenFdsGlobalVariable.MacroExtend(GenFdsGlo= balVariable.ReplaceWorkspaceMacro(BinPath)) - BsfInf.writelines ("COMP_BIN" + \ - " =3D " + \ - BinPath + \ - T_CHAR_LF) + BsfInf.writelines ("COMP_BIN =3D {DATA}{END}".format(DATA= =3DBinPath, END=3DTAB_LINE_BREAK)) =20 SymPath =3D ComponentObj.CompSym if SymPath !=3D '-': SymPath =3D GenFdsGlobalVariable.MacroExtend(GenFdsGlo= balVariable.ReplaceWorkspaceMacro(SymPath)) - BsfInf.writelines ("COMP_SYM" + \ - " =3D " + \ - SymPath + \ - T_CHAR_LF) - BsfInf.writelines ("COMP_SIZE" + \ - " =3D " + \ - ComponentObj.CompSize + \ - T_CHAR_LF) - BsfInf.writelines (T_CHAR_LF) + BsfInf.writelines ("COMP_SYM =3D {DATA}{END}".format(DATA= =3DSymPath, END=3DTAB_LINE_BREAK)) + BsfInf.writelines ("COMP_SIZE =3D {DATA}{END}".format(DATA= =3DComponentObj.CompSiz, END=3DTAB_LINE_BREAK)) + BsfInf.writelines (TAB_LINE_BREAK) =20 ## GenFvList() method # diff --git a/BaseTools/Source/Python/Table/TableDataModel.py b/BaseTools/So= urce/Python/Table/TableDataModel.py index 9c3d7bd9345f..ec47b9f37097 100644 --- a/BaseTools/Source/Python/Table/TableDataModel.py +++ b/BaseTools/Source/Python/Table/TableDataModel.py @@ -1,7 +1,7 @@ ## @file # This file is used to create/update/query/erase table for data models # -# Copyright (c) 2008, Intel Corporation. All rights reserved.
+# Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.
# This program and the accompanying materials # are licensed and made available under the terms and conditions of the BS= D License # which accompanies this distribution. The full text of the license may b= e found at @@ -60,7 +60,7 @@ class TableDataModel(Table): def Insert(self, CrossIndex, Name, Description): self.ID =3D self.ID + 1 (Name, Description) =3D ConvertToSqlString((Name, Description)) - SqlCommand =3D """insert into %s values(%s, %s, '%s', '%s')""" % (= self.Table, self.ID, CrossIndex, Name, Description) + SqlCommand =3D "insert into %s values(%s, %s, '%s', '%s')" % (self= .Table, self.ID, CrossIndex, Name, Description) Table.Insert(self, SqlCommand) =20 return self.ID @@ -87,9 +87,6 @@ class TableDataModel(Table): # def GetCrossIndex(self, ModelName): CrossIndex =3D -1 - SqlCommand =3D """select CrossIndex from DataModel where name =3D = '""" + ModelName + """'""" + SqlCommand =3D "select CrossIndex from DataModel where name =3D '{= NAME}'".format(NAME=3DModelName) self.Cur.execute(SqlCommand) - for Item in self.Cur: - CrossIndex =3D Item[0] - =20 - return CrossIndex + return self.Cur[-1][0] diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py b/BaseTools/= Source/Python/Workspace/DscBuildData.py index d714c781e970..7b062b564da5 100644 --- a/BaseTools/Source/Python/Workspace/DscBuildData.py +++ b/BaseTools/Source/Python/Workspace/DscBuildData.py @@ -220,7 +220,7 @@ class DscBuildData(PlatformBuildClassObject): @property def OutputPath(self): if os.getenv("WORKSPACE"): - return os.path.join(os.getenv("WORKSPACE"), self.OutputDirecto= ry, self._Target + "_" + self._Toolchain,PcdValueInitName) + return os.path.join(os.getenv("WORKSPACE"), self.OutputDirecto= ry, "{TGT}_{TC}".format(TGT=3Dself._Target, TC=3Dself._Toolchain),PcdValueI= nitName) else: return os.path.dirname(self.DscFile) =20 @@ -762,7 +762,7 @@ class DscBuildData(PlatformBuildClassObject): Module.BuildOptions[ToolChainFamily, ToolChain] =3D Op= tion else: OptionString =3D Module.BuildOptions[ToolChainFamily, = ToolChain] - Module.BuildOptions[ToolChainFamily, ToolChain] =3D Op= tionString + " " + Option + Module.BuildOptions[ToolChainFamily, ToolChain] =3D "{= OPT1} {OPT2}".format(OPT1=3DOptionString, OPT2=3DOption) =20 RecordList =3D self._RawData[MODEL_META_DATA_HEADER, self._Arc= h, None, ModuleId] if DuplicatedFile and not RecordList: @@ -1539,7 +1539,7 @@ class DscBuildData(PlatformBuildClassObject): if not FieldList: continue for FieldName in FieldList: - FieldName =3D "." + FieldName + FieldName =3D ".{ORIG}".format(ORIG=3DFieldName) IsArray =3D IsFieldValueAnArray(FieldList[FieldName.strip(= ".")][0]) if IsArray and not (FieldList[FieldName.strip(".")][0].sta= rtswith('{GUID') and FieldList[FieldName.strip(".")][0].endswith('}')): try: @@ -1569,7 +1569,7 @@ class DscBuildData(PlatformBuildClassObject): if not FieldList: continue for FieldName in FieldList: - FieldName =3D "." + FieldName + FieldName =3D ".{ORIG}".format(ORIG=3DFieldName) IsArray =3D IsFieldValueAnArray(FieldList[FieldNam= e.strip(".")][0]) if IsArray and not (FieldList[FieldName.strip(".")= ][0].startswith('{GUID') and FieldList[FieldName.strip(".")][0].endswith('}= ')): try: @@ -1593,7 +1593,7 @@ class DscBuildData(PlatformBuildClassObject): if Pcd.PcdFieldValueFromComm: CApp =3D CApp + "// From Command Line \n" for FieldName in Pcd.PcdFieldValueFromComm: - FieldName =3D "." + FieldName + FieldName =3D ".{ORIG}".format(ORIG=3DFieldName) IsArray =3D IsFieldValueAnArray(Pcd.PcdFieldValueFromComm[Fiel= dName.strip(".")][0]) if IsArray and not (Pcd.PcdFieldValueFromComm[FieldName.strip(= ".")][0].startswith('{GUID') and Pcd.PcdFieldValueFromComm[FieldName.strip(= ".")][0].endswith('}')): try: @@ -2043,7 +2043,7 @@ class DscBuildData(PlatformBuildClassObject): else: # append options for the same tool except PATH if Attr !=3D 'PATH': - BuildOptions[Tool][Attr] +=3D " " + self.B= uildOptions[Options] + BuildOptions[Tool][Attr] =3D "{ORIG} {NEW}= ".format(ORIG=3DBuildOptions[Tool][Attr], NEW=3Dself.BuildOptions[Options]) else: BuildOptions[Tool][Attr] =3D self.BuildOpt= ions[Options] if BuildOptions: @@ -2054,7 +2054,7 @@ class DscBuildData(PlatformBuildClassObject): ValueList =3D Value.split() if ValueList: for Id, Item in enumerate(ValueList): - if Item in ['-D', '/D', '-U', '/U']: + if Item in {'-D', '/D', '-U', '/U'}: CC_FLAGS +=3D ' ' + Item if Id + 1 < len(ValueList): CC_FLAGS +=3D ' ' + ValueList[Id += 1] diff --git a/BaseTools/Source/Python/Workspace/InfBuildData.py b/BaseTools/= Source/Python/Workspace/InfBuildData.py index 12d848b5fc41..3d9391039f4f 100644 --- a/BaseTools/Source/Python/Workspace/InfBuildData.py +++ b/BaseTools/Source/Python/Workspace/InfBuildData.py @@ -395,7 +395,7 @@ class InfBuildData(ModuleBuildClassObject): self._BuildOptions[ToolChainFamily, ToolChain]= =3D Value else: OptionString =3D self._BuildOptions[ToolChainF= amily, ToolChain] - self._BuildOptions[ToolChainFamily, ToolChain]= =3D OptionString + " " + Value + self._BuildOptions[ToolChainFamily, ToolChain]= =3D "{OPTION} {VAL}".format(OPTION=3DOptionString, VAL=3DValue) # set _Header to non-None in order to avoid database re-querying self._Header_ =3D 'DUMMY' =20 @@ -863,7 +863,7 @@ class InfBuildData(ModuleBuildClassObject): else: # concatenate the option string if they're for the sam= e tool OptionString =3D self._BuildOptions[ToolChainFamily, T= oolChain] - self._BuildOptions[ToolChainFamily, ToolChain] =3D Opt= ionString + " " + Option + self._BuildOptions[ToolChainFamily, ToolChain] =3D "{O= PTION} {OPT}".format(OPTION=3DOptionString, OPT=3DOption) return self._BuildOptions =20 ## Retrieve dependency expression diff --git a/BaseTools/Source/Python/Workspace/MetaDataTable.py b/BaseTools= /Source/Python/Workspace/MetaDataTable.py index e37a10c82f8f..83963008ef4c 100644 --- a/BaseTools/Source/Python/Workspace/MetaDataTable.py +++ b/BaseTools/Source/Python/Workspace/MetaDataTable.py @@ -22,7 +22,7 @@ from CommonDataClass.DataClass import FileClass =20 ## Convert to SQL required string format def ConvertToSqlString(StringList): - return map(lambda s: "'" + s.replace("'", "''") + "'", StringList) + return map(lambda s: "'{mid}'".format(mid=3Ds.replace("'", "''")), Str= ingList) =20 ## TableFile # @@ -329,10 +329,6 @@ class TableDataModel(Table): # def GetCrossIndex(self, ModelName): CrossIndex =3D -1 - SqlCommand =3D """select CrossIndex from DataModel where name =3D = '""" + ModelName + """'""" + SqlCommand =3D "select CrossIndex from DataModel where name =3D '{= NAME}'".format(NAME=3DModelName) self.Cur.execute(SqlCommand) - for Item in self.Cur: - CrossIndex =3D Item[0] - - return CrossIndex - + return self.Cur[-1][0] diff --git a/BaseTools/Source/Python/Workspace/MetaFileParser.py b/BaseTool= s/Source/Python/Workspace/MetaFileParser.py index 21b20bce4018..2c116ddbcb71 100644 --- a/BaseTools/Source/Python/Workspace/MetaFileParser.py +++ b/BaseTools/Source/Python/Workspace/MetaFileParser.py @@ -1924,10 +1924,10 @@ class DecParser(MetaFileParser): return =20 if self._include_flag: - self._ValueList[1] =3D "_" + md5.new(self= ._CurrentLine).hexdigest() + self._ValueList[1] =3D "_{MD5}".format(MD= 5=3Dmd5.new(self._CurrentLine).hexdigest()) self._ValueList[2] =3D self._CurrentLine if self._package_flag and "}" !=3D self._CurrentLine: - self._ValueList[1] =3D "_" + md5.new(self._C= urrentLine).hexdigest() + self._ValueList[1] =3D "_{MD5}".format(MD5= =3Dmd5.new(self._CurrentLine).hexdigest()) self._ValueList[2] =3D self._CurrentLine if self._CurrentLine =3D=3D "}": self._package_flag =3D False --=20 2.16.2.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel