]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools:Similar to octal data rectification
authorZhijux Fan <zhijux.fan@intel.com>
Sun, 16 Dec 2018 07:19:42 +0000 (15:19 +0800)
committerFeng, Bob C <bob.c.feng@intel.com>
Fri, 1 Feb 2019 03:09:18 +0000 (11:09 +0800)
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>
BaseTools/Source/Python/AutoGen/GenC.py
BaseTools/Source/Python/Common/Misc.py
BaseTools/Source/Python/Workspace/DscBuildData.py
BaseTools/Source/Python/build/BuildReport.py

index 500a78f0581abd805a2ab68de14b3049a72872de..915ba2e235b09f23c6e8258ed39cc8c861aba020 100644 (file)
@@ -1010,6 +1010,8 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd):
             try:\r
                 if Value.upper().endswith('L'):\r
                     Value = Value[:-1]\r
+                if Value.startswith('0') and not Value.lower().startswith('0x') and len(Value) > 2:\r
+                    Value = Value.lstrip('0')\r
                 ValueNumber = int (Value, 0)\r
             except:\r
                 EdkLogger.error("build", AUTOGEN_ERROR,\r
index 1b8a4bef2ecc73a728835e4d4093687a48f68f37..d23a075f4354ad81a1dc14ff896ead17349aebff 100644 (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"\\r
                           ", FALSE, False, false, 0x0, 0x00, 0" % (Value, Type)\r
     elif Type in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64]:\r
-        if Value and int(Value, 0) < 0:\r
-            return False, "PCD can't be set to negative value[%s] for datum type [%s]" % (Value, Type)\r
+        if Value.startswith('0') and not Value.lower().startswith('0x') and len(Value) > 2:\r
+            Value = Value.lstrip('0')\r
         try:\r
+            if Value and int(Value, 0) < 0:\r
+                return False, "PCD can't be set to negative value[%s] for datum type [%s]" % (Value, Type)\r
             Value = int(Value, 0)\r
             if Value > MAX_VAL_TYPE[Type]:\r
                 return False, "Too large PCD value[%s] for datum type [%s]" % (Value, Type)\r
index 9c5596927ffe7cf085ba25a8f2867d3db8cd71c5..c2bc7050916f3f5f7afa443c1e9c19852dc0815a 100644 (file)
@@ -39,6 +39,7 @@ from Common.Parsing import IsValidWord
 from Common.VariableAttributes import VariableAttributes\r
 import Common.GlobalData as GlobalData\r
 import subprocess\r
+from functools import reduce\r
 from Common.Misc import SaveFileOnChange\r
 from Workspace.BuildClassObject import PlatformBuildClassObject, StructurePcd, PcdClassObject, ModuleBuildClassObject\r
 from collections import OrderedDict, defaultdict\r
@@ -1928,7 +1929,7 @@ class DscBuildData(PlatformBuildClassObject):
         if index:\r
             indicator = "(Pcd"\r
             if len(pcd_capacity)>2:\r
-                for i in xrange(0,len(index_elements)):\r
+                for i in range(0,len(index_elements)):\r
                     index_ele = index_elements[i]\r
                     index_num = index_ele.strip("[").strip("]").strip()\r
                     if i == len(index_elements) -2:\r
index 6c9a20b373a09e1e1011c58f6a9d1ccad12eaa6c..b940de1c90f866d6ae51a91ed46ab496fb89cf3d 100644 (file)
@@ -1026,22 +1026,30 @@ class PcdReport(object):
 \r
 \r
                 if Pcd.DatumType in TAB_PCD_NUMERIC_TYPES:\r
+                    if PcdValue.startswith('0') and not PcdValue.lower().startswith('0x') and len(PcdValue) > 2:\r
+                        PcdValue = PcdValue.lstrip('0')\r
                     PcdValueNumber = int(PcdValue.strip(), 0)\r
                     if DecDefaultValue is None:\r
                         DecMatch = True\r
                     else:\r
+                        if DecDefaultValue.startswith('0') and not DecDefaultValue.lower().startswith('0x') and len(DecDefaultValue) > 2:\r
+                            DecDefaultValue = DecDefaultValue.lstrip('0')\r
                         DecDefaultValueNumber = int(DecDefaultValue.strip(), 0)\r
                         DecMatch = (DecDefaultValueNumber == PcdValueNumber)\r
 \r
                     if InfDefaultValue is None:\r
                         InfMatch = True\r
                     else:\r
+                        if InfDefaultValue.startswith('0') and not InfDefaultValue.lower().startswith('0x') and len(InfDefaultValue) > 2:\r
+                            InfDefaultValue = InfDefaultValue.lstrip('0')\r
                         InfDefaultValueNumber = int(InfDefaultValue.strip(), 0)\r
                         InfMatch = (InfDefaultValueNumber == PcdValueNumber)\r
 \r
                     if DscDefaultValue is None:\r
                         DscMatch = True\r
                     else:\r
+                        if DscDefaultValue.startswith('0') and not DscDefaultValue.lower().startswith('0x') and len(DscDefaultValue) > 2:\r
+                            DscDefaultValue = DscDefaultValue.lstrip('0')\r
                         DscDefaultValueNumber = int(DscDefaultValue.strip(), 0)\r
                         DscMatch = (DscDefaultValueNumber == PcdValueNumber)\r
                 else:\r
@@ -1163,6 +1171,8 @@ class PcdReport(object):
                         for ModulePath in ModuleOverride:\r
                             ModuleDefault = ModuleOverride[ModulePath]\r
                             if Pcd.DatumType in TAB_PCD_NUMERIC_TYPES:\r
+                                if ModuleDefault.startswith('0') and not ModuleDefault.lower().startswith('0x') and len(ModuleDefault) > 2:\r
+                                    ModuleDefault = ModuleDefault.lstrip('0')\r
                                 ModulePcdDefaultValueNumber = int(ModuleDefault.strip(), 0)\r
                                 Match = (ModulePcdDefaultValueNumber == PcdValueNumber)\r
                                 if Pcd.DatumType == 'BOOLEAN':\r
@@ -1264,6 +1274,8 @@ class PcdReport(object):
                     FileWrite(File, Array)\r
             else:\r
                 if Pcd.DatumType in TAB_PCD_CLEAN_NUMERIC_TYPES:\r
+                    if Value.startswith('0') and not Value.lower().startswith('0x') and len(Value) > 2:\r
+                        Value = Value.lstrip('0')\r
                     if Value.startswith(('0x', '0X')):\r
                         Value = '{} ({:d})'.format(Value, int(Value, 0))\r
                     else:\r