]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Workspace/DscBuildData.py
BaseTools: Support PCD flexible values format
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / DscBuildData.py
index e42210079dd39cc7a572c5282107c0198ad01409..f9cd429f29f6a18718bf36c15d27e560cf10e880 100644 (file)
@@ -800,7 +800,7 @@ class DscBuildData(PlatformBuildClassObject):
                 ModuleData = self._Bdb[ModuleFile, self._Arch, self._Target, self._Toolchain]\r
                 PkgSet.update(ModuleData.Packages)\r
 \r
-            self._DecPcds = GetDeclaredPcd(self, self._Bdb, self._Arch, self._Target, self._Toolchain,PkgSet)\r
+            self._DecPcds, self._GuidDict = GetDeclaredPcd(self, self._Bdb, self._Arch, self._Target, self._Toolchain,PkgSet)\r
 \r
 \r
         if (PcdCName, TokenSpaceGuid) not in self._DecPcds:\r
@@ -821,6 +821,8 @@ class DscBuildData(PlatformBuildClassObject):
                 ValueList[Index] = ValueExpression(ValueList[Index], GlobalData.gPlatformPcds)(True)\r
             except WrnExpression, Value:\r
                 ValueList[Index] = Value.result\r
+            except BadExpression, Value:\r
+                EdkLogger.error('Parser', FORMAT_INVALID, Value, File=self.MetaFile, Line=self._LineIndex + 1)\r
             except EvaluationException, Excpt:\r
                 if hasattr(Excpt, 'Pcd'):\r
                     if Excpt.Pcd in GlobalData.gPlatformOtherPcds:\r
@@ -834,11 +836,13 @@ class DscBuildData(PlatformBuildClassObject):
                 else:\r
                     EdkLogger.error('Parser', FORMAT_INVALID, "Invalid expression: %s" % str(Excpt),\r
                                     File=self.MetaFile, Line=LineNo)\r
-            if ValueList[Index] == 'True':\r
-                ValueList[Index] = '1'\r
-            elif ValueList[Index] == 'False':\r
-                ValueList[Index] = '0'\r
         if ValueList[Index]:\r
+            DatumType = self._DecPcds[PcdCName, TokenSpaceGuid].DatumType\r
+            try:\r
+                ValueList[Index] = ValueExpressionEx(ValueList[Index], DatumType, self._GuidDict)(True)\r
+            except BadExpression, Value:\r
+                EdkLogger.error('Parser', FORMAT_INVALID, Value, File=self.MetaFile, Line=LineNo,\r
+                                ExtraData="PCD [%s.%s] Value \"%s\" " % (TokenSpaceGuid, PcdCName, ValueList[Index]))\r
             Valid, ErrStr = CheckPcdDatum(self._DecPcds[PcdCName, TokenSpaceGuid].DatumType, ValueList[Index])\r
             if not Valid:\r
                 EdkLogger.error('build', FORMAT_INVALID, ErrStr, File=self.MetaFile, Line=LineNo,\r
@@ -2058,7 +2062,7 @@ class DscBuildData(PlatformBuildClassObject):
                     continue\r
                 ModuleData = self._Bdb[ModuleFile, self._Arch, self._Target, self._Toolchain]\r
                 PkgSet.update(ModuleData.Packages)\r
-            self._DecPcds = GetDeclaredPcd(self, self._Bdb, self._Arch, self._Target, self._Toolchain,PkgSet)\r
+            self._DecPcds, self._GuidDict = GetDeclaredPcd(self, self._Bdb, self._Arch, self._Target, self._Toolchain,PkgSet)\r
         return self._DecPcds\r
     _Macros             = property(_GetMacros)\r
     Arch                = property(_GetArch, _SetArch)\r