From f9bba77495750bb5f9bc5c5864b7c76fece5ec9f Mon Sep 17 00:00:00 2001 From: "Feng, YunhuaX" Date: Mon, 5 Feb 2018 11:42:33 +0800 Subject: BaseTools: Fix build argument --pcd for flexible format bugs Build argument --pcd flexible format, like as: 1. VOID* type gTokenSpaceGuid.Test=H"{flexible format}" gTokenSpaceGuid.Test=L"string" gTokenSpaceGuid.Test="string" gTokenSpaceGuid.Test=L'string' gTokenSpaceGuid.Test='string' 2. UINT8/UINT16/UINT32/UINT64 type gTokenSpaceGuid.Test=H"{flexible format}" gTokenSpaceGuid.Test=L"string" gTokenSpaceGuid.Test="string" gTokenSpaceGuid.Test=L'string' gTokenSpaceGuid.Test='string' In linux, single quotes need escape gTokenSpaceGuid.Test=L\'string\' gTokenSpaceGuid.Test=\'string\' Cc: Liming Gao Cc: Yonghong Zhu Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Yunhua Feng Reviewed-by: Yonghong Zhu --- BaseTools/Source/Python/Workspace/DscBuildData.py | 73 +++++++++++++++++++++-- 1 file changed, 68 insertions(+), 5 deletions(-) (limited to 'BaseTools/Source/Python/Workspace/DscBuildData.py') diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py b/BaseTools/Source/Python/Workspace/DscBuildData.py index 1da4f03ab8..d9165f2ac7 100644 --- a/BaseTools/Source/Python/Workspace/DscBuildData.py +++ b/BaseTools/Source/Python/Workspace/DscBuildData.py @@ -999,10 +999,39 @@ class DscBuildData(PlatformBuildClassObject): try: pcdvalue = ValueExpressionEx(pcdvalue[1:], PcdDatumType, self._GuidDict)(True) except BadExpression, Value: - if Value.result > 1: - EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' % - (TokenSpaceGuidCName, TokenCName, pcdvalue, Value)) - pcdvalue = 'H' + pcdvalue + EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' % + (TokenSpaceGuidCName, TokenCName, pcdvalue, Value)) + if PcdDatumType == "VOID*": + pcdvalue = 'H' + pcdvalue + elif pcdvalue.startswith("L'"): + try: + pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(True) + except BadExpression, Value: + EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' % + (TokenSpaceGuidCName, TokenCName, pcdvalue, Value)) + if pcdvalue.startswith('{'): + pcdvalue = 'H' + pcdvalue + elif pcdvalue.startswith("'"): + try: + pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(True) + except BadExpression, Value: + EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' % + (TokenSpaceGuidCName, TokenCName, pcdvalue, Value)) + if pcdvalue.startswith('{'): + pcdvalue = 'H' + pcdvalue + elif pcdvalue.startswith('L'): + pcdvalue = 'L"' + pcdvalue[1:] + '"' + try: + pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(True) + except BadExpression, Value: + EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' % + (TokenSpaceGuidCName, TokenCName, pcdvalue, Value)) + else: + try: + pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(True) + except BadExpression, Value: + EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' % + (TokenSpaceGuidCName, TokenCName, pcdvalue, Value)) NewValue = BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName, PcdDatumType, pcdvalue) FoundFlag = True else: @@ -1018,7 +1047,41 @@ class DscBuildData(PlatformBuildClassObject): except BadExpression, Value: EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' % (TokenSpaceGuidCName, TokenCName, pcdvalue, Value)) - pcdvalue = 'H' + pcdvalue + if PcdDatumType == "VOID*": + pcdvalue = 'H' + pcdvalue + elif pcdvalue.startswith("L'"): + try: + pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)( + True) + except BadExpression, Value: + EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' % + (TokenSpaceGuidCName, TokenCName, pcdvalue, Value)) + if pcdvalue.startswith('{'): + pcdvalue = 'H' + pcdvalue + elif pcdvalue.startswith("'"): + try: + pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)( + True) + except BadExpression, Value: + EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' % + (TokenSpaceGuidCName, TokenCName, pcdvalue, Value)) + if pcdvalue.startswith('{'): + pcdvalue = 'H' + pcdvalue + elif pcdvalue.startswith('L'): + pcdvalue = 'L"' + pcdvalue[1:] + '"' + try: + pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)( + True) + except BadExpression, Value: + EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' % + (TokenSpaceGuidCName, TokenCName, pcdvalue, Value)) + else: + try: + pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(True) + except BadExpression, Value: + EdkLogger.error('Parser', FORMAT_INVALID, + 'PCD [%s.%s] Value "%s", %s' % + (TokenSpaceGuidCName, TokenCName, pcdvalue, Value)) NewValue = BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName, PcdDatumType, pcdvalue) FoundFlag = True else: -- cgit v1.2.3