]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Workspace/MetaFileParser.py
BaseTools: Fix a bug for --pcd used in ConditionalStatement calculate
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / MetaFileParser.py
index 8f4b5e5cc1ca6c6292e808c7e40251be80dffa2e..2eb4c75e46587f8b7e238060abbfbd4b852ce971 100644 (file)
@@ -1243,6 +1243,13 @@ class DscParser(MetaFileParser):
         # PCD cannot be referenced in macro definition\r
         if self._ItemType not in [MODEL_META_DATA_DEFINE, MODEL_META_DATA_GLOBAL_DEFINE]:\r
             Macros.update(self._Symbols)\r
+        if GlobalData.BuildOptionPcd:\r
+            for Item in GlobalData.BuildOptionPcd:\r
+                if type(Item) is tuple:\r
+                    continue\r
+                PcdName, TmpValue = Item.split("=")\r
+                TmpValue = BuildOptionValue(TmpValue, self._GuidDict)\r
+                Macros[PcdName.strip()] = TmpValue\r
         return Macros\r
 \r
     def _PostProcess(self):\r
@@ -1593,6 +1600,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 +1900,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
@@ -1990,14 +2001,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