From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.20, mailfrom: zhijux.fan@intel.com) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by groups.io with SMTP; Thu, 12 Sep 2019 01:18:33 -0700 X-Amp-Result: UNSCANNABLE X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 12 Sep 2019 01:18:31 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,492,1559545200"; d="dat'59?scan'59,208,59";a="187434585" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by orsmga003.jf.intel.com with ESMTP; 12 Sep 2019 01:18:30 -0700 Received: from FMSMSX109.amr.corp.intel.com (10.18.116.9) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 12 Sep 2019 01:18:30 -0700 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by fmsmsx109.amr.corp.intel.com (10.18.116.9) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 12 Sep 2019 01:18:30 -0700 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.92]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.132]) with mapi id 14.03.0439.000; Thu, 12 Sep 2019 16:18:28 +0800 From: "Fan, ZhijuX" To: "devel@edk2.groups.io" CC: "Gao, Liming" , "Feng, Bob C" Subject: [PATCH] BaseTools:change some incorrect parameter defaults Thread-Topic: [PATCH] BaseTools:change some incorrect parameter defaults Thread-Index: AdVpQqV7BgElhQ6bTw2dXAInR9a3FQ== Date: Thu, 12 Sep 2019 08:18:27 +0000 Message-ID: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: 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: 47178 Content-Type: multipart/mixed; boundary="_000_FAD0D7E0AE0FA54D987F6E72435CAFD50AFBCBD2SHSMSX101ccrcor_" Content-Language: en-US --_000_FAD0D7E0AE0FA54D987F6E72435CAFD50AFBCBD2SHSMSX101ccrcor_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable BZ:https://bugzilla.tianocore.org/show_bug.cgi?id=3D1858 for Dict=3D{},There are pitfalls in the way this default parameter is set and Dict is not used in functions, other functions have these two cases, I will change some incorrect parameter defaults This patch is going to fix this issue Cc: Liming Gao Cc: Bob Feng Signed-off-by: Zhiju.Fan --- BaseTools/Source/Python/AutoGen/BuildEngine.py | 4 +++- BaseTools/Source/Python/AutoGen/GenMake.py | 6 ++++-- BaseTools/Source/Python/Common/RangeExpression.py | 4 +++- BaseTools/Source/Python/Common/StringUtils.py | 10 +++++++--- BaseTools/Source/Python/GenFds/AprioriSection.py | 4 +++- BaseTools/Source/Python/GenFds/CompressSection.py | 4 +++- BaseTools/Source/Python/GenFds/DataSection.py | 4 +++- BaseTools/Source/Python/GenFds/EfiSection.py | 4 +++- BaseTools/Source/Python/GenFds/FfsFileStatement.py | 5 ++++- BaseTools/Source/Python/GenFds/FfsInfStatement.py | 5 +++-- BaseTools/Source/Python/GenFds/Fv.py | 4 +++- BaseTools/Source/Python/GenFds/FvImageSection.py | 4 +++- BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py | 2 +- BaseTools/Source/Python/GenFds/GuidSection.py | 4 +++- BaseTools/Source/Python/GenFds/OptRomFileStatement.py | 5 ++++- BaseTools/Source/Python/GenFds/Region.py | 4 +++- BaseTools/Source/Python/GenFds/Section.py | 2 +- BaseTools/Source/Python/GenFds/UiSection.py | 4 +++- BaseTools/Source/Python/GenFds/VerSection.py | 4 +++- 19 files changed, 60 insertions(+), 23 deletions(-) diff --git a/BaseTools/Source/Python/AutoGen/BuildEngine.py b/BaseTools/Sou= rce/Python/AutoGen/BuildEngine.py index bb91534477..069a3a1c9d 100644 --- a/BaseTools/Source/Python/AutoGen/BuildEngine.py +++ b/BaseTools/Source/Python/AutoGen/BuildEngine.py @@ -176,7 +176,9 @@ class FileBuildRule: CommandString =3D "\n\t".join(self.CommandList) return "%s : %s\n\t%s" % (DestString, SourceString, CommandString) =20 - def Instantiate(self, Macros=3D{}): + def Instantiate(self, Macros =3D None): + if Macros is None: + Macros =3D {} NewRuleObject =3D copy.copy(self) NewRuleObject.BuildTargets =3D {} NewRuleObject.DestFileList =3D [] diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py b/BaseTools/Source/= Python/AutoGen/GenMake.py index 4f85a93055..3185ebe368 100755 --- a/BaseTools/Source/Python/AutoGen/GenMake.py +++ b/BaseTools/Source/Python/AutoGen/GenMake.py @@ -205,10 +205,12 @@ class BuildFile(object): def GetRemoveDirectoryCommand(self, DirList): return [self._RD_TEMPLATE_[self._FileType] % {'dir':Dir} for Dir i= n DirList] =20 - def PlaceMacro(self, Path, MacroDefinitions=3D{}): + def PlaceMacro(self, Path, MacroDefinitions=3DNone): if Path.startswith("$("): return Path else: + if MacroDefinitions is None: + MacroDefinitions =3D {} PathLength =3D len(Path) for MacroName in MacroDefinitions: MacroValue =3D MacroDefinitions[MacroName] @@ -1762,4 +1764,4 @@ def GetDependencyList(AutoGenObject, FileCache, File,= ForceList, SearchPathList) =20 # This acts like the main() function for the script, unless it is 'import'= ed into another script. if __name__ =3D=3D '__main__': - pass \ No newline at end of file + pass diff --git a/BaseTools/Source/Python/Common/RangeExpression.py b/BaseTools/= Source/Python/Common/RangeExpression.py index e9296e03f6..039d281467 100644 --- a/BaseTools/Source/Python/Common/RangeExpression.py +++ b/BaseTools/Source/Python/Common/RangeExpression.py @@ -342,7 +342,9 @@ class RangeExpression(BaseExpression): raise BadExpression(ERR_STRING_EXPR % Operator) =20 =20 - def __init__(self, Expression, PcdDataType, SymbolTable =3D {}): + def __init__(self, Expression, PcdDataType, SymbolTable =3D None): + if SymbolTable is None: + SymbolTable =3D {} super(RangeExpression, self).__init__(self, Expression, PcdDataTyp= e, SymbolTable) self._NoProcess =3D False if not isinstance(Expression, type('')): diff --git a/BaseTools/Source/Python/Common/StringUtils.py b/BaseTools/Sour= ce/Python/Common/StringUtils.py index 0febbc0034..73dafa797a 100644 --- a/BaseTools/Source/Python/Common/StringUtils.py +++ b/BaseTools/Source/Python/Common/StringUtils.py @@ -243,8 +243,10 @@ def SplitModuleType(Key): # # @retval NewList A new string list whose macros are replaced # -def ReplaceMacros(StringList, MacroDefinitions=3D{}, SelfReplacement=3DFal= se): +def ReplaceMacros(StringList, MacroDefinitions=3DNone, SelfReplacement=3DF= alse): NewList =3D [] + if MacroDefinitions is None: + MacroDefinitions =3D {} for String in StringList: if isinstance(String, type('')): NewList.append(ReplaceMacro(String, MacroDefinitions, SelfRepl= acement)) @@ -264,8 +266,10 @@ def ReplaceMacros(StringList, MacroDefinitions=3D{}, S= elfReplacement=3DFalse): # # @retval string The string whose macros are replaced # -def ReplaceMacro(String, MacroDefinitions=3D{}, SelfReplacement=3DFalse, R= aiseError=3DFalse): +def ReplaceMacro(String, MacroDefinitions=3DNone, SelfReplacement=3DFalse,= RaiseError=3DFalse): LastString =3D String + if MacroDefinitions is None: + MacroDefinitions =3D {} while String and MacroDefinitions: MacroUsed =3D GlobalData.gMacroRefPattern.findall(String) # no macro found in String, stop replacing @@ -298,7 +302,7 @@ def ReplaceMacro(String, MacroDefinitions=3D{}, SelfRep= lacement=3DFalse, RaiseError=3D # # @retval Path Formatted path # -def NormPath(Path, Defines=3D{}): +def NormPath(Path, Defines=3DNone): IsRelativePath =3D False if Path: if Path[0] =3D=3D '.': diff --git a/BaseTools/Source/Python/GenFds/AprioriSection.py b/BaseTools/S= ource/Python/GenFds/AprioriSection.py index be2d9f6de5..9f64c613eb 100644 --- a/BaseTools/Source/Python/GenFds/AprioriSection.py +++ b/BaseTools/Source/Python/GenFds/AprioriSection.py @@ -46,7 +46,9 @@ class AprioriSection (object): # @param Dict dictionary contains macro and its value # @retval string Generated file name # - def GenFfs (self, FvName, Dict =3D {}, IsMakefile =3D False): + def GenFfs (self, FvName, Dict =3D None, IsMakefile =3D False): + if Dict is None: + Dict =3D {} Buffer =3D BytesIO() if self.AprioriType =3D=3D "PEI": AprioriFileGuid =3D PEI_APRIORI_GUID diff --git a/BaseTools/Source/Python/GenFds/CompressSection.py b/BaseTools/= Source/Python/GenFds/CompressSection.py index 4dae5dba35..e62280fc16 100644 --- a/BaseTools/Source/Python/GenFds/CompressSection.py +++ b/BaseTools/Source/Python/GenFds/CompressSection.py @@ -49,7 +49,7 @@ class CompressSection (CompressSectionClassObject) : # @param Dict dictionary contains macro and its value # @retval tuple (Generated file name, section alignment) # - def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, Ff= sInf =3D None, Dict =3D {}, IsMakefile =3D False): + def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, Ff= sInf =3D None, Dict =3D None, IsMakefile =3D False): =20 if FfsInf is not None: self.CompType =3D FfsInf.__ExtendMacro__(self.CompType) @@ -59,6 +59,8 @@ class CompressSection (CompressSectionClassObject) : SectAlign =3D [] Index =3D 0 MaxAlign =3D None + if Dict is None: + Dict =3D {} for Sect in self.SectionList: Index =3D Index + 1 SecIndex =3D '%s.%d' %(SecNum, Index) diff --git a/BaseTools/Source/Python/GenFds/DataSection.py b/BaseTools/Sour= ce/Python/GenFds/DataSection.py index 60b94fbe08..f20fd70225 100644 --- a/BaseTools/Source/Python/GenFds/DataSection.py +++ b/BaseTools/Source/Python/GenFds/DataSection.py @@ -44,10 +44,12 @@ class DataSection (DataSectionClassObject): # @param Dict dictionary contains macro and its value # @retval tuple (Generated file name list, section alignment) # - def GenSection(self, OutputPath, ModuleName, SecNum, keyStringList, Ff= sFile =3D None, Dict =3D {}, IsMakefile =3D False): + def GenSection(self, OutputPath, ModuleName, SecNum, keyStringList, Ff= sFile =3D None, Dict =3D None, IsMakefile =3D False): # # Prepare the parameter of GenSection # + if Dict is None: + Dict =3D {} if FfsFile is not None: self.SectFileName =3D GenFdsGlobalVariable.ReplaceWorkspaceMac= ro(self.SectFileName) self.SectFileName =3D GenFdsGlobalVariable.MacroExtend(self.Se= ctFileName, Dict, FfsFile.CurrentArch) diff --git a/BaseTools/Source/Python/GenFds/EfiSection.py b/BaseTools/Sourc= e/Python/GenFds/EfiSection.py index 74f176cfef..db892df345 100644 --- a/BaseTools/Source/Python/GenFds/EfiSection.py +++ b/BaseTools/Source/Python/GenFds/EfiSection.py @@ -49,7 +49,7 @@ class EfiSection (EfiSectionClassObject): # @param Dict dictionary contains macro and its value # @retval tuple (Generated file name list, section alignment) # - def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, Ff= sInf =3D None, Dict =3D {}, IsMakefile =3D False) : + def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, Ff= sInf =3D None, Dict =3D None, IsMakefile =3D False) : =20 if self.FileName is not None and self.FileName.startswith('PCD('): self.FileName =3D GenFdsGlobalVariable.GetPcdValue(self.FileNa= me) @@ -76,6 +76,8 @@ class EfiSection (EfiSectionClassObject): =20 """If the file name was pointed out, add it in FileList""" FileList =3D [] + if Dict is None: + Dict =3D {} if Filename is not None: Filename =3D GenFdsGlobalVariable.MacroExtend(Filename, Dict) # check if the path is absolute or relative diff --git a/BaseTools/Source/Python/GenFds/FfsFileStatement.py b/BaseTools= /Source/Python/GenFds/FfsFileStatement.py index 9250361d14..9fb62b0a91 100644 --- a/BaseTools/Source/Python/GenFds/FfsFileStatement.py +++ b/BaseTools/Source/Python/GenFds/FfsFileStatement.py @@ -48,7 +48,7 @@ class FileStatement (FileStatementClassObject): # @param FvParentAddr Parent Fv base address # @retval string Generated FFS file name # - def GenFfs(self, Dict =3D {}, FvChildAddr=3D[], FvParentAddr=3DNone, I= sMakefile=3DFalse, FvName=3DNone): + def GenFfs(self, Dict =3D None, FvChildAddr=3D[], FvParentAddr=3DNone,= IsMakefile=3DFalse, FvName=3DNone): =20 if self.NameGuid and self.NameGuid.startswith('PCD('): PcdValue =3D GenFdsGlobalVariable.GetPcdValue(self.NameGuid) @@ -70,6 +70,9 @@ class FileStatement (FileStatementClassObject): if not os.path.exists(OutputDir): os.makedirs(OutputDir) =20 + if Dict is None: + Dict =3D {} + Dict.update(self.DefineVarDict) SectionAlignments =3D None if self.FvName: diff --git a/BaseTools/Source/Python/GenFds/FfsInfStatement.py b/BaseTools/= Source/Python/GenFds/FfsInfStatement.py index 43dbd0102f..20573ca28d 100644 --- a/BaseTools/Source/Python/GenFds/FfsInfStatement.py +++ b/BaseTools/Source/Python/GenFds/FfsInfStatement.py @@ -437,11 +437,12 @@ class FfsInfStatement(FfsInfStatementClassObject): # @param FvParentAddr Parent Fv base address # @retval string Generated FFS file name # - def GenFfs(self, Dict =3D {}, FvChildAddr =3D [], FvParentAddr=3DNone,= IsMakefile=3DFalse, FvName=3DNone): + def GenFfs(self, Dict =3D None, FvChildAddr =3D [], FvParentAddr=3DNon= e, IsMakefile=3DFalse, FvName=3DNone): # # Parse Inf file get Module related information # - + if Dict is None: + Dict =3D {} self.__InfParse__(Dict, IsGenFfs=3DTrue) Arch =3D self.GetCurrentArch() SrcFile =3D mws.join( GenFdsGlobalVariable.WorkSpaceDir, self.InfF= ileName); diff --git a/BaseTools/Source/Python/GenFds/Fv.py b/BaseTools/Source/Python= /GenFds/Fv.py index 206bd02005..16c944a0bd 100644 --- a/BaseTools/Source/Python/GenFds/Fv.py +++ b/BaseTools/Source/Python/GenFds/Fv.py @@ -71,9 +71,11 @@ class FV (object): # @param MacroDict macro value pair # @retval string Generated FV file path # - def AddToBuffer (self, Buffer, BaseAddress=3DNone, BlockSize=3D None, = BlockNum=3DNone, ErasePloarity=3D'1', MacroDict =3D {}, Flag=3DFalse): + def AddToBuffer (self, Buffer, BaseAddress=3DNone, BlockSize=3D None, = BlockNum=3DNone, ErasePloarity=3D'1', MacroDict =3D None, Flag=3DFalse): if BaseAddress is None and self.UiFvName.upper() + 'fv' in GenFdsG= lobalVariable.ImageBinDict: return GenFdsGlobalVariable.ImageBinDict[self.UiFvName.upper()= + 'fv'] + if MacroDict is None: + MacroDict =3D {} =20 # # Check whether FV in Capsule is in FD flash region. diff --git a/BaseTools/Source/Python/GenFds/FvImageSection.py b/BaseTools/S= ource/Python/GenFds/FvImageSection.py index b2953d822b..ff2d5ca3c0 100644 --- a/BaseTools/Source/Python/GenFds/FvImageSection.py +++ b/BaseTools/Source/Python/GenFds/FvImageSection.py @@ -47,9 +47,11 @@ class FvImageSection(FvImageSectionClassObject): # @param Dict dictionary contains macro and its value # @retval tuple (Generated file name, section alignment) # - def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, Ff= sInf =3D None, Dict =3D {}, IsMakefile =3D False): + def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, Ff= sInf =3D None, Dict =3D None, IsMakefile =3D False): =20 OutputFileList =3D [] + if Dict is None: + Dict =3D {} if self.FvFileType is not None: FileList, IsSect =3D Section.Section.GetFileList(FfsInf, self.= FvFileType, self.FvFileExtension) if IsSect : diff --git a/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py b/BaseT= ools/Source/Python/GenFds/GenFdsGlobalVariable.py index 3dc73c8f61..4d8b2bdee2 100644 --- a/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py +++ b/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py @@ -742,7 +742,7 @@ class GenFdsGlobalVariable: # @param MacroDict Dictionary that contains macro value pair # @staticmethod - def MacroExtend (Str, MacroDict=3D{}, Arch=3DDataType.TAB_COMMON): + def MacroExtend (Str, MacroDict=3DNone, Arch=3DDataType.TAB_COMMON): if Str is None: return None =20 diff --git a/BaseTools/Source/Python/GenFds/GuidSection.py b/BaseTools/Sour= ce/Python/GenFds/GuidSection.py index 530e2b3957..8db6e2feb3 100644 --- a/BaseTools/Source/Python/GenFds/GuidSection.py +++ b/BaseTools/Source/Python/GenFds/GuidSection.py @@ -50,7 +50,7 @@ class GuidSection(GuidSectionClassObject) : # @param Dict dictionary contains macro and its value # @retval tuple (Generated file name, section alignment) # - def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, Ff= sInf=3DNone, Dict=3D{}, IsMakefile=3DFalse): + def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, Ff= sInf=3DNone, Dict=3DNone, IsMakefile=3DFalse): # # Generate all section # @@ -66,6 +66,8 @@ class GuidSection(GuidSectionClassObject) : SectAlign =3D [] Index =3D 0 MaxAlign =3D None + if Dict is None: + Dict =3D {} if self.FvAddr !=3D []: FvAddrIsSet =3D True else: diff --git a/BaseTools/Source/Python/GenFds/OptRomFileStatement.py b/BaseTo= ols/Source/Python/GenFds/OptRomFileStatement.py index 0c54f48da2..1bd4d4572a 100644 --- a/BaseTools/Source/Python/GenFds/OptRomFileStatement.py +++ b/BaseTools/Source/Python/GenFds/OptRomFileStatement.py @@ -34,7 +34,10 @@ class OptRomFileStatement: # @param Dict dictionary contains macro and value pair # @retval string Generated FFS file name # - def GenFfs(self, Dict =3D {}, IsMakefile=3DFalse): + def GenFfs(self, Dict =3D None, IsMakefile=3DFalse): + + if Dict is None: + Dict =3D {} =20 if self.FileName is not None: self.FileName =3D GenFdsGlobalVariable.ReplaceWorkspaceMacro(s= elf.FileName) diff --git a/BaseTools/Source/Python/GenFds/Region.py b/BaseTools/Source/Py= thon/GenFds/Region.py index 7d5a3ab173..e95cfcf965 100644 --- a/BaseTools/Source/Python/GenFds/Region.py +++ b/BaseTools/Source/Python/GenFds/Region.py @@ -73,8 +73,10 @@ class Region(object): # @retval string Generated FV file path # =20 - def AddToBuffer(self, Buffer, BaseAddress, BlockSizeList, ErasePolarit= y, ImageBinDict, MacroDict=3D{}, Flag=3DFalse): + def AddToBuffer(self, Buffer, BaseAddress, BlockSizeList, ErasePolarit= y, ImageBinDict, MacroDict=3DNone, Flag=3DFalse): Size =3D self.Size + if MacroDict is None: + MacroDict =3D {} if not Flag: GenFdsGlobalVariable.InfLogger('\nGenerate Region at Offset 0x= %X' % self.Offset) GenFdsGlobalVariable.InfLogger(" Region Size =3D 0x%X" % Siz= e) diff --git a/BaseTools/Source/Python/GenFds/Section.py b/BaseTools/Source/P= ython/GenFds/Section.py index b238956634..2acb70f412 100644 --- a/BaseTools/Source/Python/GenFds/Section.py +++ b/BaseTools/Source/Python/GenFds/Section.py @@ -92,7 +92,7 @@ class Section (SectionClassObject): # @param FfsInf FfsInfStatement object that contains this sect= ion data # @param Dict dictionary contains macro and its value # - def GenSection(self, OutputPath, GuidName, SecNum, keyStringList, FfsI= nf =3D None, Dict =3D {}): + def GenSection(self, OutputPath, GuidName, SecNum, keyStringList, FfsI= nf =3D None, Dict =3D None): pass =20 ## GetFileList() method diff --git a/BaseTools/Source/Python/GenFds/UiSection.py b/BaseTools/Source= /Python/GenFds/UiSection.py index c9fc5997a1..f643058bd6 100644 --- a/BaseTools/Source/Python/GenFds/UiSection.py +++ b/BaseTools/Source/Python/GenFds/UiSection.py @@ -44,7 +44,7 @@ class UiSection (UiSectionClassObject): # @param Dict dictionary contains macro and its value # @retval tuple (Generated file name, section alignment) # - def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, Ff= sInf=3DNone, Dict=3D{}, IsMakefile =3D False): + def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, Ff= sInf=3DNone, Dict=3DNone, IsMakefile =3D False): # # Prepare the parameter of GenSection # @@ -58,6 +58,8 @@ class UiSection (UiSectionClassObject): if self.StringData is not None : NameString =3D self.StringData elif self.FileName is not None: + if Dict is None: + Dict =3D {} FileNameStr =3D GenFdsGlobalVariable.ReplaceWorkspaceMacro(sel= f.FileName) FileNameStr =3D GenFdsGlobalVariable.MacroExtend(FileNameStr, = Dict) FileObj =3D open(FileNameStr, 'r') diff --git a/BaseTools/Source/Python/GenFds/VerSection.py b/BaseTools/Sourc= e/Python/GenFds/VerSection.py index 1e7b391412..7280e80cb4 100644 --- a/BaseTools/Source/Python/GenFds/VerSection.py +++ b/BaseTools/Source/Python/GenFds/VerSection.py @@ -42,7 +42,7 @@ class VerSection (VerSectionClassObject): # @param Dict dictionary contains macro and its value # @retval tuple (Generated file name, section alignment) # - def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, Ff= sInf=3DNone, Dict=3D{}, IsMakefile =3D False): + def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, Ff= sInf=3DNone, Dict=3DNone, IsMakefile =3D False): # # Prepare the parameter of GenSection # @@ -61,6 +61,8 @@ class VerSection (VerSectionClassObject): if self.StringData: StringData =3D self.StringData elif self.FileName: + if Dict is None: + Dict =3D {} FileNameStr =3D GenFdsGlobalVariable.ReplaceWorkspaceMacro(sel= f.FileName) FileNameStr =3D GenFdsGlobalVariable.MacroExtend(FileNameStr, = Dict) FileObj =3D open(FileNameStr, 'r') --=20 2.14.1.windows.1 --_000_FAD0D7E0AE0FA54D987F6E72435CAFD50AFBCBD2SHSMSX101ccrcor_ Content-Disposition: attachment; filename="winmail.dat" Content-Transfer-Encoding: base64 Content-Type: application/ms-tnef; name="winmail.dat" eJ8+Itw6AQaQCAAEAAAAAAABAAEAAQeQBgAIAAAA5AQAAAAAAADoAAEJgAEAIQAAADJFRDdDMTg4 RUQ0OUE2NEE4OUIyREM2QTU5MTdFQTg4AGcHAQ2ABAACAAAAAgACAAEFgAMADgAAAOMHCQAMAAgA EgAbAAQAOAEBIIADAA4AAADjBwkADAAIABIAGwAEADgBAQiABwAYAAAASVBNLk1pY3Jvc29mdCBN YWlsLk5vdGUAMQgBBIABADsAAABbUEFUQ0hdIEJhc2VUb29sczpjaGFuZ2Ugc29tZSBpbmNvcnJl Y3QgcGFyYW1ldGVyIGRlZmF1bHRzAIoVAQuAAQAhAAAAMkVEN0MxODhFRDQ5QTY0QTg5QjJEQzZB NTkxN0VBODgAZwcBA5AGAHgjAAAzAAAAAgF/AAEAAABIAAAAPEZBRDBEN0UwQUUwRkE1NEQ5ODdG NkU3MjQzNUNBRkQ1MEFGQkNCRDJAU0hTTVNYMTAxLmNjci5jb3JwLmludGVsLmNvbT4ACwAfDgEA AAACAQkQAQAAANsZAADXGQAAgFoAAExaRnV5mNqDYQAKZmJpZAQAAGNjwHBnMTI1MgD+A0PwdGV4 dAH3AqQD4wIABGNoCsBzZXQwIO8HbQKDAFARTTIKgAa0AoCWfQqACMg7CWIxOQ7AvwnDFnIKMhZx AoAVYioJsHMJ8ASQYXQFsg5QA2Bzom8BgCBFeBHBbhgwXQZSdgSQF7YCEHIAwHR9CFBuGjEQIAXA BaAbZGSaIANSIBAiF7JcdgiQ5HdrC4BkNR1TBPAHQA0XcDAKcRfyYmttawZzAZAAICBCTV9C4EVH SU59CvwB8QvxER+wWjpoAkBwczrALy9idWd6AxALYCQudAcwbm8FoWUuAQWwZy9zaG93X0EiUS5j Z2k/DdA9QDE4NThcbAuAZScKgSUUGuEgRA5QdD3CXAAAfSxUaASQGeCzCsAZ4HBpADAHQGwEIIcL gBzAJtAgd2F5KBHFBAAgAQFhdWwFQAqx/mEHgBuiKMESASUFAHAcYO8mIioCIxAFQHUSABxgJ/Eo ZnVuJkBpAiBzLO4gK7Am0SxYIBHQGjAoEtMSABzAd28b0GESACzg/SUFSShQIpEb0BmkGSAHgP8n 4QWhCXArQSl4KPUOACUbNybAKMEKsHQRwCoCZ2+NC4BnHMAu4GZpeCiUBwQBClAlDENjOiBM0wdw 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 AG4AdABlAGwALgBjAG8AbQAAAAAAHwDlXwEAAAAyAAAAcwBpAHAAOgB6AGgAaQBqAHUAeAAuAGYA YQBuAEAAaQBuAHQAZQBsAC4AYwBvAG0AAAAAAB8AGgwBAAAAGAAAAEYAYQBuACwAIABaAGgAaQBq AHUAWAAAAB8AHwwBAAAAKgAAAHoAaABpAGoAdQB4AC4AZgBhAG4AQABpAG4AdABlAGwALgBjAG8A bQAAAAAAHwAeDAEAAAAKAAAAUwBNAFQAUAAAAAAAAgEZDAEAAABkAAAAAAAAAIErH6S+oxAZnW4A 3QEPVAIAAACARgBhAG4ALAAgAFoAaABpAGoAdQBYAAAAUwBNAFQAUAAAAHoAaABpAGoAdQB4AC4A ZgBhAG4AQABpAG4AdABlAGwALgBjAG8AbQAAAB8AAV0BAAAAKgAAAHoAaABpAGoAdQB4AC4AZgBh AG4AQABpAG4AdABlAGwALgBjAG8AbQAAAAAAHwD4PwEAAAAYAAAARgBhAG4ALAAgAFoAaABpAGoA dQBYAAAAHwAjQAEAAAAqAAAAegBoAGkAagB1AHgALgBmAGEAbgBAAGkAbgB0AGUAbAAuAGMAbwBt AAAAAAAfACJAAQAAAAoAAABTAE0AVABQAAAAAAACAfk/AQAAAGQAAAAAAAAAgSsfpL6jEBmdbgDd AQ9UAgAAAIBGAGEAbgAsACAAWgBoAGkAagB1AFgAAABTAE0AVABQAAAAegBoAGkAagB1AHgALgBm AGEAbgBAAGkAbgB0AGUAbAAuAGMAbwBtAAAAHwAJXQEAAAAqAAAAegBoAGkAagB1AHgALgBmAGEA bgBAAGkAbgB0AGUAbAAuAGMAbwBtAAAAAAALAEA6AQAAAB8AGgABAAAAEgAAAEkAUABNAC4ATgBv AHQAZQAAAAAAAwDxPwkEAAALAEA6AQAAAAMA/T/kBAAAAgELMAEAAAAQAAAALtfBiO1JpkqJstxq WRfqiAMAFwABAAAAQAA5AIDLIKdCadUBQAAIMI2aL6dCadUBHwAAgIYDAgAAAAAAwAAAAAAAAEYB AAAAHgAAAGEAYwBjAGUAcAB0AGwAYQBuAGcAdQBhAGcAZQAAAAAAAQAAAAwAAABlAG4ALQBVAFMA AAAfADcAAQAAAHYAAABbAFAAQQBUAEMASABdACAAQgBhAHMAZQBUAG8AbwBsAHMAOgBjAGgAYQBu AGcAZQAgAHMAbwBtAGUAIABpAG4AYwBvAHIAcgBlAGMAdAAgAHAAYQByAGEAbQBlAHQAZQByACAA ZABlAGYAYQB1AGwAdABzAAAAAAAfAD0AAQAAAAIAAAAAAAAAAwA2AAAAAAACAXEAAQAAABYAAAAB 1WlCpXsGASWFDptPDZ1cAidH1rcVAAAfAHAAAQAAAHYAAABbAFAAQQBUAEMASABdACAAQgBhAHMA ZQBUAG8AbwBsAHMAOgBjAGgAYQBuAGcAZQAgAHMAbwBtAGUAIABpAG4AYwBvAHIAcgBlAGMAdAAg AHAAYQByAGEAbQBlAHQAZQByACAAZABlAGYAYQB1AGwAdABzAAAAAAAfADUQAQAAAJAAAAA8AEYA QQBEADAARAA3AEUAMABBAEUAMABGAEEANQA0AEQAOQA4ADcARgA2AEUANwAyADQAMwA1AEMAQQBG AEQANQAwAEEARgBCAEMAQgBEADIAQABTAEgAUwBNAFMAWAAxADAAMQAuAGMAYwByAC4AYwBvAHIA cAAuAGkAbgB0AGUAbAAuAGMAbwBtAD4AAAADAN4/n04AAEAABzDJ1yqnQmnVAQIBCwABAAAAEAAA AC7XwYjtSaZKibLcalkX6ogDACYAAAAAAAIBRwABAAAAMwAAAGM9VVM7YT1NQ0k7cD1JbnRlbDts PVNIU01TWDEwMS0xOTA5MTIwODE4MjdaLTEwMTU0AAACARAwAQAAAEYAAAAAAAAAJne9OTvsOEmk phU9y6V7QgcA+tDX4K4PpU2Yf25yQ1yv1QAAAEQRXgAAppNoNoh2bEunStPrR5pMZAAACVTACQAA AAAfAPo/AQAAABgAAABGAGEAbgAsACAAWgBoAGkAagB1AFgAAAADAAlZAQAAAEAAAIAIIAYAAAAA AMAAAAAAAABGAAAAAL+FAACwNoKlQmnVAQsAAIAIIAYAAAAAAMAAAAAAAABGAAAAAIKFAAAAAAAA HwAAgIYDAgAAAAAAwAAAAAAAAEYBAAAAGAAAAGQAbABwAC0AcAByAG8AZAB1AGMAdAAAAAEAAAAa AAAAZABsAHAAZQAtAHcAaQBuAGQAbwB3AHMAAAAAAB8AAICGAwIAAAAAAMAAAAAAAABGAQAAABgA AABkAGwAcAAtAHYAZQByAHMAaQBvAG4AAAABAAAAEgAAADEAMQAuADIALgAwAC4ANgAAAAAAHwAA gIYDAgAAAAAAwAAAAAAAAEYBAAAAGgAAAGQAbABwAC0AcgBlAGEAYwB0AGkAbwBuAAAAAAABAAAA FAAAAG4AbwAtAGEAYwB0AGkAbwBuAAAAAwANNP0/AAAfAACAhgMCAAAAAADAAAAAAAAARgEAAAAg AAAAeAAtAG0AcwAtAGgAYQBzAC0AYQB0AHQAYQBjAGgAAAABAAAAAgAAAAAAAAAfAACAhgMCAAAA AADAAAAAAAAARgEAAAAiAAAAeAAtAG8AcgBpAGcAaQBuAGEAdABpAG4AZwAtAGkAcAAAAAAAAQAA ACAAAABbADEAMAAuADIAMwA5AC4AMQAyADcALgA0ADAAXQAAAMOW --_000_FAD0D7E0AE0FA54D987F6E72435CAFD50AFBCBD2SHSMSX101ccrcor_--