]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Workspace/MetaFileParser.py
BaseTools: Update Expression.py for string comparison and MACRO replace issue
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / MetaFileParser.py
index b2b0e282eb91098303837dcbe4e06e7b7dcd9267..95ea6fb45abb5af1704c5dae9e0e316c6ab5684d 100644 (file)
@@ -1,7 +1,7 @@
 ## @file\r
 # This file is used to parse meta files\r
 #\r
-# Copyright (c) 2008 - 2017, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>\r
 # (C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR>\r
 # This program and the accompanying materials\r
 # are licensed and made available under the terms and conditions of the BSD License\r
@@ -1098,14 +1098,14 @@ class DscParser(MetaFileParser):
     def _SkuIdParser(self):\r
         TokenList = GetSplitValueList(self._CurrentLine, TAB_VALUE_SPLIT)\r
         if len(TokenList) not in (2,3):\r
-            EdkLogger.error('Parser', FORMAT_INVALID, "Correct format is '<Integer>|<UiName>[|<UiName>]'",\r
+            EdkLogger.error('Parser', FORMAT_INVALID, "Correct format is '<Number>|<UiName>[|<UiName>]'",\r
                             ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex + 1)\r
         self._ValueList[0:len(TokenList)] = TokenList\r
     @ParseMacro\r
     def _DefaultStoresParser(self):\r
         TokenList = GetSplitValueList(self._CurrentLine, TAB_VALUE_SPLIT)\r
         if len(TokenList) != 2:\r
-            EdkLogger.error('Parser', FORMAT_INVALID, "Correct format is '<Integer>|<UiName>'",\r
+            EdkLogger.error('Parser', FORMAT_INVALID, "Correct format is '<Number>|<UiName>'",\r
                             ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex + 1)\r
         self._ValueList[0:len(TokenList)] = TokenList\r
 \r
@@ -1593,6 +1593,8 @@ class DscParser(MetaFileParser):
                 ValList[Index] = ValueExpression(PcdValue, self._Macros)(True)\r
             except WrnExpression, Value:\r
                 ValList[Index] = Value.result\r
+            except:\r
+                pass\r
 \r
         if ValList[Index] == 'True':\r
             ValList[Index] = '1'\r
@@ -1891,22 +1893,24 @@ class DecParser(MetaFileParser):
             if "|" not in self._CurrentLine:\r
                 if "<HeaderFiles>" == self._CurrentLine:\r
                     self._include_flag = True\r
+                    self._package_flag = False\r
                     self._ValueList = None\r
                     return\r
                 if "<Packages>" == self._CurrentLine:\r
                     self._package_flag = True\r
                     self._ValueList = None\r
+                    self._include_flag = False\r
                     return\r
 \r
                 if self._include_flag:\r
                     self._ValueList[1] = "<HeaderFiles>_" + md5.new(self._CurrentLine).hexdigest()\r
                     self._ValueList[2] = self._CurrentLine\r
-                    self._include_flag = False\r
                 if self._package_flag and "}" != self._CurrentLine:\r
                     self._ValueList[1] = "<Packages>_" + md5.new(self._CurrentLine).hexdigest()\r
                     self._ValueList[2] = self._CurrentLine\r
                 if self._CurrentLine == "}":\r
                     self._package_flag = False\r
+                    self._include_flag = False\r
                     self._ValueList = None\r
                     return\r
             else:\r
@@ -1915,6 +1919,9 @@ class DecParser(MetaFileParser):
                 if len(PcdNames) == 2:\r
                     self._CurrentStructurePcdName = ""\r
                 else:\r
+                    if self._CurrentStructurePcdName != TAB_SPLIT.join(PcdNames[:2]):\r
+                        EdkLogger.error('Parser', FORMAT_INVALID, "Pcd Name does not match: %s and %s " % (self._CurrentStructurePcdName , TAB_SPLIT.join(PcdNames[:2])),\r
+                                File=self.MetaFile, Line=self._LineIndex + 1)\r
                     self._ValueList[1] = TAB_SPLIT.join(PcdNames[2:])\r
                     self._ValueList[2] = PcdTockens[1]\r
         if not self._CurrentStructurePcdName:\r
@@ -1987,14 +1994,7 @@ class DecParser(MetaFileParser):
             PcdValue = ValueList[0]\r
             if PcdValue:\r
                 try:\r
-                    ValueList[0] = ValueExpression(PcdValue, self._AllPcdDict)(True)\r
-                except WrnExpression, Value:\r
-                    ValueList[0] = Value.result\r
-                except BadExpression, Value:\r
-                    EdkLogger.error('Parser', FORMAT_INVALID, Value, File=self.MetaFile, Line=self._LineIndex + 1)\r
-\r
-            if ValueList[0]:\r
-                try:\r
+                    self._GuidDict.update(self._AllPcdDict)\r
                     ValueList[0] = ValueExpressionEx(ValueList[0], ValueList[1], self._GuidDict)(True)\r
                 except BadExpression, Value:\r
                     EdkLogger.error('Parser', FORMAT_INVALID, Value, ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex + 1)\r