]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Workspace/DscBuildData.py
BaseTools: Refactor python raise statement
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / DscBuildData.py
index e2af803420f6b5f62c433777d061e7345f4743a8..a80c07bc1e55b56930371d326d0ae4b083a964c2 100644 (file)
@@ -17,7 +17,8 @@
 #  This class is used to retrieve information stored in database and convert them\r
 # into PlatformBuildClassObject form for easier use for AutoGen.\r
 #\r
-from Common.String import *\r
+from __future__ import print_function\r
+from Common.StringUtils import *\r
 from Common.DataType import *\r
 from Common.Misc import *\r
 from types import *\r
@@ -39,15 +40,9 @@ import Common.GlobalData as GlobalData
 import subprocess\r
 from Common.Misc import SaveFileOnChange\r
 from Workspace.BuildClassObject import PlatformBuildClassObject, StructurePcd, PcdClassObject, ModuleBuildClassObject\r
-from collections import OrderedDict\r
+from collections import OrderedDict,defaultdict\r
 \r
-#\r
-# Treat CHAR16 as a synonym for UINT16.  CHAR16 support is required for VFR C structs\r
-#\r
 PcdValueInitName = 'PcdValueInit'\r
-PcdSupportedBaseTypes = ['BOOLEAN', 'UINT8', 'UINT16', 'UINT32', 'UINT64', 'CHAR16']\r
-PcdSupportedBaseTypeWidth = {'BOOLEAN':8, 'UINT8':8, 'UINT16':16, 'UINT32':32, 'UINT64':64}\r
-PcdUnsupportedBaseTypes = ['INT8', 'INT16', 'INT32', 'INT64', 'CHAR8', 'UINTN', 'INTN', 'VOID']\r
 \r
 PcdMainCHeader = '''\r
 /**\r
@@ -95,6 +90,8 @@ MAKEROOT ?= $(EDK_TOOLS_PATH)/Source/C
 LIBS = -lCommon\r
 '''\r
 \r
+variablePattern = re.compile(r'[\t\s]*0[xX][a-fA-F0-9]+$')\r
+\r
 ## regular expressions for finding decimal and hex numbers\r
 Pattern = re.compile('^[1-9]\d*|0$')\r
 HexPattern = re.compile(r'0[xX][0-9a-fA-F]+$')\r
@@ -124,7 +121,7 @@ def GetDependencyList(FileStack,SearchPathList):
             try:\r
                 Fd = open(F, 'r')\r
                 FileContent = Fd.read()\r
-            except BaseException, X:\r
+            except BaseException as X:\r
                 EdkLogger.error("build", FILE_OPEN_FAILURE, ExtraData=F + "\n\t" + str(X))\r
             finally:\r
                 if "Fd" in dir(locals()):\r
@@ -162,17 +159,17 @@ def GetDependencyList(FileStack,SearchPathList):
 class DscBuildData(PlatformBuildClassObject):\r
     # dict used to convert PCD type in database to string used by build tool\r
     _PCD_TYPE_STRING_ = {\r
-        MODEL_PCD_FIXED_AT_BUILD        :   "FixedAtBuild",\r
-        MODEL_PCD_PATCHABLE_IN_MODULE   :   "PatchableInModule",\r
-        MODEL_PCD_FEATURE_FLAG          :   "FeatureFlag",\r
-        MODEL_PCD_DYNAMIC               :   "Dynamic",\r
-        MODEL_PCD_DYNAMIC_DEFAULT       :   "Dynamic",\r
-        MODEL_PCD_DYNAMIC_HII           :   "DynamicHii",\r
-        MODEL_PCD_DYNAMIC_VPD           :   "DynamicVpd",\r
-        MODEL_PCD_DYNAMIC_EX            :   "DynamicEx",\r
-        MODEL_PCD_DYNAMIC_EX_DEFAULT    :   "DynamicEx",\r
-        MODEL_PCD_DYNAMIC_EX_HII        :   "DynamicExHii",\r
-        MODEL_PCD_DYNAMIC_EX_VPD        :   "DynamicExVpd",\r
+        MODEL_PCD_FIXED_AT_BUILD        :   TAB_PCDS_FIXED_AT_BUILD,\r
+        MODEL_PCD_PATCHABLE_IN_MODULE   :   TAB_PCDS_PATCHABLE_IN_MODULE,\r
+        MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,\r
+        MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC,\r
+        MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC,\r
+        MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_HII,\r
+        MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_VPD,\r
+        MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,\r
+        MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,\r
+        MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,\r
+        MODEL_PCD_DYNAMIC_EX_VPD        :   TAB_PCDS_DYNAMIC_EX_VPD,\r
     }\r
 \r
     # dict used to convert part of [Defines] to members of DscBuildData directly\r
@@ -639,10 +636,10 @@ class DscBuildData(PlatformBuildClassObject):
             self._SkuIds = OrderedDict()\r
             RecordList = self._RawData[MODEL_EFI_SKU_ID, self._Arch]\r
             for Record in RecordList:\r
-                if Record[0] in [None, '']:\r
+                if not Record[0]:\r
                     EdkLogger.error('build', FORMAT_INVALID, 'No Sku ID number',\r
                                     File=self.MetaFile, Line=Record[-1])\r
-                if Record[1] in [None, '']:\r
+                if not Record[1]:\r
                     EdkLogger.error('build', FORMAT_INVALID, 'No Sku ID name',\r
                                     File=self.MetaFile, Line=Record[-1])\r
                 if not Pattern.match(Record[0]) and not HexPattern.match(Record[0]):\r
@@ -667,10 +664,10 @@ class DscBuildData(PlatformBuildClassObject):
             self.DefaultStores = OrderedDict()\r
             RecordList = self._RawData[MODEL_EFI_DEFAULT_STORES, self._Arch]\r
             for Record in RecordList:\r
-                if Record[0] in [None, '']:\r
+                if not Record[0]:\r
                     EdkLogger.error('build', FORMAT_INVALID, 'No DefaultStores ID number',\r
                                     File=self.MetaFile, Line=Record[-1])\r
-                if Record[1] in [None, '']:\r
+                if not Record[1]:\r
                     EdkLogger.error('build', FORMAT_INVALID, 'No DefaultStores ID name',\r
                                     File=self.MetaFile, Line=Record[-1])\r
                 if not Pattern.match(Record[0]) and not HexPattern.match(Record[0]):\r
@@ -891,11 +888,11 @@ class DscBuildData(PlatformBuildClassObject):
             DatumType = self._DecPcds[PcdCName, TokenSpaceGuid].DatumType\r
             try:\r
                 ValueList[Index] = ValueExpressionEx(ValueList[Index], DatumType, self._GuidDict)(True)\r
-            except BadExpression, Value:\r
+            except BadExpression as Value:\r
                 EdkLogger.error('Parser', FORMAT_INVALID, Value, File=self.MetaFile, Line=LineNo,\r
                                 ExtraData="PCD [%s.%s] Value \"%s\" " % (\r
                                 TokenSpaceGuid, PcdCName, ValueList[Index]))\r
-            except EvaluationException, Excpt:\r
+            except EvaluationException as Excpt:\r
                 if hasattr(Excpt, 'Pcd'):\r
                     if Excpt.Pcd in GlobalData.gPlatformOtherPcds:\r
                         EdkLogger.error('Parser', FORMAT_INVALID, "Cannot use this PCD (%s) in an expression as"\r
@@ -946,7 +943,7 @@ class DscBuildData(PlatformBuildClassObject):
             for skuid in pcd.SkuInfoList:\r
                 skuobj = pcd.SkuInfoList.get(skuid)\r
                 if TAB_DEFAULT_STORES_DEFAULT not in skuobj.DefaultStoreDict:\r
-                    PcdDefaultStoreSet = set([defaultstorename  for defaultstorename in skuobj.DefaultStoreDict])\r
+                    PcdDefaultStoreSet = set(defaultstorename  for defaultstorename in skuobj.DefaultStoreDict)\r
                     mindefaultstorename = DefaultStoreMgr.GetMin(PcdDefaultStoreSet)\r
                     skuobj.DefaultStoreDict[TAB_DEFAULT_STORES_DEFAULT] = copy.deepcopy(skuobj.DefaultStoreDict[mindefaultstorename])\r
         return Pcds\r
@@ -1057,36 +1054,36 @@ class DscBuildData(PlatformBuildClassObject):
             TokenCName += '.' + FieldName\r
         if PcdValue.startswith('H'):\r
             if FieldName and IsFieldValueAnArray(PcdValue[1:]):\r
-                PcdDatumType = 'VOID*'\r
+                PcdDatumType = TAB_VOID\r
                 IsArray = True\r
             if FieldName and not IsArray:\r
                 return PcdValue\r
             try:\r
                 PcdValue = ValueExpressionEx(PcdValue[1:], PcdDatumType, GuidDict)(True)\r
-            except BadExpression, Value:     \r
+            except BadExpression as Value:\r
                 EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s",  %s' %\r
                                 (TokenSpaceGuidCName, TokenCName, PcdValue, Value))\r
         elif PcdValue.startswith("L'") or PcdValue.startswith("'"):\r
             if FieldName and IsFieldValueAnArray(PcdValue):\r
-                PcdDatumType = 'VOID*'\r
+                PcdDatumType = TAB_VOID\r
                 IsArray = True\r
             if FieldName and not IsArray:\r
                 return PcdValue\r
             try:\r
                 PcdValue = ValueExpressionEx(PcdValue, PcdDatumType, GuidDict)(True)\r
-            except BadExpression, Value:\r
+            except BadExpression as Value:\r
                 EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s",  %s' %\r
                                 (TokenSpaceGuidCName, TokenCName, PcdValue, Value))\r
         elif PcdValue.startswith('L'):\r
             PcdValue = 'L"' + PcdValue[1:] + '"'\r
             if FieldName and IsFieldValueAnArray(PcdValue):\r
-                PcdDatumType = 'VOID*'\r
+                PcdDatumType = TAB_VOID\r
                 IsArray = True\r
             if FieldName and not IsArray:\r
                 return PcdValue\r
             try:\r
                 PcdValue = ValueExpressionEx(PcdValue, PcdDatumType, GuidDict)(True)\r
-            except BadExpression, Value:\r
+            except BadExpression as Value:\r
                 EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s",  %s' %\r
                                 (TokenSpaceGuidCName, TokenCName, PcdValue, Value))\r
         else:\r
@@ -1095,7 +1092,7 @@ class DscBuildData(PlatformBuildClassObject):
             if PcdValue.upper() == 'TRUE':\r
                 PcdValue = str(1)\r
             if not FieldName:\r
-                if PcdDatumType not in ['UINT8','UINT16','UINT32','UINT64','BOOLEAN']:\r
+                if PcdDatumType not in TAB_PCD_NUMERIC_TYPES:\r
                     PcdValue = '"' + PcdValue + '"'\r
             else:\r
                 IsArray = False\r
@@ -1107,13 +1104,13 @@ class DscBuildData(PlatformBuildClassObject):
                 except:\r
                     PcdValue = '"' + PcdValue + '"'\r
                 if IsFieldValueAnArray(PcdValue):\r
-                    PcdDatumType = 'VOID*'\r
+                    PcdDatumType = TAB_VOID\r
                     IsArray = True\r
                 if not IsArray:\r
                     return PcdValue\r
             try:\r
                 PcdValue = ValueExpressionEx(PcdValue, PcdDatumType, GuidDict)(True)\r
-            except BadExpression, Value:\r
+            except BadExpression as Value:\r
                 EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s",  %s' %\r
                                 (TokenSpaceGuidCName, TokenCName, PcdValue, Value))\r
         return PcdValue\r
@@ -1185,11 +1182,10 @@ class DscBuildData(PlatformBuildClassObject):
                             options[Key] += ' ' + Option\r
         return self._ModuleTypeOptions[Edk, ModuleType]\r
 \r
-    def GetStructurePcdInfo(self, PcdSet):\r
-        structure_pcd_data = {}\r
+    @staticmethod\r
+    def GetStructurePcdInfo(PcdSet):\r
+        structure_pcd_data = defaultdict(list)\r
         for item in PcdSet:\r
-            if (item[0],item[1]) not in structure_pcd_data:\r
-                structure_pcd_data[(item[0],item[1])] = []\r
             structure_pcd_data[(item[0],item[1])].append(item)\r
 \r
         return structure_pcd_data\r
@@ -1246,7 +1242,7 @@ class DscBuildData(PlatformBuildClassObject):
                             for defaultstore in SkuInfo.DefaultStoreDict:\r
                                 SkuInfo.DefaultStoreDict[defaultstore] = NoFiledValues[(Pcd.TokenSpaceGuidCName,Pcd.TokenCName)][0]\r
                     if Pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII], self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII]]:\r
-                        if Pcd.DatumType == "VOID*":\r
+                        if Pcd.DatumType == TAB_VOID:\r
                             if not Pcd.MaxDatumSize:\r
                                 Pcd.MaxDatumSize = '0'\r
                             CurrentSize = int(Pcd.MaxDatumSize,16) if Pcd.MaxDatumSize.upper().startswith("0X") else int(Pcd.MaxDatumSize)\r
@@ -1296,7 +1292,7 @@ class DscBuildData(PlatformBuildClassObject):
                 S_PcdSet.append([ TokenSpaceGuid.split(".")[0],TokenSpaceGuid.split(".")[1], PcdCName,SkuName, default_store,Dummy5, AnalyzePcdExpression(Setting)[0]])\r
 \r
         # handle pcd value override\r
-        StrPcdSet = self.GetStructurePcdInfo(S_PcdSet)\r
+        StrPcdSet = DscBuildData.GetStructurePcdInfo(S_PcdSet)\r
         S_pcd_set = OrderedDict()\r
         for str_pcd in StrPcdSet:\r
             str_pcd_obj = Pcds.get((str_pcd[1], str_pcd[0]), None)\r
@@ -1352,7 +1348,7 @@ class DscBuildData(PlatformBuildClassObject):
                         nextskuid = self.SkuIdMgr.GetNextSkuId(nextskuid)\r
                     stru_pcd.SkuOverrideValues[skuid] = copy.deepcopy(stru_pcd.SkuOverrideValues[nextskuid]) if not NoDefault else copy.deepcopy({defaultstorename: stru_pcd.DefaultValues for defaultstorename in DefaultStores} if DefaultStores else {TAB_DEFAULT_STORES_DEFAULT:stru_pcd.DefaultValues})\r
                     if not NoDefault:\r
-                        stru_pcd.ValueChain[(skuid,'')]= (nextskuid,'')\r
+                        stru_pcd.ValueChain.add((skuid,''))\r
             if stru_pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII], self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]]:\r
                 for skuid in SkuIds:\r
                     nextskuid = skuid\r
@@ -1365,20 +1361,20 @@ class DscBuildData(PlatformBuildClassObject):
                             nextskuid = self.SkuIdMgr.GetNextSkuId(nextskuid)\r
                     if NoDefault:\r
                         continue\r
-                    PcdDefaultStoreSet = set([defaultstorename  for defaultstorename in stru_pcd.SkuOverrideValues[nextskuid]])\r
+                    PcdDefaultStoreSet = set(defaultstorename  for defaultstorename in stru_pcd.SkuOverrideValues[nextskuid])\r
                     mindefaultstorename = DefaultStoreMgr.GetMin(PcdDefaultStoreSet)\r
 \r
                     for defaultstoreid in DefaultStores:\r
                         if defaultstoreid not in stru_pcd.SkuOverrideValues[skuid]:\r
                             stru_pcd.SkuOverrideValues[skuid][defaultstoreid] = copy.deepcopy(stru_pcd.SkuOverrideValues[nextskuid][mindefaultstorename])\r
-                            stru_pcd.ValueChain[(skuid,defaultstoreid)]= (nextskuid,mindefaultstorename)\r
+                            stru_pcd.ValueChain.add((skuid,defaultstoreid))\r
         S_pcd_set = DscBuildData.OverrideByFdfComm(S_pcd_set)\r
         Str_Pcd_Values = self.GenerateByteArrayValue(S_pcd_set)\r
         if Str_Pcd_Values:\r
             for (skuname,StoreName,PcdGuid,PcdName,PcdValue) in Str_Pcd_Values:\r
                 str_pcd_obj = S_pcd_set.get((PcdName, PcdGuid))\r
                 if str_pcd_obj is None:\r
-                    print PcdName, PcdGuid\r
+                    print(PcdName, PcdGuid)\r
                     raise\r
                 if str_pcd_obj.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII],\r
                                         self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]]:\r
@@ -1409,7 +1405,7 @@ class DscBuildData(PlatformBuildClassObject):
                 if str_pcd_obj.Type not in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII],\r
                                         self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]]:\r
                     continue\r
-                PcdDefaultStoreSet = set([defaultstorename  for skuobj in str_pcd_obj.SkuInfoList.values() for defaultstorename in skuobj.DefaultStoreDict])\r
+                PcdDefaultStoreSet = set(defaultstorename for skuobj in str_pcd_obj.SkuInfoList.values() for defaultstorename in skuobj.DefaultStoreDict)\r
                 DefaultStoreObj = DefaultStore(self._GetDefaultStores())\r
                 mindefaultstorename = DefaultStoreObj.GetMin(PcdDefaultStoreSet)\r
                 str_pcd_obj.SkuInfoList[self.SkuIdMgr.SystemSkuId].HiiDefaultValue = str_pcd_obj.SkuInfoList[self.SkuIdMgr.SystemSkuId].DefaultStoreDict[mindefaultstorename]\r
@@ -1505,7 +1501,7 @@ class DscBuildData(PlatformBuildClassObject):
         def get_length(value):\r
             Value = value.strip()\r
             if len(value) > 1:\r
-                if Value.startswith('GUID') and Value.endswith(')'):\r
+                if Value.startswith(TAB_GUID) and Value.endswith(')'):\r
                     return 16\r
                 if Value.startswith('L"') and Value.endswith('"'):\r
                     return len(Value[2:-1])\r
@@ -1519,7 +1515,7 @@ class DscBuildData(PlatformBuildClassObject):
                     return len(Value) - 2\r
             return len(Value)\r
 \r
-        return str(max([pcd_size for pcd_size in [get_length(item) for item in sku_values]]))\r
+        return str(max(get_length(item) for item in sku_values))\r
 \r
     @staticmethod\r
     def ExecuteCommand (Command):\r
@@ -1540,23 +1536,6 @@ class DscBuildData(PlatformBuildClassObject):
         Result = Result + '"'\r
         return Result\r
 \r
-    @staticmethod\r
-    def GetPcdMaxSize(Pcd):\r
-        if Pcd.DatumType in TAB_PCD_NUMERIC_TYPES:\r
-            return MAX_SIZE_TYPE[Pcd.DatumType]\r
-\r
-        MaxSize = int(Pcd.MaxDatumSize,10) if Pcd.MaxDatumSize else 0\r
-        if Pcd.PcdValueFromComm:\r
-            if Pcd.PcdValueFromComm.startswith("{") and Pcd.PcdValueFromComm.endswith("}"):\r
-                return max([len(Pcd.PcdValueFromComm.split(",")),MaxSize])\r
-            elif Pcd.PcdValueFromComm.startswith("\"") or Pcd.PcdValueFromComm.startswith("\'"):\r
-                return max([len(Pcd.PcdValueFromComm)-2+1,MaxSize])\r
-            elif Pcd.PcdValueFromComm.startswith("L\""):\r
-                return max([2*(len(Pcd.PcdValueFromComm)-3+1),MaxSize])\r
-            else:\r
-                return max([len(Pcd.PcdValueFromComm),MaxSize])\r
-        return MaxSize\r
-\r
     def GenerateSizeFunction(self,Pcd):\r
         CApp = "// Default Value in Dec \n"\r
         CApp = CApp + "void Cal_%s_%s_Size(UINT32 *Size){\n" % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName)\r
@@ -1568,7 +1547,7 @@ class DscBuildData(PlatformBuildClassObject):
                 IsArray = IsFieldValueAnArray(FieldList[FieldName.strip(".")][0])\r
                 if IsArray and not (FieldList[FieldName.strip(".")][0].startswith('{GUID') and FieldList[FieldName.strip(".")][0].endswith('}')):\r
                     try:\r
-                        Value = ValueExpressionEx(FieldList[FieldName.strip(".")][0], "VOID*", self._GuidDict)(True)\r
+                        Value = ValueExpressionEx(FieldList[FieldName.strip(".")][0], TAB_VOID, self._GuidDict)(True)\r
                     except BadExpression:\r
                         EdkLogger.error('Build', FORMAT_INVALID, "Invalid value format for %s. From %s Line %d " %\r
                                         (".".join((Pcd.TokenSpaceGuidCName, Pcd.TokenCName, FieldName.strip('.'))), FieldList[FieldName.strip(".")][1], FieldList[FieldName.strip(".")][2]))\r
@@ -1598,7 +1577,7 @@ class DscBuildData(PlatformBuildClassObject):
                         IsArray = IsFieldValueAnArray(FieldList[FieldName.strip(".")][0])\r
                         if IsArray and not (FieldList[FieldName.strip(".")][0].startswith('{GUID') and FieldList[FieldName.strip(".")][0].endswith('}')):\r
                             try:\r
-                                Value = ValueExpressionEx(FieldList[FieldName.strip(".")][0], "VOID*", self._GuidDict)(True)\r
+                                Value = ValueExpressionEx(FieldList[FieldName.strip(".")][0], TAB_VOID, self._GuidDict)(True)\r
                             except BadExpression:\r
                                 EdkLogger.error('Build', FORMAT_INVALID, "Invalid value format for %s. From %s Line %d " %\r
                                                 (".".join((Pcd.TokenSpaceGuidCName, Pcd.TokenCName, FieldName.strip('.'))), FieldList[FieldName.strip(".")][1], FieldList[FieldName.strip(".")][2]))\r
@@ -1622,7 +1601,7 @@ class DscBuildData(PlatformBuildClassObject):
             IsArray = IsFieldValueAnArray(Pcd.PcdFieldValueFromComm[FieldName.strip(".")][0])\r
             if IsArray and not (Pcd.PcdFieldValueFromComm[FieldName.strip(".")][0].startswith('{GUID') and Pcd.PcdFieldValueFromComm[FieldName.strip(".")][0].endswith('}')):\r
                 try:\r
-                    Value = ValueExpressionEx(Pcd.PcdFieldValueFromComm[FieldName.strip(".")][0], "VOID*", self._GuidDict)(True)\r
+                    Value = ValueExpressionEx(Pcd.PcdFieldValueFromComm[FieldName.strip(".")][0], TAB_VOID, self._GuidDict)(True)\r
                 except BadExpression:\r
                     EdkLogger.error('Build', FORMAT_INVALID, "Invalid value format for %s. From %s Line %d " %\r
                                     (".".join((Pcd.TokenSpaceGuidCName, Pcd.TokenCName, FieldName.strip('.'))), Pcd.PcdFieldValueFromComm[FieldName.strip(".")][1], Pcd.PcdFieldValueFromComm[FieldName.strip(".")][2]))\r
@@ -1639,7 +1618,7 @@ class DscBuildData(PlatformBuildClassObject):
                 while '[' in FieldName:\r
                     FieldName = FieldName.rsplit('[', 1)[0]\r
                     CApp = CApp + '  __FLEXIBLE_SIZE(*Size, %s, %s, %d); // From %s Line %d Value %s \n' % (Pcd.DatumType, FieldName.strip("."), ArrayIndex + 1, Pcd.PcdFieldValueFromComm[FieldName_ori][1], Pcd.PcdFieldValueFromComm[FieldName_ori][2], Pcd.PcdFieldValueFromComm[FieldName_ori][0])\r
-        CApp = CApp + "  *Size = (%d > *Size ? %d : *Size); // The Pcd maxsize is %d \n" % (DscBuildData.GetPcdMaxSize(Pcd),DscBuildData.GetPcdMaxSize(Pcd),DscBuildData.GetPcdMaxSize(Pcd))\r
+        CApp = CApp + "  *Size = (%d > *Size ? %d : *Size); // The Pcd maxsize is %d \n" % (Pcd.GetPcdMaxSize(),Pcd.GetPcdMaxSize(),Pcd.GetPcdMaxSize())\r
         CApp = CApp + "}\n"\r
         return CApp\r
 \r
@@ -1658,7 +1637,7 @@ class DscBuildData(PlatformBuildClassObject):
         IsArray = IsFieldValueAnArray(Pcd.DefaultValueFromDec)\r
         if IsArray:\r
             try:\r
-                DefaultValueFromDec = ValueExpressionEx(Pcd.DefaultValueFromDec, "VOID*")(True)\r
+                DefaultValueFromDec = ValueExpressionEx(Pcd.DefaultValueFromDec, TAB_VOID)(True)\r
             except BadExpression:\r
                 EdkLogger.error("Build", FORMAT_INVALID, "Invalid value format for %s.%s, from DEC: %s" %\r
                                 (Pcd.TokenSpaceGuidCName, Pcd.TokenCName, DefaultValueFromDec))\r
@@ -1679,7 +1658,7 @@ class DscBuildData(PlatformBuildClassObject):
                 IsArray = IsFieldValueAnArray(FieldList[FieldName][0])\r
                 if IsArray:\r
                     try:\r
-                        FieldList[FieldName][0] = ValueExpressionEx(FieldList[FieldName][0], "VOID*", self._GuidDict)(True)\r
+                        FieldList[FieldName][0] = ValueExpressionEx(FieldList[FieldName][0], TAB_VOID, self._GuidDict)(True)\r
                     except BadExpression:\r
                         EdkLogger.error('Build', FORMAT_INVALID, "Invalid value format for %s. From %s Line %d " %\r
                                         (".".join((Pcd.TokenSpaceGuidCName, Pcd.TokenCName, FieldName)), FieldList[FieldName][1],FieldList[FieldName][2]))\r
@@ -1732,7 +1711,7 @@ class DscBuildData(PlatformBuildClassObject):
                 IsArray = IsFieldValueAnArray(FieldList)\r
                 if IsArray:\r
                     try:\r
-                        FieldList = ValueExpressionEx(FieldList, "VOID*")(True)\r
+                        FieldList = ValueExpressionEx(FieldList, TAB_VOID)(True)\r
                     except BadExpression:\r
                         EdkLogger.error("Build", FORMAT_INVALID, "Invalid value format for %s.%s, from DSC: %s" %\r
                                         (Pcd.TokenSpaceGuidCName, Pcd.TokenCName, FieldList))\r
@@ -1762,7 +1741,7 @@ class DscBuildData(PlatformBuildClassObject):
                     IsArray = IsFieldValueAnArray(FieldList[FieldName][0])\r
                     if IsArray:\r
                         try:\r
-                            FieldList[FieldName][0] = ValueExpressionEx(FieldList[FieldName][0], "VOID*", self._GuidDict)(True)\r
+                            FieldList[FieldName][0] = ValueExpressionEx(FieldList[FieldName][0], TAB_VOID, self._GuidDict)(True)\r
                         except BadExpression:\r
                             EdkLogger.error('Build', FORMAT_INVALID, "Invalid value format for %s. From %s Line %d " %\r
                                             (".".join((Pcd.TokenSpaceGuidCName, Pcd.TokenCName, FieldName)), FieldList[FieldName][1], FieldList[FieldName][2]))\r
@@ -1806,7 +1785,7 @@ class DscBuildData(PlatformBuildClassObject):
                 IsArray = IsFieldValueAnArray(FieldList)\r
                 if IsArray:\r
                     try:\r
-                        FieldList = ValueExpressionEx(FieldList, "VOID*")(True)\r
+                        FieldList = ValueExpressionEx(FieldList, TAB_VOID)(True)\r
                     except BadExpression:\r
                         EdkLogger.error("Build", FORMAT_INVALID, "Invalid value format for %s.%s, from Command: %s" %\r
                                         (Pcd.TokenSpaceGuidCName, Pcd.TokenCName, FieldList))\r
@@ -1825,12 +1804,12 @@ class DscBuildData(PlatformBuildClassObject):
                 IsArray = IsFieldValueAnArray(FieldList[FieldName][0])\r
                 if IsArray:\r
                     try:\r
-                        FieldList[FieldName][0] = ValueExpressionEx(FieldList[FieldName][0], "VOID*", self._GuidDict)(True)\r
+                        FieldList[FieldName][0] = ValueExpressionEx(FieldList[FieldName][0], TAB_VOID, self._GuidDict)(True)\r
                     except BadExpression:\r
                         EdkLogger.error('Build', FORMAT_INVALID, "Invalid value format for %s. From %s Line %d " %\r
                                         (".".join((Pcd.TokenSpaceGuidCName, Pcd.TokenCName, FieldName)), FieldList[FieldName][1], FieldList[FieldName][2]))\r
                     except:\r
-                        print "error"\r
+                        print("error")\r
                 try:\r
                     Value, ValueSize = ParseFieldValue (FieldList[FieldName][0])\r
                 except Exception:\r
@@ -1952,13 +1931,11 @@ class DscBuildData(PlatformBuildClassObject):
         InitByteValue = ""\r
         CApp = PcdMainCHeader\r
 \r
-        Includes = {}\r
         IncludeFiles = set()\r
         for PcdName in StructuredPcds:\r
             Pcd = StructuredPcds[PcdName]\r
             for IncludeFile in Pcd.StructuredPcdIncludeFile:\r
-                if IncludeFile not in Includes:\r
-                    Includes[IncludeFile] = True\r
+                if IncludeFile not in IncludeFiles:\r
                     IncludeFiles.add(IncludeFile)\r
                     CApp = CApp + '#include <%s>\n' % (IncludeFile)\r
         CApp = CApp + '\n'\r
@@ -2081,11 +2058,11 @@ class DscBuildData(PlatformBuildClassObject):
                         ValueList = Value.split()\r
                         if ValueList:\r
                             for Id, Item in enumerate(ValueList):\r
-                                if Item == '-D' or Item == '/D':\r
+                                if Item in ['-D', '/D', '-U', '/U']:\r
                                     CC_FLAGS += ' ' + Item\r
                                     if Id + 1 < len(ValueList):\r
                                         CC_FLAGS += ' ' + ValueList[Id + 1]\r
-                                elif Item.startswith('/D') or Item.startswith('-D'):\r
+                                elif Item.startswith(('-D', '/D', '-U', '/U')):\r
                                     CC_FLAGS += ' ' + Item\r
         MakeApp += CC_FLAGS\r
 \r
@@ -2102,7 +2079,7 @@ class DscBuildData(PlatformBuildClassObject):
         SearchPathList = []\r
         SearchPathList.append(os.path.normpath(mws.join(GlobalData.gWorkspace, "BaseTools/Source/C/Include")))\r
         SearchPathList.append(os.path.normpath(mws.join(GlobalData.gWorkspace, "BaseTools/Source/C/Common")))\r
-        SearchPathList.extend([str(item) for item in IncSearchList])\r
+        SearchPathList.extend(str(item) for item in IncSearchList)\r
         IncFileList = GetDependencyList(IncludeFileFullPaths,SearchPathList)\r
         for include_file in IncFileList:\r
             MakeApp += "$(OBJECTS) : %s\n" % include_file\r
@@ -2176,7 +2153,7 @@ class DscBuildData(PlatformBuildClassObject):
         if DscBuildData.NeedUpdateOutput(OutputValueFile, PcdValueInitExe ,InputValueFile):\r
             Command = PcdValueInitExe + ' -i %s -o %s' % (InputValueFile, OutputValueFile)\r
             returncode, StdOut, StdErr = DscBuildData.ExecuteCommand (Command)\r
-            if returncode <> 0:\r
+            if returncode != 0:\r
                 EdkLogger.warn('Build', COMMAND_FAILURE, 'Can not collect output from command: %s' % Command)\r
 \r
         File = open (OutputValueFile, 'r')\r
@@ -2332,7 +2309,7 @@ class DscBuildData(PlatformBuildClassObject):
         Pcds = {}\r
         DefaultStoreObj = DefaultStore(self._GetDefaultStores())\r
         SkuIds = {skuname:skuid for skuname,skuid in self.SkuIdMgr.AvailableSkuIdSet.items() if skuname != TAB_COMMON}\r
-        DefaultStores = set([storename for pcdobj in PcdSet.values() for skuobj in pcdobj.SkuInfoList.values() for storename in skuobj.DefaultStoreDict])\r
+        DefaultStores = set(storename for pcdobj in PcdSet.values() for skuobj in pcdobj.SkuInfoList.values() for storename in skuobj.DefaultStoreDict)\r
         for PcdCName, TokenSpaceGuid in PcdSet:\r
             PcdObj = PcdSet[(PcdCName, TokenSpaceGuid)]\r
             self.CopyDscRawValue(PcdObj)\r
@@ -2348,7 +2325,7 @@ class DscBuildData(PlatformBuildClassObject):
             if PcdType in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII], self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]]:\r
                 for skuid in PcdObj.SkuInfoList:\r
                     skuobj = PcdObj.SkuInfoList[skuid]\r
-                    mindefaultstorename = DefaultStoreObj.GetMin(set([defaultstorename  for defaultstorename in skuobj.DefaultStoreDict]))\r
+                    mindefaultstorename = DefaultStoreObj.GetMin(set(defaultstorename for defaultstorename in skuobj.DefaultStoreDict))\r
                     for defaultstorename in DefaultStores:\r
                         if defaultstorename not in skuobj.DefaultStoreDict:\r
                             skuobj.DefaultStoreDict[defaultstorename] = copy.deepcopy(skuobj.DefaultStoreDict[mindefaultstorename])\r
@@ -2421,7 +2398,7 @@ class DscBuildData(PlatformBuildClassObject):
             if VariableOffset.isdigit():\r
                 if int(VariableOffset, 10) > 0xFFFF:\r
                     ExceedMax = True\r
-            elif re.match(r'[\t\s]*0[xX][a-fA-F0-9]+$', VariableOffset):\r
+            elif variablePattern.match(VariableOffset):\r
                 if int(VariableOffset, 16) > 0xFFFF:\r
                     ExceedMax = True\r
             # For Offset written in "A.B"\r
@@ -2497,7 +2474,7 @@ class DscBuildData(PlatformBuildClassObject):
                 MaxSize = int(pcd.MaxDatumSize, 0)\r
             else:\r
                 MaxSize = 0\r
-            if pcd.DatumType not in ['BOOLEAN','UINT8','UINT16','UINT32','UINT64']:\r
+            if pcd.DatumType not in TAB_PCD_NUMERIC_TYPES:\r
                 for (_, skuobj) in pcd.SkuInfoList.items():\r
                     datalen = 0\r
                     skuobj.HiiDefaultValue = StringToArray(skuobj.HiiDefaultValue)\r
@@ -2522,7 +2499,7 @@ class DscBuildData(PlatformBuildClassObject):
         invalidhii = []\r
         for pcdname in Pcds:\r
             pcd = Pcds[pcdname]\r
-            varnameset = set([sku.VariableName for (skuid,sku) in pcd.SkuInfoList.items()])\r
+            varnameset = set(sku.VariableName for (skuid,sku) in pcd.SkuInfoList.items())\r
             if len(varnameset) > 1:\r
                 invalidhii.append(".".join((pcdname[1],pcdname[0])))\r
         if len(invalidhii):\r