]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Workspace/DscBuildData.py
BaseTools: Not compare the VOID* difference in the DSC and DEC file
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / DscBuildData.py
index ac0f0bee47a9058e4fcdcc6e9a838eee6f98236f..5ed879c8d7a919dc48f5c721df57b0d768c58e32 100644 (file)
@@ -17,8 +17,6 @@
 #  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 __future__ import print_function\r
-from __future__ import absolute_import\r
 from Common.StringUtils import *\r
 from Common.DataType import *\r
 from Common.Misc import *\r
@@ -130,9 +128,16 @@ def GetDependencyList(FileStack, SearchPathList):
 \r
             if len(FileContent) == 0:\r
                 continue\r
-\r
+            IncludedFileList = []\r
             if FileContent[0] == 0xff or FileContent[0] == 0xfe:\r
-                FileContent = unicode(FileContent, "utf-16")\r
+                FileContent = str(FileContent, "utf-16")\r
+                IncludedFileList = gIncludePattern.findall(FileContent)\r
+            else:\r
+                try:\r
+                    FileContent = str(FileContent, "utf-8")\r
+                    IncludedFileList = gIncludePattern.findall(FileContent)\r
+                except:\r
+                    pass\r
             IncludedFileList = gIncludePattern.findall(FileContent)\r
 \r
             for Inc in IncludedFileList:\r
@@ -932,7 +937,8 @@ class DscBuildData(PlatformBuildClassObject):
                 EdkLogger.error('build', FORMAT_INVALID, ErrStr, File=self.MetaFile, Line=LineNo,\r
                                 ExtraData="%s.%s" % (TokenSpaceGuid, PcdCName))\r
             if PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT, MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_PATCHABLE_IN_MODULE):\r
-                if self._DecPcds[PcdCName, TokenSpaceGuid].DatumType.strip() != ValueList[1].strip():\r
+                if self._DecPcds[PcdCName, TokenSpaceGuid].DatumType.strip() in TAB_PCD_NUMERIC_TYPES_VOID \\r
+                 and self._DecPcds[PcdCName, TokenSpaceGuid].DatumType.strip() != ValueList[1].strip():\r
                     EdkLogger.error('build', FORMAT_INVALID, "Pcd datumtype used in DSC file is not the same as its declaration in DEC file.", File=self.MetaFile, Line=LineNo,\r
                                 ExtraData="%s.%s|%s" % (TokenSpaceGuid, PcdCName, Setting))\r
         if (TokenSpaceGuid + '.' + PcdCName) in GlobalData.gPlatformPcds:\r
@@ -1287,12 +1293,17 @@ class DscBuildData(PlatformBuildClassObject):
             if len(commpcds[0]) == 5:\r
                 return True\r
             return False\r
-\r
+        NoFiledValues = OrderedDict()\r
         if CheckStructureInComm(GlobalData.BuildOptionPcd):\r
-            StructurePcdInCom = {(item[0], item[1], item[2] ):(item[3], item[4]) for item in GlobalData.BuildOptionPcd } if GlobalData.BuildOptionPcd else {}\r
-            NoFiledValues = {(item[0], item[1]):StructurePcdInCom[item] for item in StructurePcdInCom if not item[2]}\r
+            StructurePcdInCom = OrderedDict()\r
+            for item in GlobalData.BuildOptionPcd:\r
+                StructurePcdInCom[(item[0], item[1], item[2] )] = (item[3], item[4])\r
+            for item in StructurePcdInCom:\r
+                if not item[2]:\r
+                    NoFiledValues[(item[0], item[1])] = StructurePcdInCom[item]\r
         else:\r
-            NoFiledValues = {(item[0], item[1]):[item[2]] for item in GlobalData.BuildOptionPcd}\r
+            for item in GlobalData.BuildOptionPcd:\r
+                NoFiledValues[(item[0], item[1])] = [item[2]]\r
         for Guid, Name in NoFiledValues:\r
             if (Name, Guid) in AllPcds:\r
                 Pcd = AllPcds.get((Name, Guid))\r
@@ -1531,6 +1542,7 @@ class DscBuildData(PlatformBuildClassObject):
 \r
                 str_pcd_obj.MaxDatumSize = self.GetStructurePcdMaxSize(str_pcd_obj)\r
                 Pcds[str_pcd_obj.TokenCName, str_pcd_obj.TokenSpaceGuidCName] = str_pcd_obj\r
+                Pcds[str_pcd_obj.TokenCName, str_pcd_obj.TokenSpaceGuidCName].CustomAttribute['IsStru']=True\r
 \r
             for pcdkey in Pcds:\r
                 pcd = Pcds[pcdkey]\r
@@ -1540,7 +1552,7 @@ class DscBuildData(PlatformBuildClassObject):
                 elif TAB_DEFAULT in pcd.SkuInfoList and TAB_COMMON in pcd.SkuInfoList:\r
                     del pcd.SkuInfoList[TAB_COMMON]\r
 \r
-        map(self.FilterSkuSettings, [Pcds[pcdkey] for pcdkey in Pcds if Pcds[pcdkey].Type in DynamicPcdType])\r
+        list(map(self.FilterSkuSettings, [Pcds[pcdkey] for pcdkey in Pcds if Pcds[pcdkey].Type in DynamicPcdType]))\r
         return Pcds\r
 \r
     ## Retrieve non-dynamic PCD settings\r
@@ -1590,7 +1602,7 @@ class DscBuildData(PlatformBuildClassObject):
             else:\r
                 PcdValueDict[PcdCName, TokenSpaceGuid] = {SkuName:(PcdValue, DatumType, MaxDatumSize)}\r
 \r
-        for ((PcdCName, TokenSpaceGuid), PcdSetting) in PcdValueDict.iteritems():\r
+        for ((PcdCName, TokenSpaceGuid), PcdSetting) in PcdValueDict.items():\r
             if self.SkuIdMgr.SystemSkuId in PcdSetting:\r
                 PcdValue, DatumType, MaxDatumSize = PcdSetting[self.SkuIdMgr.SystemSkuId]\r
             elif TAB_DEFAULT in PcdSetting:\r
@@ -1651,7 +1663,7 @@ class DscBuildData(PlatformBuildClassObject):
         except:\r
             EdkLogger.error('Build', COMMAND_FAILURE, 'Can not execute command: %s' % Command)\r
         Result = Process.communicate()\r
-        return Process.returncode, Result[0], Result[1]\r
+        return Process.returncode, Result[0].decode(encoding='utf-8', errors='ignore'), Result[1].decode(encoding='utf-8', errors='ignore')\r
 \r
     @staticmethod\r
     def IntToCString(Value, ValueSize):\r
@@ -2219,7 +2231,7 @@ class DscBuildData(PlatformBuildClassObject):
                       'include $(MAKEROOT)/Makefiles/app.makefile\n' + 'INCLUDE +='\r
 \r
         IncSearchList = []\r
-        PlatformInc = {}\r
+        PlatformInc = OrderedDict()\r
         for Cache in self._Bdb._CACHE_.values():\r
             if Cache.MetaFile.Ext.lower() != '.dec':\r
                 continue\r
@@ -2249,7 +2261,7 @@ class DscBuildData(PlatformBuildClassObject):
         CC_FLAGS = LinuxCFLAGS\r
         if sys.platform == "win32":\r
             CC_FLAGS = WindowsCFLAGS\r
-        BuildOptions = {}\r
+        BuildOptions = OrderedDict()\r
         for Options in self.BuildOptions:\r
             if Options[2] != EDKII_NAME:\r
                 continue\r
@@ -2264,7 +2276,7 @@ class DscBuildData(PlatformBuildClassObject):
                 if Tag == "*" or Tag == self._Toolchain:\r
                     if Arch == "*" or Arch == self.Arch:\r
                         if Tool not in BuildOptions:\r
-                            BuildOptions[Tool] = {}\r
+                            BuildOptions[Tool] = OrderedDict()\r
                         if Attr != "FLAGS" or Attr not in BuildOptions[Tool] or self.BuildOptions[Options].startswith('='):\r
                             BuildOptions[Tool][Attr] = self.BuildOptions[Options]\r
                         else:\r
@@ -2469,7 +2481,7 @@ class DscBuildData(PlatformBuildClassObject):
                                                     PcdValue,\r
                                                     '',\r
                                                     MaxDatumSize,\r
-                                                    {SkuName : SkuInfo},\r
+                                                    OrderedDict({SkuName : SkuInfo}),\r
                                                     False,\r
                                                     None,\r
                                                     IsDsc=True)\r
@@ -2494,7 +2506,7 @@ class DscBuildData(PlatformBuildClassObject):
             elif TAB_DEFAULT in pcd.SkuInfoList and TAB_COMMON in pcd.SkuInfoList:\r
                 del pcd.SkuInfoList[TAB_COMMON]\r
 \r
-        map(self.FilterSkuSettings, Pcds.values())\r
+        list(map(self.FilterSkuSettings, Pcds.values()))\r
 \r
         return Pcds\r
 \r
@@ -2526,7 +2538,7 @@ class DscBuildData(PlatformBuildClassObject):
             return False\r
 \r
     def CompletePcdValues(self, PcdSet):\r
-        Pcds = {}\r
+        Pcds = OrderedDict()\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
@@ -2559,7 +2571,7 @@ class DscBuildData(PlatformBuildClassObject):
                     PcdObj.SkuInfoList[skuname].SkuId = skuid\r
                     PcdObj.SkuInfoList[skuname].SkuIdName = skuname\r
             if PcdType in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII], self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]]:\r
-                PcdObj.DefaultValue = PcdObj.SkuInfoList.values()[0].HiiDefaultValue if self.SkuIdMgr.SkuUsageType == self.SkuIdMgr.SINGLE else PcdObj.SkuInfoList[TAB_DEFAULT].HiiDefaultValue\r
+                PcdObj.DefaultValue = list(PcdObj.SkuInfoList.values())[0].HiiDefaultValue if self.SkuIdMgr.SkuUsageType == self.SkuIdMgr.SINGLE else PcdObj.SkuInfoList[TAB_DEFAULT].HiiDefaultValue\r
             Pcds[PcdCName, TokenSpaceGuid]= PcdObj\r
         return Pcds\r
     ## Retrieve dynamic HII PCD settings\r
@@ -2664,7 +2676,7 @@ class DscBuildData(PlatformBuildClassObject):
                                                 DefaultValue,\r
                                                 '',\r
                                                 '',\r
-                                                {SkuName : SkuInfo},\r
+                                                OrderedDict({SkuName : SkuInfo}),\r
                                                 False,\r
                                                 None,\r
                                                 pcdDecObject.validateranges,\r
@@ -2675,11 +2687,12 @@ class DscBuildData(PlatformBuildClassObject):
                     PcdClassObj.UserDefinedDefaultStoresFlag = True\r
                 Pcds[PcdCName, TokenSpaceGuid] = PcdClassObj\r
 \r
+                Pcds[PcdCName, TokenSpaceGuid].CustomAttribute['DscPosition'] = int(Dummy4)\r
             if SkuName not in Pcds[PcdCName, TokenSpaceGuid].DscRawValue:\r
                 Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName] = {}\r
             Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName][DefaultStore] = DefaultValue\r
         for pcd in Pcds.values():\r
-            SkuInfoObj = pcd.SkuInfoList.values()[0]\r
+            SkuInfoObj = list(pcd.SkuInfoList.values())[0]\r
             pcdDecObject = self._DecPcds[pcd.TokenCName, pcd.TokenSpaceGuidCName]\r
             pcd.DatumType = pcdDecObject.DatumType\r
             # Only fix the value while no value provided in DSC file.\r
@@ -2719,7 +2732,7 @@ class DscBuildData(PlatformBuildClassObject):
             invalidpcd = ",".join(invalidhii)\r
             EdkLogger.error('build', PCD_VARIABLE_INFO_ERROR, Message='The same HII PCD must map to the same EFI variable for all SKUs', File=self.MetaFile, ExtraData=invalidpcd)\r
 \r
-        map(self.FilterSkuSettings, Pcds.values())\r
+        list(map(self.FilterSkuSettings, Pcds.values()))\r
 \r
         return Pcds\r
 \r
@@ -2808,7 +2821,7 @@ class DscBuildData(PlatformBuildClassObject):
                                                 InitialValue,\r
                                                 '',\r
                                                 MaxDatumSize,\r
-                                                {SkuName : SkuInfo},\r
+                                                OrderedDict({SkuName : SkuInfo}),\r
                                                 False,\r
                                                 None,\r
                                                 IsDsc=True)\r
@@ -2817,7 +2830,7 @@ class DscBuildData(PlatformBuildClassObject):
                 Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName] = {}\r
             Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName][TAB_DEFAULT_STORES_DEFAULT] = InitialValue\r
         for pcd in Pcds.values():\r
-            SkuInfoObj = pcd.SkuInfoList.values()[0]\r
+            SkuInfoObj = list(pcd.SkuInfoList.values())[0]\r
             pcdDecObject = self._DecPcds[pcd.TokenCName, pcd.TokenSpaceGuidCName]\r
             pcd.DatumType = pcdDecObject.DatumType\r
             # Only fix the value while no value provided in DSC file.\r
@@ -2835,7 +2848,7 @@ class DscBuildData(PlatformBuildClassObject):
                 del pcd.SkuInfoList[TAB_COMMON]\r
 \r
 \r
-        map(self.FilterSkuSettings, Pcds.values())\r
+        list(map(self.FilterSkuSettings, Pcds.values()))\r
         return Pcds\r
 \r
     ## Add external modules\r