## @file\r
# parse FDF file\r
#\r
-# Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>\r
# Copyright (c) 2015, Hewlett Packard Enterprise Development, L.P.<BR>\r
#\r
# This program and the accompanying materials\r
import OptionRom\r
import OptRomInfStatement\r
import OptRomFileStatement\r
+import string\r
\r
from GenFdsGlobalVariable import GenFdsGlobalVariable\r
from Common.BuildToolError import *\r
from Common.String import ReplaceMacro\r
import uuid\r
from Common.Misc import tdict\r
-\r
+from Common.MultipleWorkspace import MultipleWorkspace as mws\r
import Common.LongFilePathOs as os\r
from Common.LongFilePathSupport import OpenLongFilePath as open\r
from Capsule import EFI_CERT_TYPE_PKCS7_GUID\r
from Capsule import EFI_CERT_TYPE_RSA2048_SHA256_GUID\r
+from Common.RangeExpression import RangeExpression\r
+from Common.FdfParserLite import FileExtensionPattern,TokenFindPattern\r
\r
##define T_CHAR_SPACE ' '\r
##define T_CHAR_NULL '\0'\r
def __str__(self):\r
return self.Message\r
\r
-## The MACRO class that used to record macro value data when parsing include file\r
-#\r
-#\r
-class MacroProfile :\r
- ## The constructor\r
- #\r
- # @param self The object pointer\r
- # @param FileName The file that to be parsed\r
- #\r
- def __init__(self, FileName, Line):\r
- self.FileName = FileName\r
- self.DefinedAtLine = Line\r
- self.MacroName = None\r
- self.MacroValue = None\r
-\r
## The Include file content class that used to record file data when parsing include file\r
#\r
# May raise Exception when opening file.\r
fsock = open(FileName, "rb", 0)\r
try:\r
self.FileLinesList = fsock.readlines()\r
+ for index, line in enumerate(self.FileLinesList):\r
+ if not line.endswith('\n'):\r
+ self.FileLinesList[index] += '\n'\r
+\r
finally:\r
fsock.close()\r
\r
if GenFdsGlobalVariable.WorkSpaceDir == '':\r
GenFdsGlobalVariable.WorkSpaceDir = os.getenv("WORKSPACE")\r
\r
- ## __IsWhiteSpace() method\r
- #\r
- # Whether char at current FileBufferPos is whitespace\r
- #\r
- # @param self The object pointer\r
- # @param Char The char to test\r
- # @retval True The char is a kind of white space\r
- # @retval False The char is NOT a kind of white space\r
- #\r
- def __IsWhiteSpace(self, Char):\r
- if Char in (T_CHAR_NULL, T_CHAR_CR, T_CHAR_SPACE, T_CHAR_TAB, T_CHAR_LF):\r
- return True\r
- else:\r
- return False\r
-\r
## __SkipWhiteSpace() method\r
#\r
# Skip white spaces from current char, return number of chars skipped\r
def PreprocessIncludeFile(self):\r
# nested include support\r
Processed = False\r
+ MacroDict = {}\r
while self.__GetNextToken():\r
\r
- if self.__Token == '!include':\r
+ if self.__Token == 'DEFINE':\r
+ if not self.__GetNextToken():\r
+ raise Warning("expected Macro name", self.FileName, self.CurrentLineNumber)\r
+ Macro = self.__Token\r
+ if not self.__IsToken( "="):\r
+ raise Warning("expected '='", self.FileName, self.CurrentLineNumber)\r
+ Value = self.__GetExpression()\r
+ MacroDict[Macro] = Value\r
+\r
+ elif self.__Token == '!include':\r
Processed = True\r
IncludeLine = self.CurrentLineNumber\r
IncludeOffset = self.CurrentOffsetWithinLine - len('!include')\r
if not self.__GetNextToken():\r
raise Warning("expected include file name", self.FileName, self.CurrentLineNumber)\r
IncFileName = self.__Token\r
- __IncludeMacros = {}\r
- for Macro in ['WORKSPACE', 'ECP_SOURCE', 'EFI_SOURCE', 'EDK_SOURCE']:\r
+ PreIndex = 0\r
+ StartPos = IncFileName.find('$(', PreIndex)\r
+ EndPos = IncFileName.find(')', StartPos+2)\r
+ while StartPos != -1 and EndPos != -1:\r
+ Macro = IncFileName[StartPos+2 : EndPos]\r
MacroVal = self.__GetMacroValue(Macro)\r
- if MacroVal:\r
- __IncludeMacros[Macro] = MacroVal\r
+ if not MacroVal:\r
+ if Macro in MacroDict:\r
+ MacroVal = MacroDict[Macro]\r
+ if MacroVal is not None:\r
+ IncFileName = IncFileName.replace('$(' + Macro + ')', MacroVal, 1)\r
+ if MacroVal.find('$(') != -1:\r
+ PreIndex = StartPos\r
+ else:\r
+ PreIndex = StartPos + len(MacroVal)\r
+ else:\r
+ raise Warning("The Macro %s is not defined" %Macro, self.FileName, self.CurrentLineNumber)\r
+ StartPos = IncFileName.find('$(', PreIndex)\r
+ EndPos = IncFileName.find(')', StartPos+2)\r
\r
- try:\r
- IncludedFile = NormPath(ReplaceMacro(IncFileName, __IncludeMacros, RaiseError=True))\r
- except:\r
- raise Warning("only these system environment variables are permitted to start the path of the included file: "\r
- "$(WORKSPACE), $(ECP_SOURCE), $(EFI_SOURCE), $(EDK_SOURCE)",\r
- self.FileName, self.CurrentLineNumber)\r
+ IncludedFile = NormPath(IncFileName)\r
#\r
# First search the include file under the same directory as FDF file\r
#\r
# list index of the insertion, note that line number is 'CurrentLine + 1'\r
InsertAtLine = CurrentLine\r
ParentProfile = GetParentAtLine (CurrentLine)\r
- if ParentProfile != None:\r
+ if ParentProfile is not None:\r
ParentProfile.IncludeFileList.insert(0, IncFileProfile)\r
IncFileProfile.Level = ParentProfile.Level + 1\r
IncFileProfile.InsertStartLineNumber = InsertAtLine + 1\r
# Preprocess done.\r
self.Rewind()\r
\r
- def __GetIfListCurrentItemStat(self, IfList):\r
+ @staticmethod\r
+ def __GetIfListCurrentItemStat(IfList):\r
if len(IfList) == 0:\r
return True\r
\r
while StartPos != -1 and EndPos != -1 and self.__Token not in ['!ifdef', '!ifndef', '!if', '!elseif']:\r
MacroName = CurLine[StartPos+2 : EndPos]\r
MacorValue = self.__GetMacroValue(MacroName)\r
- if MacorValue != None:\r
+ if MacorValue is not None:\r
CurLine = CurLine.replace('$(' + MacroName + ')', MacorValue, 1)\r
if MacorValue.find('$(') != -1:\r
PreIndex = StartPos\r
\r
MacroDict.update(GlobalData.gGlobalDefines)\r
MacroDict.update(GlobalData.gCommandLineDefines)\r
+ if GlobalData.BuildOptionPcd:\r
+ for Item in GlobalData.BuildOptionPcd:\r
+ if type(Item) is tuple:\r
+ continue\r
+ PcdName, TmpValue = Item.split("=")\r
+ TmpValue = BuildOptionValue(TmpValue, {})\r
+ MacroDict[PcdName.strip()] = TmpValue\r
# Highest priority\r
\r
return MacroDict\r
\r
if not self.__GetNextToken():\r
return False\r
- p = re.compile('[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}')\r
- if p.match(self.__Token) != None:\r
+ if gGuidPattern.match(self.__Token) is not None:\r
return True\r
else:\r
self.__UndoToken()\r
if Scope in ['UINT64', 'UINT8']:\r
ValueNumber = 0\r
try:\r
- if Value.upper().startswith('0X'):\r
- ValueNumber = int (Value, 16)\r
- else:\r
- ValueNumber = int (Value)\r
+ ValueNumber = int (Value, 0)\r
except:\r
EdkLogger.error("FdfParser", FORMAT_INVALID, "The value is not valid dec or hex number for %s." % Name)\r
if ValueNumber < 0:\r
\r
self.__GetOneChar()\r
\r
- ## __HexDigit() method\r
- #\r
- # Whether char input is a Hex data bit\r
- #\r
- # @param self The object pointer\r
- # @param TempChar The char to test\r
- # @retval True The char is a Hex data bit\r
- # @retval False The char is NOT a Hex data bit\r
- #\r
- def __HexDigit(self, TempChar):\r
- if (TempChar >= 'a' and TempChar <= 'f') or (TempChar >= 'A' and TempChar <= 'F') \\r
- or (TempChar >= '0' and TempChar <= '9'):\r
- return True\r
- else:\r
- return False\r
-\r
def __IsHex(self, HexStr):\r
if not HexStr.upper().startswith("0X"):\r
return False\r
if len(self.__Token) <= 2:\r
return False\r
- charList = [c for c in HexStr[2 : ] if not self.__HexDigit( c)]\r
- if len(charList) == 0:\r
- return True\r
- else:\r
- return False\r
+ return True if all(x in string.hexdigits for x in HexStr[2:]) else False\r
+\r
## __GetNextHexNumber() method\r
#\r
# Get next HEX data before a seperator\r
#'\n\tGot Token: \"%s\" from File %s\n' % (self.__Token, FileLineTuple[0]) + \\r
# At this point, the closest parent would be the included file itself\r
Profile = GetParentAtLine(X.OriginalLineNumber)\r
- if Profile != None:\r
+ if Profile is not None:\r
X.Message += ' near line %d, column %d: %s' \\r
% (X.LineNumber, 0, Profile.FileLinesList[X.LineNumber-1])\r
else:\r
while self.__GetTokenStatements(FdObj):\r
pass\r
for Attr in ("BaseAddress", "Size", "ErasePolarity"):\r
- if getattr(FdObj, Attr) == None:\r
+ if getattr(FdObj, Attr) is None:\r
self.__GetNextToken()\r
raise Warning("Keyword %s missing" % Attr, self.FileName, self.CurrentLineNumber)\r
\r
IsBlock = True\r
\r
Item = Obj.BlockSizeList[-1]\r
- if Item[0] == None or Item[1] == None:\r
+ if Item[0] is None or Item[1] is None:\r
raise Warning("expected block statement", self.FileName, self.CurrentLineNumber)\r
return IsBlock\r
\r
#\r
def __GetRegionLayout(self, Fd):\r
Offset = self.__CalcRegionExpr() \r
- if Offset == None:\r
+ if Offset is None:\r
return False\r
\r
RegionObj = Region.Region()\r
raise Warning("expected '|'", self.FileName, self.CurrentLineNumber)\r
\r
Size = self.__CalcRegionExpr()\r
- if Size == None:\r
+ if Size is None:\r
raise Warning("expected Region Size", self.FileName, self.CurrentLineNumber)\r
RegionObj.Size = Size\r
\r
"WRITE_DISABLED_CAP", "WRITE_STATUS", "READ_ENABLED_CAP", \\r
"READ_DISABLED_CAP", "READ_STATUS", "READ_LOCK_CAP", \\r
"READ_LOCK_STATUS", "WRITE_LOCK_CAP", "WRITE_LOCK_STATUS", \\r
- "WRITE_POLICY_RELIABLE", "WEAK_ALIGNMENT"):\r
+ "WRITE_POLICY_RELIABLE", "WEAK_ALIGNMENT", "FvUsedSizeEnable"):\r
self.__UndoToken()\r
return False\r
\r
\r
def __GetFvExtEntryStatement(self, FvObj):\r
\r
- if not self.__IsKeyword( "FV_EXT_ENTRY"):\r
+ if not (self.__IsKeyword( "FV_EXT_ENTRY") or self.__IsKeyword( "FV_EXT_ENTRY_TYPE")):\r
return False\r
\r
if not self.__IsKeyword ("TYPE"):\r
if not self.__GetNextToken():\r
raise Warning("expected INF file path", self.FileName, self.CurrentLineNumber)\r
ffsInf.InfFileName = self.__Token\r
+ if not ffsInf.InfFileName.endswith('.inf'):\r
+ raise Warning("expected .inf file path", self.FileName, self.CurrentLineNumber)\r
\r
ffsInf.CurrentLineNum = self.CurrentLineNumber\r
ffsInf.CurrentLineContent = self.__CurrentLine()\r
#\r
# Check whether reloc strip flag can be set for a file type.\r
#\r
- # @param self The object pointer\r
# @param FileType The file type to check with\r
# @retval True This type could have relocation strip flag\r
# @retval False No way to have it\r
#\r
-\r
- def __FileCouldHaveRelocFlag (self, FileType):\r
+ @staticmethod\r
+ def __FileCouldHaveRelocFlag (FileType):\r
if FileType in ('SEC', 'PEI_CORE', 'PEIM', 'PEI_DXE_COMBO'):\r
return True\r
else:\r
#\r
# Check whether reloc strip flag can be set for a section type.\r
#\r
- # @param self The object pointer\r
# @param SectionType The section type to check with\r
# @retval True This type could have relocation strip flag\r
# @retval False No way to have it\r
#\r
-\r
- def __SectionCouldHaveRelocFlag (self, SectionType):\r
+ @staticmethod\r
+ def __SectionCouldHaveRelocFlag (SectionType):\r
if SectionType in ('TE', 'PE32'):\r
return True\r
else:\r
while True:\r
AlignValue = None\r
if self.__GetAlignment():\r
- if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):\r
+ if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K", "128K",\r
+ "256K", "512K", "1M", "2M", "4M", "8M", "16M"):\r
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
- AlignValue = self.__Token\r
+ #For FFS, Auto is default option same to ""\r
+ if not self.__Token == "Auto":\r
+ AlignValue = self.__Token\r
if not self.__GetNextToken():\r
raise Warning("expected Filename value", self.FileName, self.CurrentLineNumber)\r
\r
def __GetFileOpts(self, FfsFileObj):\r
\r
if self.__GetNextToken():\r
- Pattern = re.compile(r'([a-zA-Z0-9\-]+|\$\(TARGET\)|\*)_([a-zA-Z0-9\-]+|\$\(TOOL_CHAIN_TAG\)|\*)_([a-zA-Z0-9\-]+|\$\(ARCH\)|\*)')\r
- if Pattern.match(self.__Token):\r
+ if TokenFindPattern.match(self.__Token):\r
FfsFileObj.KeyStringList.append(self.__Token)\r
if self.__IsToken(","):\r
while self.__GetNextToken():\r
- if not Pattern.match(self.__Token):\r
+ if not TokenFindPattern.match(self.__Token):\r
raise Warning("expected KeyString \"Target_Tag_Arch\"", self.FileName, self.CurrentLineNumber)\r
FfsFileObj.KeyStringList.append(self.__Token)\r
\r
FfsFileObj.CheckSum = True\r
\r
if self.__GetAlignment():\r
- if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):\r
+ if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K", "128K",\r
+ "256K", "512K", "1M", "2M", "4M", "8M", "16M"):\r
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
#For FFS, Auto is default option same to ""\r
if not self.__Token == "Auto":\r
\r
AlignValue = None\r
if self.__GetAlignment():\r
- if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):\r
+ if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K", "128K",\r
+ "256K", "512K", "1M", "2M", "4M", "8M", "16M"):\r
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
AlignValue = self.__Token\r
\r
\r
FvImageSectionObj = FvImageSection.FvImageSection()\r
FvImageSectionObj.Alignment = AlignValue\r
- if FvObj != None:\r
+ if FvObj is not None:\r
FvImageSectionObj.Fv = FvObj\r
FvImageSectionObj.FvName = None\r
else:\r
\r
AlignValue = None\r
if self.__GetAlignment():\r
- if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):\r
+ if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K", "128K",\r
+ "256K", "512K", "1M", "2M", "4M", "8M", "16M"):\r
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
AlignValue = self.__Token\r
\r
\r
if (FmpData.MonotonicCount and not FmpData.Certificate_Guid) or (not FmpData.MonotonicCount and FmpData.Certificate_Guid):\r
EdkLogger.error("FdfParser", FORMAT_INVALID, "CERTIFICATE_GUID and MONOTONIC_COUNT must be work as a pair.")\r
- # remove CERTIFICATE_GUID and MONOTONIC_COUNT from FmpKeyList, since these keys are optional\r
- if 'CERTIFICATE_GUID' in FmpKeyList:\r
- FmpKeyList.remove('CERTIFICATE_GUID')\r
- if 'MONOTONIC_COUNT' in FmpKeyList:\r
- FmpKeyList.remove('MONOTONIC_COUNT')\r
- if FmpKeyList:\r
- raise Warning("Missing keywords %s in FMP payload section." % ', '.join(FmpKeyList), self.FileName, self.CurrentLineNumber)\r
+\r
+ # Only the IMAGE_TYPE_ID is required item\r
+ if FmpKeyList and 'IMAGE_TYPE_ID' in FmpKeyList:\r
+ raise Warning("Missing keywords IMAGE_TYPE_ID in FMP payload section.", self.FileName, self.CurrentLineNumber)\r
# get the Image file and Vendor code file\r
self.__GetFMPCapsuleData(FmpData)\r
if not FmpData.ImageFile:\r
AnyFileName = self.__Token\r
self.__VerifyFile(AnyFileName)\r
\r
+ if not os.path.isabs(AnyFileName):\r
+ AnyFileName = mws.join(GenFdsGlobalVariable.WorkSpaceDir, AnyFileName)\r
+\r
return AnyFileName\r
\r
## __GetAnyFileStatement() method\r
"DXE_SMM_DRIVER", "DXE_RUNTIME_DRIVER", \\r
"UEFI_DRIVER", "UEFI_APPLICATION", "USER_DEFINED", "DEFAULT", "BASE", \\r
"SECURITY_CORE", "COMBINED_PEIM_DRIVER", "PIC_PEIM", "RELOCATABLE_PEIM", \\r
- "PE32_PEIM", "BS_DRIVER", "RT_DRIVER", "SAL_RT_DRIVER", "APPLICATION", "ACPITABLE", "SMM_CORE"):\r
+ "PE32_PEIM", "BS_DRIVER", "RT_DRIVER", "SAL_RT_DRIVER", "APPLICATION", "ACPITABLE", "SMM_CORE", "MM_STANDALONE", "MM_CORE_STANDALONE"):\r
raise Warning("Unknown Module type '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
return self.__Token\r
\r
\r
Ext = ""\r
if self.__GetNextToken():\r
- Pattern = re.compile(r'([a-zA-Z][a-zA-Z0-9]*)')\r
- if Pattern.match(self.__Token):\r
+ if FileExtensionPattern.match(self.__Token):\r
Ext = self.__Token\r
return '.' + Ext\r
else:\r
\r
Type = self.__Token.strip().upper()\r
if Type not in ("RAW", "FREEFORM", "SEC", "PEI_CORE", "PEIM",\\r
- "PEI_DXE_COMBO", "DRIVER", "DXE_CORE", "APPLICATION", "FV_IMAGE", "SMM", "SMM_CORE"):\r
+ "PEI_DXE_COMBO", "DRIVER", "DXE_CORE", "APPLICATION", "FV_IMAGE", "SMM", "SMM_CORE", "MM_STANDALONE", "MM_CORE_STANDALONE"):\r
raise Warning("Unknown FV type '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
\r
if not self.__IsToken("="):\r
\r
KeyStringList = []\r
if self.__GetNextToken():\r
- Pattern = re.compile(r'([a-zA-Z0-9\-]+|\$\(TARGET\)|\*)_([a-zA-Z0-9\-]+|\$\(TOOL_CHAIN_TAG\)|\*)_([a-zA-Z0-9\-]+|\$\(ARCH\)|\*)')\r
- if Pattern.match(self.__Token):\r
+ if TokenFindPattern.match(self.__Token):\r
KeyStringList.append(self.__Token)\r
if self.__IsToken(","):\r
while self.__GetNextToken():\r
- if not Pattern.match(self.__Token):\r
+ if not TokenFindPattern.match(self.__Token):\r
raise Warning("expected KeyString \"Target_Tag_Arch\"", self.FileName, self.CurrentLineNumber)\r
KeyStringList.append(self.__Token)\r
\r
\r
AlignValue = ""\r
if self.__GetAlignment():\r
- if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):\r
+ if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K", "128K",\r
+ "256K", "512K", "1M", "2M", "4M", "8M", "16M"):\r
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
#For FFS, Auto is default option same to ""\r
if not self.__Token == "Auto":\r
Rule.CheckSum = CheckSum\r
Rule.Fixed = Fixed\r
Rule.KeyStringList = KeyStringList\r
- if KeepReloc != None:\r
+ if KeepReloc is not None:\r
Rule.KeepReloc = KeepReloc\r
\r
while True:\r
\r
SectAlignment = ""\r
if self.__GetAlignment():\r
- if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):\r
+ if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K", "128K",\r
+ "256K", "512K", "1M", "2M", "4M", "8M", "16M"):\r
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
if self.__Token == 'Auto' and (not SectionName == 'PE32') and (not SectionName == 'TE'):\r
raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)\r
Rule.CheckSum = CheckSum\r
Rule.Fixed = Fixed\r
Rule.KeyStringList = KeyStringList\r
- if KeepReloc != None:\r
+ if KeepReloc is not None:\r
Rule.KeepReloc = KeepReloc\r
Rule.FileExtension = Ext\r
Rule.FileName = self.__Token\r
FvImageSectionObj.FvFileType = self.__Token\r
\r
if self.__GetAlignment():\r
- if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):\r
+ if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K", "128K",\r
+ "256K", "512K", "1M", "2M", "4M", "8M", "16M"):\r
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
FvImageSectionObj.Alignment = self.__Token\r
\r
EfiSectionObj.BuildNum = self.__Token\r
\r
if self.__GetAlignment():\r
- if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):\r
+ if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K", "128K",\r
+ "256K", "512K", "1M", "2M", "4M", "8M", "16M"):\r
raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
if self.__Token == 'Auto' and (not SectionName == 'PE32') and (not SectionName == 'TE'):\r
raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)\r
EfiSectionObj.KeepReloc = False\r
else:\r
EfiSectionObj.KeepReloc = True\r
- if Obj.KeepReloc != None and Obj.KeepReloc != EfiSectionObj.KeepReloc:\r
+ if Obj.KeepReloc is not None and Obj.KeepReloc != EfiSectionObj.KeepReloc:\r
raise Warning("Section type %s has reloc strip flag conflict with Rule" % EfiSectionObj.SectionType, self.FileName, self.CurrentLineNumber)\r
else:\r
raise Warning("Section type %s could not have reloc strip flag" % EfiSectionObj.SectionType, self.FileName, self.CurrentLineNumber)\r
#\r
# Get whether a section could be optional\r
#\r
- # @param self The object pointer\r
# @param SectionType The section type to check\r
# @retval True section could be optional\r
# @retval False section never optional\r
#\r
- def __RuleSectionCouldBeOptional(self, SectionType):\r
+ @staticmethod\r
+ def __RuleSectionCouldBeOptional(SectionType):\r
if SectionType in ("DXE_DEPEX", "UI", "VERSION", "PEI_DEPEX", "RAW", "SMM_DEPEX"):\r
return True\r
else:\r
#\r
# Get whether a section could have build number information\r
#\r
- # @param self The object pointer\r
# @param SectionType The section type to check\r
# @retval True section could have build number information\r
# @retval False section never have build number information\r
#\r
- def __RuleSectionCouldHaveBuildNum(self, SectionType):\r
+ @staticmethod\r
+ def __RuleSectionCouldHaveBuildNum(SectionType):\r
if SectionType in ("VERSION"):\r
return True\r
else:\r
#\r
# Get whether a section could have string\r
#\r
- # @param self The object pointer\r
# @param SectionType The section type to check\r
# @retval True section could have string\r
# @retval False section never have string\r
#\r
- def __RuleSectionCouldHaveString(self, SectionType):\r
+ @staticmethod\r
+ def __RuleSectionCouldHaveString(SectionType):\r
if SectionType in ("UI", "VERSION"):\r
return True\r
else:\r
raise Warning("expected Component type", self.FileName, self.CurrentLineNumber)\r
if self.__Token not in ("FIT", "PAL_B", "PAL_A", "OEM"):\r
if not self.__Token.startswith("0x") or len(self.__Token) < 3 or len(self.__Token) > 4 or \\r
- not self.__HexDigit(self.__Token[2]) or not self.__HexDigit(self.__Token[-1]):\r
+ not self.__Token[2] in string.hexdigits or not self.__Token[-1] in string.hexdigits:\r
raise Warning("Unknown location type '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
CompStatementObj.CompType = self.__Token\r
\r
raise Warning("expected Component version", self.FileName, self.CurrentLineNumber)\r
\r
Pattern = re.compile('-$|[0-9a-fA-F]{1,2}\.[0-9a-fA-F]{1,2}$', re.DOTALL)\r
- if Pattern.match(self.__Token) == None:\r
+ if Pattern.match(self.__Token) is None:\r
raise Warning("Unknown version format '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
CompStatementObj.CompVer = self.__Token\r
\r
for elementRegionData in elementRegion.RegionDataList:\r
if elementRegionData.endswith(".cap"):\r
continue\r
- if elementRegionData != None and elementRegionData.upper() not in CapList:\r
+ if elementRegionData is not None and elementRegionData.upper() not in CapList:\r
CapList.append(elementRegionData.upper())\r
return CapList\r
\r
def __GetReferencedFdCapTuple(self, CapObj, RefFdList = [], RefFvList = []):\r
\r
for CapsuleDataObj in CapObj.CapsuleDataList :\r
- if hasattr(CapsuleDataObj, 'FvName') and CapsuleDataObj.FvName != None and CapsuleDataObj.FvName.upper() not in RefFvList:\r
+ if hasattr(CapsuleDataObj, 'FvName') and CapsuleDataObj.FvName is not None and CapsuleDataObj.FvName.upper() not in RefFvList:\r
RefFvList.append (CapsuleDataObj.FvName.upper())\r
- elif hasattr(CapsuleDataObj, 'FdName') and CapsuleDataObj.FdName != None and CapsuleDataObj.FdName.upper() not in RefFdList:\r
+ elif hasattr(CapsuleDataObj, 'FdName') and CapsuleDataObj.FdName is not None and CapsuleDataObj.FdName.upper() not in RefFdList:\r
RefFdList.append (CapsuleDataObj.FdName.upper()) \r
- elif CapsuleDataObj.Ffs != None:\r
+ elif CapsuleDataObj.Ffs is not None:\r
if isinstance(CapsuleDataObj.Ffs, FfsFileStatement.FileStatement):\r
- if CapsuleDataObj.Ffs.FvName != None and CapsuleDataObj.Ffs.FvName.upper() not in RefFvList:\r
+ if CapsuleDataObj.Ffs.FvName is not None and CapsuleDataObj.Ffs.FvName.upper() not in RefFvList:\r
RefFvList.append(CapsuleDataObj.Ffs.FvName.upper())\r
- elif CapsuleDataObj.Ffs.FdName != None and CapsuleDataObj.Ffs.FdName.upper() not in RefFdList:\r
+ elif CapsuleDataObj.Ffs.FdName is not None and CapsuleDataObj.Ffs.FdName.upper() not in RefFdList:\r
RefFdList.append(CapsuleDataObj.Ffs.FdName.upper())\r
else:\r
self.__GetReferencedFdFvTupleFromSection(CapsuleDataObj.Ffs, RefFdList, RefFvList)\r
for elementRegionData in elementRegion.RegionDataList:\r
if elementRegionData.endswith(".fv"):\r
continue\r
- if elementRegionData != None and elementRegionData.upper() not in FvList:\r
+ if elementRegionData is not None and elementRegionData.upper() not in FvList:\r
FvList.append(elementRegionData.upper())\r
return FvList\r
\r
\r
for FfsObj in FvObj.FfsList:\r
if isinstance(FfsObj, FfsFileStatement.FileStatement):\r
- if FfsObj.FvName != None and FfsObj.FvName.upper() not in RefFvList:\r
+ if FfsObj.FvName is not None and FfsObj.FvName.upper() not in RefFvList:\r
RefFvList.append(FfsObj.FvName.upper())\r
- elif FfsObj.FdName != None and FfsObj.FdName.upper() not in RefFdList:\r
+ elif FfsObj.FdName is not None and FfsObj.FdName.upper() not in RefFdList:\r
RefFdList.append(FfsObj.FdName.upper())\r
else:\r
self.__GetReferencedFdFvTupleFromSection(FfsObj, RefFdList, RefFvList)\r
while SectionStack != []:\r
SectionObj = SectionStack.pop()\r
if isinstance(SectionObj, FvImageSection.FvImageSection):\r
- if SectionObj.FvName != None and SectionObj.FvName.upper() not in FvList:\r
+ if SectionObj.FvName is not None and SectionObj.FvName.upper() not in FvList:\r
FvList.append(SectionObj.FvName.upper())\r
- if SectionObj.Fv != None and SectionObj.Fv.UiFvName != None and SectionObj.Fv.UiFvName.upper() not in FvList:\r
+ if SectionObj.Fv is not None and SectionObj.Fv.UiFvName is not None and SectionObj.Fv.UiFvName.upper() not in FvList:\r
FvList.append(SectionObj.Fv.UiFvName.upper())\r
self.__GetReferencedFdFvTuple(SectionObj.Fv, FdList, FvList)\r
\r
\r
return False\r
\r
+ def GetAllIncludedFile (self):\r
+ global AllIncludeFileList\r
+ return AllIncludeFileList\r
+\r
if __name__ == "__main__":\r
import sys\r
try:\r