]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Workspace/DscBuildData.py
BaseTools: Fix build argument --pcd for flexible format bugs
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / DscBuildData.py
index 1da4f03ab8baa1f0a0a4db3905f9488696edbf5d..d9165f2ac7dd346cbb68838084e140668337d313 100644 (file)
@@ -999,10 +999,39 @@ class DscBuildData(PlatformBuildClassObject):
                                     try:\r
                                         pcdvalue = ValueExpressionEx(pcdvalue[1:], PcdDatumType, self._GuidDict)(True)\r
                                     except BadExpression, Value:\r
-                                        if Value.result > 1:\r
-                                            EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s",  %s' %\r
-                                                            (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
-                                    pcdvalue = 'H' + pcdvalue\r
+                                        EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s",  %s' %\r
+                                                        (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
+                                    if PcdDatumType == "VOID*":\r
+                                        pcdvalue = 'H' + pcdvalue\r
+                                elif pcdvalue.startswith("L'"):\r
+                                    try:\r
+                                        pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(True)\r
+                                    except BadExpression, Value:\r
+                                        EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s",  %s' %\r
+                                                        (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
+                                    if pcdvalue.startswith('{'):\r
+                                        pcdvalue = 'H' + pcdvalue\r
+                                elif pcdvalue.startswith("'"):\r
+                                    try:\r
+                                        pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(True)\r
+                                    except BadExpression, Value:\r
+                                        EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s",  %s' %\r
+                                                        (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
+                                    if pcdvalue.startswith('{'):\r
+                                        pcdvalue = 'H' + pcdvalue\r
+                                elif pcdvalue.startswith('L'):\r
+                                    pcdvalue = 'L"' + pcdvalue[1:] + '"'\r
+                                    try:\r
+                                        pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(True)\r
+                                    except BadExpression, Value:\r
+                                        EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s",  %s' %\r
+                                                        (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
+                                else:\r
+                                    try:\r
+                                        pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(True)\r
+                                    except BadExpression, Value:\r
+                                        EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s",  %s' %\r
+                                                        (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
                                 NewValue = BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName, PcdDatumType, pcdvalue)\r
                                 FoundFlag = True\r
                         else:\r
@@ -1018,7 +1047,41 @@ class DscBuildData(PlatformBuildClassObject):
                                             except BadExpression, Value:\r
                                                 EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %\r
                                                                 (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
-                                            pcdvalue = 'H' + pcdvalue\r
+                                            if PcdDatumType == "VOID*":\r
+                                                pcdvalue = 'H' + pcdvalue\r
+                                        elif pcdvalue.startswith("L'"):\r
+                                            try:\r
+                                                pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(\r
+                                                    True)\r
+                                            except BadExpression, Value:\r
+                                                EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s",  %s' %\r
+                                                                (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
+                                            if pcdvalue.startswith('{'):\r
+                                                pcdvalue = 'H' + pcdvalue\r
+                                        elif pcdvalue.startswith("'"):\r
+                                            try:\r
+                                                pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(\r
+                                                    True)\r
+                                            except BadExpression, Value:\r
+                                                EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s",  %s' %\r
+                                                                (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
+                                            if pcdvalue.startswith('{'):\r
+                                                pcdvalue = 'H' + pcdvalue\r
+                                        elif pcdvalue.startswith('L'):\r
+                                            pcdvalue = 'L"' + pcdvalue[1:] + '"'\r
+                                            try:\r
+                                                pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(\r
+                                                    True)\r
+                                            except BadExpression, Value:\r
+                                                EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s",  %s' %\r
+                                                                (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
+                                        else:\r
+                                            try:\r
+                                                pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(True)\r
+                                            except BadExpression, Value:\r
+                                                EdkLogger.error('Parser', FORMAT_INVALID,\r
+                                                                'PCD [%s.%s] Value "%s",  %s' %\r
+                                                                (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
                                         NewValue = BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName, PcdDatumType, pcdvalue)\r
                                         FoundFlag = True\r
                                     else:\r