BaseTools:Similar to octal data rectification

In python3, if Value is octal data, the int(Value, 0) report an error

Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Zhiju.Fan <zhijux.fan@intel.com>
Tested-by: Laszlo Ersek <lersek@redhat.com>
Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Liming Gao <liming.gao@intel.com>
Reviewed-by: Bob Feng <bob.c.feng@intel.com>
This commit is contained in:
Zhijux Fan
2018-12-16 15:19:42 +08:00
committed by Feng, Bob C
parent 56ad03a5dc
commit 1590d12315
4 changed files with 20 additions and 3 deletions

View File

@ -1010,6 +1010,8 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd):
try: try:
if Value.upper().endswith('L'): if Value.upper().endswith('L'):
Value = Value[:-1] Value = Value[:-1]
if Value.startswith('0') and not Value.lower().startswith('0x') and len(Value) > 2:
Value = Value.lstrip('0')
ValueNumber = int (Value, 0) ValueNumber = int (Value, 0)
except: except:
EdkLogger.error("build", AUTOGEN_ERROR, EdkLogger.error("build", AUTOGEN_ERROR,

View File

@ -1310,9 +1310,11 @@ def CheckPcdDatum(Type, Value):
return False, "Invalid value [%s] of type [%s]; must be one of TRUE, True, true, 0x1, 0x01, 1"\ return False, "Invalid value [%s] of type [%s]; must be one of TRUE, True, true, 0x1, 0x01, 1"\
", FALSE, False, false, 0x0, 0x00, 0" % (Value, Type) ", FALSE, False, false, 0x0, 0x00, 0" % (Value, Type)
elif Type in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64]: elif Type in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64]:
if Value.startswith('0') and not Value.lower().startswith('0x') and len(Value) > 2:
Value = Value.lstrip('0')
try:
if Value and int(Value, 0) < 0: if Value and int(Value, 0) < 0:
return False, "PCD can't be set to negative value[%s] for datum type [%s]" % (Value, Type) return False, "PCD can't be set to negative value[%s] for datum type [%s]" % (Value, Type)
try:
Value = int(Value, 0) Value = int(Value, 0)
if Value > MAX_VAL_TYPE[Type]: if Value > MAX_VAL_TYPE[Type]:
return False, "Too large PCD value[%s] for datum type [%s]" % (Value, Type) return False, "Too large PCD value[%s] for datum type [%s]" % (Value, Type)

View File

@ -39,6 +39,7 @@ from Common.Parsing import IsValidWord
from Common.VariableAttributes import VariableAttributes from Common.VariableAttributes import VariableAttributes
import Common.GlobalData as GlobalData import Common.GlobalData as GlobalData
import subprocess import subprocess
from functools import reduce
from Common.Misc import SaveFileOnChange from Common.Misc import SaveFileOnChange
from Workspace.BuildClassObject import PlatformBuildClassObject, StructurePcd, PcdClassObject, ModuleBuildClassObject from Workspace.BuildClassObject import PlatformBuildClassObject, StructurePcd, PcdClassObject, ModuleBuildClassObject
from collections import OrderedDict, defaultdict from collections import OrderedDict, defaultdict
@ -1928,7 +1929,7 @@ class DscBuildData(PlatformBuildClassObject):
if index: if index:
indicator = "(Pcd" indicator = "(Pcd"
if len(pcd_capacity)>2: if len(pcd_capacity)>2:
for i in xrange(0,len(index_elements)): for i in range(0,len(index_elements)):
index_ele = index_elements[i] index_ele = index_elements[i]
index_num = index_ele.strip("[").strip("]").strip() index_num = index_ele.strip("[").strip("]").strip()
if i == len(index_elements) -2: if i == len(index_elements) -2:

View File

@ -1026,22 +1026,30 @@ class PcdReport(object):
if Pcd.DatumType in TAB_PCD_NUMERIC_TYPES: if Pcd.DatumType in TAB_PCD_NUMERIC_TYPES:
if PcdValue.startswith('0') and not PcdValue.lower().startswith('0x') and len(PcdValue) > 2:
PcdValue = PcdValue.lstrip('0')
PcdValueNumber = int(PcdValue.strip(), 0) PcdValueNumber = int(PcdValue.strip(), 0)
if DecDefaultValue is None: if DecDefaultValue is None:
DecMatch = True DecMatch = True
else: else:
if DecDefaultValue.startswith('0') and not DecDefaultValue.lower().startswith('0x') and len(DecDefaultValue) > 2:
DecDefaultValue = DecDefaultValue.lstrip('0')
DecDefaultValueNumber = int(DecDefaultValue.strip(), 0) DecDefaultValueNumber = int(DecDefaultValue.strip(), 0)
DecMatch = (DecDefaultValueNumber == PcdValueNumber) DecMatch = (DecDefaultValueNumber == PcdValueNumber)
if InfDefaultValue is None: if InfDefaultValue is None:
InfMatch = True InfMatch = True
else: else:
if InfDefaultValue.startswith('0') and not InfDefaultValue.lower().startswith('0x') and len(InfDefaultValue) > 2:
InfDefaultValue = InfDefaultValue.lstrip('0')
InfDefaultValueNumber = int(InfDefaultValue.strip(), 0) InfDefaultValueNumber = int(InfDefaultValue.strip(), 0)
InfMatch = (InfDefaultValueNumber == PcdValueNumber) InfMatch = (InfDefaultValueNumber == PcdValueNumber)
if DscDefaultValue is None: if DscDefaultValue is None:
DscMatch = True DscMatch = True
else: else:
if DscDefaultValue.startswith('0') and not DscDefaultValue.lower().startswith('0x') and len(DscDefaultValue) > 2:
DscDefaultValue = DscDefaultValue.lstrip('0')
DscDefaultValueNumber = int(DscDefaultValue.strip(), 0) DscDefaultValueNumber = int(DscDefaultValue.strip(), 0)
DscMatch = (DscDefaultValueNumber == PcdValueNumber) DscMatch = (DscDefaultValueNumber == PcdValueNumber)
else: else:
@ -1163,6 +1171,8 @@ class PcdReport(object):
for ModulePath in ModuleOverride: for ModulePath in ModuleOverride:
ModuleDefault = ModuleOverride[ModulePath] ModuleDefault = ModuleOverride[ModulePath]
if Pcd.DatumType in TAB_PCD_NUMERIC_TYPES: if Pcd.DatumType in TAB_PCD_NUMERIC_TYPES:
if ModuleDefault.startswith('0') and not ModuleDefault.lower().startswith('0x') and len(ModuleDefault) > 2:
ModuleDefault = ModuleDefault.lstrip('0')
ModulePcdDefaultValueNumber = int(ModuleDefault.strip(), 0) ModulePcdDefaultValueNumber = int(ModuleDefault.strip(), 0)
Match = (ModulePcdDefaultValueNumber == PcdValueNumber) Match = (ModulePcdDefaultValueNumber == PcdValueNumber)
if Pcd.DatumType == 'BOOLEAN': if Pcd.DatumType == 'BOOLEAN':
@ -1264,6 +1274,8 @@ class PcdReport(object):
FileWrite(File, Array) FileWrite(File, Array)
else: else:
if Pcd.DatumType in TAB_PCD_CLEAN_NUMERIC_TYPES: if Pcd.DatumType in TAB_PCD_CLEAN_NUMERIC_TYPES:
if Value.startswith('0') and not Value.lower().startswith('0x') and len(Value) > 2:
Value = Value.lstrip('0')
if Value.startswith(('0x', '0X')): if Value.startswith(('0x', '0X')):
Value = '{} ({:d})'.format(Value, int(Value, 0)) Value = '{} ({:d})'.format(Value, int(Value, 0))
else: else: