git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@475 7335b...
authorhche10x <hche10x@7335b38e-4728-0410-8992-fb3ffe349368>
Wed, 1 Aug 2007 09:27:38 +0000 (09:27 +0000)
committerhche10x <hche10x@7335b38e-4728-0410-8992-fb3ffe349368>
Wed, 1 Aug 2007 09:27:38 +0000 (09:27 +0000)
Source/Python/Common/BuildToolError.py
Source/Python/Common/DecClassObject.py
Source/Python/Common/DscClassObject.py
Source/Python/Common/InfClassObject.py
Source/Python/Common/String.py

index dba1c5b..d6a6965 100644 (file)
@@ -116,7 +116,7 @@ gErrorMessage = {
     PARAMETER_MISSING       :   "Missing parameter: %(name)s",
     PARAMETER_UNKNOWN_ERROR :   "Unknown error in parameters",
 
-    FORMAT_INVALID          :   "Invalid sytax/format at line %(lineno) in %(name)s",
+    FORMAT_INVALID          :   "Invalid sytax/format at line %(lineno)s in file %(name)s",
     FORMAT_NOT_SUPPORTED    :   "Not supported: %(name)s",
     FORMAT_UNKNOWN          :   "Unknown format: %(name)s",
     FORMAT_UNKNOWN_ERROR    :   "Unknown error in %(name)s",
index 966ac3a..91f8864 100644 (file)
@@ -92,6 +92,7 @@ class Dec(DecObject):
         self.Identification.FileRelativePath = Filepath\r
         \r
         f = open(Filename, 'r').read()\r
+        PreCheck(Filename, f, self.KeyList)\r
         sects = f.split('[')\r
         for sect in sects:\r
             tab = (sect.split(TAB_SECTION_END, 1)[0]).upper()\r
index ecbfc0c..4475c57 100644 (file)
@@ -114,6 +114,7 @@ class Dsc(DscObject):
         self.Identification.FileRelativePath = Filepath\r
         \r
         F = open(Filename, 'r').read()\r
+        PreCheck(Filename, F, self.KeyList)\r
         sects = F.split('[')\r
         for sect in sects:\r
             tab = (sect.split(TAB_SECTION_END, 1)[0]).upper()\r
index 8bbc717..3b86342 100644 (file)
@@ -457,6 +457,7 @@ class Inf(InfObject):
         self.Identification.FileRelativePath = Filepath\r
         \r
         f = open(Filename, 'r').read()\r
+        PreCheck(Filename, f, self.KeyList)\r
         sects = f.split('[')\r
         for sect in sects:\r
             tab = (sect.split(TAB_SECTION_END, 1)[0]).upper()\r
index 1495f0f..b47fdd5 100644 (file)
@@ -14,6 +14,7 @@
 import DataType\r
 import os.path\r
 import string\r
+from BuildToolError import *\r
 \r
 #\r
 # Get a value list from a string with multiple values splited with SplitTag\r
@@ -243,13 +244,6 @@ def CleanString(Line, CommentCharacter = DataType.TAB_COMMENT_SPLIT):
     Line = Line.strip();\r
     #remove comments\r
     Line = Line.split(CommentCharacter, 1)[0];\r
-    #replace '\\', '\' with '/'\r
-    #Line = Line.replace('\\', '/')\r
-    #Line = Line.replace('//', '/')\r
-    #remove ${WORKSPACE}\r
-    #Line = Line.replace(DataType.TAB_WORKSPACE1, '')\r
-    #Line = Line.replace(DataType.TAB_WORKSPACE2, '')\r
-    \r
     #remove whitespace again\r
     Line = Line.strip();\r
     \r
@@ -316,6 +310,43 @@ def GetSingleValueOfKeyFromLines(Lines, Dictionary, CommentCharacter, KeySplitCh
     \r
     return True\r
 \r
+#\r
+# Do pre-check for a file before it is parsed\r
+# Check $()\r
+# Check []\r
+#\r
+def PreCheck(FileName, FileContent, SupSectionTag):\r
+    LineNo = 0\r
+    IsFailed = False\r
+    for Line in FileContent.splitlines():\r
+        LineNo = LineNo + 1\r
+        Line = CleanString(Line)\r
+        #\r
+        # Check $()\r
+        #\r
+        if Line.find('$') > -1:\r
+            if Line.find('$(') < 0 or Line.find(')') < 0:\r
+                IsFailed = True\r
+                break\r
+\r
+        #\r
+        # Check []\r
+        #\r
+        if Line.find('[') > -1 or Line.find(']') > -1:\r
+            # Only get one '[' or one ']'\r
+            if not (Line.find('[') > -1 and Line.find(']') > -1):\r
+                IsFailed = True\r
+                break\r
+            # Tag not in defined value\r
+            Tag = Line.split(DataType.TAB_SPLIT, 1)[0].replace('[', '').replace(']', '').strip()\r
+            if Tag.upper() == DataType.TAB_COMMON_DEFINES.upper():\r
+                break\r
+            if Tag.upper() not in map(lambda s: s.upper(), SupSectionTag):\r
+                IsFailed = True\r
+                break\r
+    \r
+    if IsFailed:\r
+       raise ParserError(FORMAT_INVALID, lineno = LineNo, name = FileName)\r
 \r
 if __name__ == '__main__':\r
     print SplitModuleType('LibraryClasses.common.DXE_RUNTIME_DRIVER')\r