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 <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Yunhua Feng <yunhuax.feng@intel.com>
Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com>
(cherry picked from commit f9bba77495
)
This commit is contained in:
committed by
Yonghong Zhu
parent
b39c572e70
commit
27a8608eaa
@ -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:
|
||||
|
Reference in New Issue
Block a user