]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/UPT/Library/ParserValidate.py
BaseTools/UPT: Update the import statement to use StringUtils
[mirror_edk2.git] / BaseTools / Source / Python / UPT / Library / ParserValidate.py
index d6b9a096c7894955c48930e7633f1ef7585de75d..3f8ca9d609aec524cf9f2d999678230bc0ae2b90 100644 (file)
@@ -1,6 +1,7 @@
 ## @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
@@ -17,14 +18,16 @@ PaserValidate
 \r
 import os.path\r
 import re\r
+import platform\r
 \r
 from Library.DataType import MODULE_LIST\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
@@ -125,7 +128,7 @@ def IsValidInfComponentType(ComponentType):
 #\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
@@ -156,7 +159,7 @@ def IsValidArch(Arch):
     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
@@ -176,7 +179,7 @@ def IsValidFamily(Family):
         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
@@ -196,13 +199,13 @@ def IsValidBuildOptionName(BuildOptionName):
     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
@@ -234,7 +237,7 @@ def IsValidPath(Path, Root):
     \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
@@ -281,9 +284,14 @@ def IsValidPath(Path, Root):
 # @param Path: path to be checked\r
 #\r
 def IsValidInstallPath(Path):\r
-    if os.path.isabs(Path):\r
-        return False\r
-   \r
+    if platform.platform().find("Windows") >= 0:\r
+        if os.path.isabs(Path):\r
+            return False\r
+    else:\r
+        if Path[1:2] == ':':\r
+            return False\r
+        if os.path.isabs(Path):\r
+            return False\r
     if Path.startswith('.'):\r
         return False\r
     \r
@@ -434,7 +442,7 @@ def IsValidDecVersion(Word):
         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
@@ -449,7 +457,7 @@ def IsValidDecVersion(Word):
 #  \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
@@ -463,7 +471,7 @@ def IsValidHexVersion(Word):
 #  \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
@@ -480,7 +488,7 @@ def IsValidDepex(Word):
         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
@@ -560,7 +568,7 @@ def IsValidPcdValue(PcdValue):
     for Char in PcdValue:\r
         if Char == '\n' or Char == '\t' or Char == '\f':\r
             return False\r
-        \r
+    \r
     #\r
     # <Boolean>\r
     #\r
@@ -576,15 +584,14 @@ def IsValidPcdValue(PcdValue):
     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
@@ -647,7 +654,7 @@ def IsValidPcdValue(PcdValue):
 #     \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
@@ -662,7 +669,7 @@ def IsValidCVariableName(CName):
 #\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
@@ -676,7 +683,7 @@ def IsValidIdentifier(Ident):
 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
@@ -715,3 +722,12 @@ def IsValidUserId(UserId):
             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