## @file ParserValidate.py\r
+# Functions for parser validation\r
#\r
-# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>\r
#\r
# This program and the accompanying materials are licensed and made available \r
# under the terms and conditions of the BSD License which accompanies this \r
from Library.DataType import COMPONENT_TYPE_LIST\r
from Library.DataType import PCD_USAGE_TYPE_LIST_OF_MODULE\r
from Library.DataType import TAB_SPACE_SPLIT\r
-from Library.String import GetSplitValueList\r
+from Library.StringUtils import GetSplitValueList\r
from Library.ExpressionValidate import IsValidBareCString\r
from Library.ExpressionValidate import IsValidFeatureFlagExp\r
+from Common.MultipleWorkspace import MultipleWorkspace as mws\r
\r
## __HexDigit() method\r
#\r
#\r
def IsValidToolFamily(ToolFamily):\r
ReIsValieFamily = re.compile(r"^[A-Z]+[A-Za-z0-9]{0,}$", re.DOTALL)\r
- if ReIsValieFamily.match(ToolFamily) == None:\r
+ if ReIsValieFamily.match(ToolFamily) is None:\r
return False\r
return True\r
\r
if Arch == 'common':\r
return True\r
ReIsValieArch = re.compile(r"^[a-zA-Z]+[a-zA-Z0-9]{0,}$", re.DOTALL)\r
- if ReIsValieArch.match(Arch) == None:\r
+ if ReIsValieArch.match(Arch) is None:\r
return False\r
return True\r
\r
return True\r
\r
ReIsValidFamily = re.compile(r"^[A-Z]+[A-Za-z0-9]{0,}$", re.DOTALL)\r
- if ReIsValidFamily.match(Family) == None:\r
+ if ReIsValidFamily.match(Family) is None:\r
return False\r
return True\r
\r
ReIsValidBuildOption1 = re.compile(r"^\s*(\*)|([A-Z][a-zA-Z0-9]*)$")\r
ReIsValidBuildOption2 = re.compile(r"^\s*(\*)|([a-zA-Z][a-zA-Z0-9]*)$")\r
\r
- if ReIsValidBuildOption1.match(ToolOptionList[0]) == None:\r
+ if ReIsValidBuildOption1.match(ToolOptionList[0]) is None:\r
return False\r
\r
- if ReIsValidBuildOption1.match(ToolOptionList[1]) == None:\r
+ if ReIsValidBuildOption1.match(ToolOptionList[1]) is None:\r
return False\r
\r
- if ReIsValidBuildOption2.match(ToolOptionList[2]) == None:\r
+ if ReIsValidBuildOption2.match(ToolOptionList[2]) is None:\r
return False\r
\r
if ToolOptionList[3] == "*" and ToolOptionList[4] not in ['FAMILY', 'DLL', 'DPATH']:\r
\r
Path = os.path.normpath(Path).replace('\\', '/')\r
Root = os.path.normpath(Root).replace('\\', '/')\r
- FullPath = os.path.normpath(os.path.join(Root, Path)).replace('\\', '/')\r
+ FullPath = mws.join(Root, Path)\r
\r
if not os.path.exists(FullPath):\r
return False\r
if os.path.isabs(Path):\r
return False\r
else:\r
- if Path[1:2] == ':' or Path.find('\\') >=0:\r
+ if Path[1:2] == ':':\r
return False\r
if os.path.isabs(Path):\r
return False\r
#\r
# Index may out of bound\r
#\r
- if type(List[Index]) != type(1) or \\r
+ if not isinstance(List[Index], type(1)) or \\r
len(Value) > List[Index] or len(Value) < 3:\r
return False\r
\r
ReIsValidDecVersion = re.compile(r"[0-9]+\.?[0-9]+$")\r
else:\r
ReIsValidDecVersion = re.compile(r"[0-9]+$")\r
- if ReIsValidDecVersion.match(Word) == None:\r
+ if ReIsValidDecVersion.match(Word) is None:\r
return False \r
return True\r
\r
# \r
def IsValidHexVersion(Word):\r
ReIsValidHexVersion = re.compile(r"[0][xX][0-9A-Fa-f]{8}$", re.DOTALL)\r
- if ReIsValidHexVersion.match(Word) == None:\r
+ if ReIsValidHexVersion.match(Word) is None:\r
return False\r
\r
return True\r
# \r
def IsValidBuildNumber(Word):\r
ReIsValieBuildNumber = re.compile(r"[0-9]{1,4}$", re.DOTALL)\r
- if ReIsValieBuildNumber.match(Word) == None:\r
+ if ReIsValieBuildNumber.match(Word) is None:\r
return False\r
\r
return True\r
return IsValidCFormatGuid(Word[Index+4:].strip())\r
\r
ReIsValidCName = re.compile(r"^[A-Za-z_][0-9A-Za-z_\s\.]*$", re.DOTALL)\r
- if ReIsValidCName.match(Word) == None:\r
+ if ReIsValidCName.match(Word) is None:\r
return False\r
\r
return True\r
for Char in PcdValue:\r
if Char == '\n' or Char == '\t' or Char == '\f':\r
return False\r
- \r
+ \r
#\r
# <Boolean>\r
#\r
if IsValidHex(PcdValue):\r
return True\r
\r
- ReIsValidIntegerSingle = re.compile(r"^\s*[0-9]\s*$", re.DOTALL) \r
- if ReIsValidIntegerSingle.match(PcdValue) != None:\r
+ ReIsValidIntegerSingle = re.compile(r"^\s*[0-9]\s*$", re.DOTALL)\r
+ if ReIsValidIntegerSingle.match(PcdValue) is not None:\r
return True\r
\r
ReIsValidIntegerMulti = re.compile(r"^\s*[1-9][0-9]+\s*$", re.DOTALL) \r
- if ReIsValidIntegerMulti.match(PcdValue) != None:\r
+ if ReIsValidIntegerMulti.match(PcdValue) is not None:\r
return True\r
\r
- \r
#\r
# <StringVal> ::= {<StringType>} {<Array>} {"$(" <MACRO> ")"}\r
# <StringType> ::= {<UnicodeString>} {<CString>}\r
# \r
def IsValidCVariableName(CName):\r
ReIsValidCName = re.compile(r"^[A-Za-z_][0-9A-Za-z_]*$", re.DOTALL)\r
- if ReIsValidCName.match(CName) == None:\r
+ if ReIsValidCName.match(CName) is None:\r
return False\r
\r
return True\r
#\r
def IsValidIdentifier(Ident):\r
ReIdent = re.compile(r"^[A-Za-z_][0-9A-Za-z_]*$", re.DOTALL)\r
- if ReIdent.match(Ident) == None:\r
+ if ReIdent.match(Ident) is None:\r
return False\r
\r
return True\r
def IsValidDecVersionVal(Ver):\r
ReVersion = re.compile(r"[0-9]+(\.[0-9]{1,2})$")\r
\r
- if ReVersion.match(Ver) == None:\r
+ if ReVersion.match(Ver) is None:\r
return False\r
\r
return True\r
return False\r
return True\r
\r
+#\r
+# Check if a UTF16-LE file has a BOM header\r
+#\r
+def CheckUTF16FileHeader(File):\r
+ FileIn = open(File, 'rb').read(2)\r
+ if FileIn != '\xff\xfe':\r
+ return False\r
+\r
+ return True\r