]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Workspace/MetaFileParser.py
License header updated to match correct format.
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / MetaFileParser.py
index 98939093d3ef67dc8e568bc38cc1e28be5ec69fb..53b44f44033b47c10db8b229fbf518781582353a 100644 (file)
@@ -31,6 +31,7 @@ from CommonDataClass.Exceptions import *
 from Common.LongFilePathSupport import OpenLongFilePath as open\r
 \r
 from MetaFileTable import MetaFileStorage\r
+from MetaFileCommentParser import CheckInfComment\r
 \r
 ## A decorator used to parse macro definition\r
 def ParseMacro(Parser):\r
@@ -595,6 +596,8 @@ class InfParser(MetaFileParser):
                 continue\r
             if Comment:\r
                 Comments.append((Comment, Index + 1))\r
+            if GlobalData.gOptions and GlobalData.gOptions.CheckUsage:\r
+                CheckInfComment(self._SectionType, Comments, str(self.MetaFile), Index + 1, self._ValueList)\r
             #\r
             # Model, Value1, Value2, Value3, Arch, Platform, BelongsToItem=-1,\r
             # LineBegin=-1, ColumnBegin=-1, LineEnd=-1, ColumnEnd=-1, Enabled=-1\r
@@ -823,6 +826,10 @@ class DscParser(MetaFileParser):
         "FIX_LOAD_TOP_MEMORY_ADDRESS"\r
     ]\r
 \r
+    SubSectionDefineKeywords = [\r
+        "FILE_GUID"\r
+    ]\r
+\r
     SymbolPattern = ValueExpression.SymbolPattern\r
 \r
     ## Constructor of DscParser\r
@@ -1041,13 +1048,15 @@ class DscParser(MetaFileParser):
         if not self._ValueList[2]:\r
             EdkLogger.error('Parser', FORMAT_INVALID, "No value specified",\r
                             ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex + 1)\r
-        if not self._ValueList[1] in self.DefineKeywords:\r
+        if (not self._ValueList[1] in self.DefineKeywords and\r
+            (self._InSubsection and self._ValueList[1] not in self.SubSectionDefineKeywords)):\r
             EdkLogger.error('Parser', FORMAT_INVALID,\r
                             "Unknown keyword found: %s. "\r
                             "If this is a macro you must "\r
                             "add it as a DEFINE in the DSC" % self._ValueList[1],\r
                             ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex + 1)\r
-        self._Defines[self._ValueList[1]] = self._ValueList[2]\r
+        if not self._InSubsection:\r
+            self._Defines[self._ValueList[1]] = self._ValueList[2]\r
         self._ItemType = self.DataType[TAB_DSC_DEFINES.upper()]\r
 \r
     @ParseMacro\r
@@ -1226,6 +1235,7 @@ class DscParser(MetaFileParser):
         self.__RetrievePcdValue()\r
         self._Content = self._RawTable.GetAll()\r
         self._ContentIndex = 0\r
+        self._InSubsection = False\r
         while self._ContentIndex < len(self._Content) :\r
             Id, self._ItemType, V1, V2, V3, S1, S2, Owner, self._From, \\r
                 LineStart, ColStart, LineEnd, ColEnd, Enabled = self._Content[self._ContentIndex]\r
@@ -1254,6 +1264,10 @@ class DscParser(MetaFileParser):
             self._LineIndex = LineStart - 1\r
             self._ValueList = [V1, V2, V3]\r
 \r
+            if Owner > 0 and Owner in self._IdMapping:\r
+                self._InSubsection = True\r
+            else:\r
+                self._InSubsection = False\r
             try:\r
                 Processer[self._ItemType]()\r
             except EvaluationException, Excpt:\r
@@ -1356,6 +1370,13 @@ class DscParser(MetaFileParser):
 \r
         Type, Name, Value = self._ValueList\r
         Value = ReplaceMacro(Value, self._Macros, False)\r
+        #\r
+        # If it is <Defines>, return\r
+        #\r
+        if self._InSubsection:\r
+            self._ValueList = [Type, Name, Value]\r
+            return\r
+\r
         if self._ItemType == MODEL_META_DATA_DEFINE:\r
             if self._SectionType == MODEL_META_DATA_HEADER:\r
                 self._FileLocalMacros[Name] = Value\r