]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Workspace/MetaFileParser.py
BaseTools: support PCD value to use expression in the DEC file
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / MetaFileParser.py
index 82d874f8ddf99264fe5129a56debc14f282bf2af..1a5fdf5e62b9a1726c0321d2c5caf89b01217ca8 100644 (file)
@@ -26,7 +26,7 @@ import Common.GlobalData as GlobalData
 from CommonDataClass.DataClass import *\r
 from Common.DataType import *\r
 from Common.String import *\r
-from Common.Misc import GuidStructureStringToGuidString, CheckPcdDatum, PathClass, AnalyzePcdData, AnalyzeDscPcd\r
+from Common.Misc import GuidStructureStringToGuidString, CheckPcdDatum, PathClass, AnalyzePcdData, AnalyzeDscPcd, AnalyzePcdExpression\r
 from Common.Expression import *\r
 from CommonDataClass.Exceptions import *\r
 from Common.LongFilePathSupport import OpenLongFilePath as open\r
@@ -1635,6 +1635,7 @@ class DecParser(MetaFileParser):
         self._Comments = []\r
         self._Version = 0x00010005  # Only EDK2 dec file is supported\r
         self._AllPCDs = [] # Only for check duplicate PCD\r
+        self._AllPcdDict = {}\r
 \r
     ## Parser starter\r
     def Start(self):\r
@@ -1848,10 +1849,10 @@ class DecParser(MetaFileParser):
         # Has VOID* type string, may contain "|" character in the string. \r
         if len(PtrValue) != 0:\r
             ptrValueList = re.sub(ValueRe, '', TokenList[1])\r
-            ValueList = GetSplitValueList(ptrValueList)\r
+            ValueList = AnalyzePcdExpression(ptrValueList)\r
             ValueList[0] = PtrValue[0]\r
         else:\r
-            ValueList = GetSplitValueList(TokenList[1])\r
+            ValueList = AnalyzePcdExpression(TokenList[1])\r
 \r
 \r
         # check if there's enough datum information given\r
@@ -1878,6 +1879,19 @@ class DecParser(MetaFileParser):
                             ExtraData=self._CurrentLine + \\r
                                       " (<TokenSpaceGuidCName>.<PcdCName>|<DefaultValue>|<DatumType>|<Token>)",\r
                             File=self.MetaFile, Line=self._LineIndex + 1)\r
+\r
+        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
+\r
+        if ValueList[0] == 'True':\r
+            ValueList[0] = '1'\r
+        if ValueList[0] == 'False':\r
+            ValueList[0] = '0'\r
+\r
         # check format of default value against the datum type\r
         IsValid, Cause = CheckPcdDatum(ValueList[1], ValueList[0])\r
         if not IsValid:\r
@@ -1896,6 +1910,7 @@ class DecParser(MetaFileParser):
                             ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex + 1)\r
         else:\r
             self._AllPCDs.append((self._Scope[0], self._ValueList[0], self._ValueList[1]))\r
+            self._AllPcdDict[TAB_SPLIT.join(self._ValueList[0:2])] = ValueList[0]\r
 \r
         self._ValueList[2] = ValueList[0].strip() + '|' + ValueList[1].strip() + '|' + ValueList[2].strip()\r
 \r