]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Common/Misc.py
BaseTools: Move variable out of Global
[mirror_edk2.git] / BaseTools / Source / Python / Common / Misc.py
index fe5a0b810166edcda6a798f1156408ba2ed7cea1..044ef8d62bfe62ea4573fb3b94c7eb6c567d5296 100644 (file)
@@ -55,6 +55,13 @@ gFileTimeStampCache = {}    # {file path : file time stamp}
 ## Dictionary used to store dependencies of files\r
 gDependencyDatabase = {}    # arch : {file path : [dependent files list]}\r
 \r
+#\r
+# If a module is built more than once with different PCDs or library classes\r
+# a temporary INF file with same content is created, the temporary file is removed\r
+# when build exits.\r
+#\r
+_TempInfs = []\r
+\r
 def GetVariableOffset(mapfilepath, efifilepath, varnames):\r
     """ Parse map file to get variable offset in current EFI file \r
     @param mapfilepath    Map file absolution path\r
@@ -132,7 +139,7 @@ def _parseForGCC(lines, efifilepath, varnames):
                     if Str:\r
                         m = pcdPatternGcc.match(Str.strip())\r
                         if m is not None:\r
-                            varoffset.append((varname, int(m.groups(0)[0], 16) , int(sections[-1][1], 16), sections[-1][0]))\r
+                            varoffset.append((varname, int(m.groups(0)[0], 16), int(sections[-1][1], 16), sections[-1][0]))\r
 \r
     if not varoffset:\r
         return []\r
@@ -280,18 +287,18 @@ def ProcessDuplicatedInf(Path, BaseName, Workspace):
     # If file exists, compare contents\r
     #\r
     if os.path.exists(TempFullPath):\r
-        with open(str(Path), 'rb') as f1: Src = f1.read()\r
-        with open(TempFullPath, 'rb') as f2: Dst = f2.read()\r
-        if Src == Dst:\r
-            return RtPath\r
-    GlobalData.gTempInfs.append(TempFullPath)\r
+        with open(str(Path), 'rb') as f1, open(TempFullPath, 'rb') as f2: \r
+            if f1.read() == f2.read():\r
+                return RtPath\r
+    _TempInfs.append(TempFullPath)\r
     shutil.copy2(str(Path), TempFullPath)\r
     return RtPath\r
 \r
-## Remove temporary created INFs whose paths were saved in gTempInfs\r
+## Remove temporary created INFs whose paths were saved in _TempInfs\r
 #\r
 def ClearDuplicatedInf():\r
-    for File in GlobalData.gTempInfs:\r
+    while _TempInfs:\r
+        File = _TempInfs.pop()\r
         if os.path.exists(File):\r
             os.remove(File)\r
 \r
@@ -478,7 +485,7 @@ def SaveFileOnChange(File, Content, IsBinaryFile=True):
             Fd = open(File, "wb")\r
             Fd.write(Content)\r
             Fd.close()\r
-    except IOError, X:\r
+    except IOError as X:\r
         EdkLogger.error(None, FILE_CREATE_FAILURE, ExtraData='IOError %s' % X)\r
 \r
     return True\r
@@ -512,7 +519,7 @@ def DataRestore(File):
     try:\r
         Fd = open(File, 'rb')\r
         Data = cPickle.load(Fd)\r
-    except Exception, e:\r
+    except Exception as e:\r
         EdkLogger.verbose("Failed to load [%s]\n\t%s" % (File, str(e)))\r
         Data = None\r
     finally:\r
@@ -833,7 +840,7 @@ class TemplateString(object):
     def Append(self, AppendString, Dictionary=None):\r
         if Dictionary:\r
             SectionList = self._Parse(AppendString)\r
-            self.String += "".join([S.Instantiate(Dictionary) for S in SectionList])\r
+            self.String += "".join(S.Instantiate(Dictionary) for S in SectionList)\r
         else:\r
             self.String += AppendString\r
 \r
@@ -844,7 +851,7 @@ class TemplateString(object):
     #   @retval     str             The string replaced with placeholder values\r
     #\r
     def Replace(self, Dictionary=None):\r
-        return "".join([S.Instantiate(Dictionary) for S in self._TemplateSectionList])\r
+        return "".join(S.Instantiate(Dictionary) for S in self._TemplateSectionList)\r
 \r
 ## Progress indicator class\r
 #\r
@@ -1278,7 +1285,7 @@ def ParseDevPathValue (Value):
     try:\r
         p = subprocess.Popen(Cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)\r
         out, err = p.communicate()\r
-    except Exception, X:\r
+    except Exception as X:\r
         raise BadExpression("DevicePath: %s" % (str(X)) )\r
     finally:\r
         subprocess._cleanup()\r
@@ -1291,9 +1298,9 @@ def ParseDevPathValue (Value):
     return '{' + out + '}', Size\r
 \r
 def ParseFieldValue (Value):\r
-    if type(Value) == type(0):\r
+    if isinstance(Value, type(0)):\r
         return Value, (Value.bit_length() + 7) / 8\r
-    if type(Value) <> type(''):\r
+    if not isinstance(Value, type('')):\r
         raise BadExpression('Type %s is %s' %(Value, type(Value)))\r
     Value = Value.strip()\r
     if Value.startswith(TAB_UINT8) and Value.endswith(')'):\r
@@ -1327,8 +1334,8 @@ def ParseFieldValue (Value):
             Value = Value[1:-1]\r
         try:\r
             Value = "'" + uuid.UUID(Value).get_bytes_le() + "'"\r
-        except ValueError, Message:\r
-            raise BadExpression('%s' % Message)\r
+        except ValueError as Message:\r
+            raise BadExpression(Message)\r
         Value, Size = ParseFieldValue(Value)\r
         return Value, 16\r
     if Value.startswith('L"') and Value.endswith('"'):\r
@@ -1469,7 +1476,7 @@ def AnalyzeDscPcd(Setting, PcdType, DataType=''):
 #         Value, Size = ParseFieldValue(Value)\r
         if Size:\r
             try:\r
-                int(Size,16) if Size.upper().startswith("0X") else int(Size)\r
+                int(Size, 16) if Size.upper().startswith("0X") else int(Size)\r
             except:\r
                 IsValid = False\r
                 Size = -1\r
@@ -1490,7 +1497,7 @@ def AnalyzeDscPcd(Setting, PcdType, DataType=''):
 \r
         if Size:\r
             try:\r
-                int(Size,16) if Size.upper().startswith("0X") else int(Size)\r
+                int(Size, 16) if Size.upper().startswith("0X") else int(Size)\r
             except:\r
                 IsValid = False\r
                 Size = -1\r
@@ -1512,7 +1519,7 @@ def AnalyzeDscPcd(Setting, PcdType, DataType=''):
             IsValid = (len(FieldList) <= 3)\r
         if Size:\r
             try:\r
-                int(Size,16) if Size.upper().startswith("0X") else int(Size)\r
+                int(Size, 16) if Size.upper().startswith("0X") else int(Size)\r
             except:\r
                 IsValid = False\r
                 Size = -1\r
@@ -1584,8 +1591,7 @@ def CheckPcdDatum(Type, Value):
             Printset.add(TAB_PRINTCHAR_BS)\r
             Printset.add(TAB_PRINTCHAR_NUL)\r
             if not set(Value).issubset(Printset):\r
-                PrintList = list(Printset)\r
-                PrintList.sort()\r
+                PrintList = sorted(Printset)\r
                 return False, "Invalid PCD string value of type [%s]; must be printable chars %s." % (Type, PrintList)\r
     elif Type == 'BOOLEAN':\r
         if Value not in ['TRUE', 'True', 'true', '0x1', '0x01', '1', 'FALSE', 'False', 'false', '0x0', '0x00', '0']:\r
@@ -1670,7 +1676,7 @@ def ConvertStringToByteArray(Value):
 \r
     Value = eval(Value)         # translate escape character\r
     NewValue = '{'\r
-    for Index in range(0,len(Value)):\r
+    for Index in range(0, len(Value)):\r
         if Unicode:\r
             NewValue = NewValue + str(ord(Value[Index]) % 0x10000) + ','\r
         else:\r
@@ -1747,7 +1753,7 @@ class PathClass(object):
     # @retval True  The two PathClass are the same\r
     #\r
     def __eq__(self, Other):\r
-        if type(Other) == type(self):\r
+        if isinstance(Other, type(self)):\r
             return self.Path == Other.Path\r
         else:\r
             return self.Path == str(Other)\r
@@ -1760,7 +1766,7 @@ class PathClass(object):
     # @retval -1    The first PathClass is less than the second PathClass\r
     # @retval 1     The first PathClass is Bigger than the second PathClass\r
     def __cmp__(self, Other):\r
-        if type(Other) == type(self):\r
+        if isinstance(Other, type(self)):\r
             OtherKey = Other.Path\r
         else:\r
             OtherKey = str(Other)\r
@@ -1914,28 +1920,28 @@ class PeImageClass():
         return Value\r
 \r
 class DefaultStore():\r
-    def __init__(self,DefaultStores ):\r
+    def __init__(self, DefaultStores ):\r
 \r
         self.DefaultStores = DefaultStores\r
-    def DefaultStoreID(self,DefaultStoreName):\r
-        for key,value in self.DefaultStores.items():\r
+    def DefaultStoreID(self, DefaultStoreName):\r
+        for key, value in self.DefaultStores.items():\r
             if value == DefaultStoreName:\r
                 return key\r
         return None\r
     def GetDefaultDefault(self):\r
         if not self.DefaultStores or "0" in self.DefaultStores:\r
-            return "0",TAB_DEFAULT_STORES_DEFAULT\r
+            return "0", TAB_DEFAULT_STORES_DEFAULT\r
         else:\r
-            minvalue = min([int(value_str) for value_str in self.DefaultStores])\r
+            minvalue = min(int(value_str) for value_str in self.DefaultStores)\r
             return (str(minvalue), self.DefaultStores[str(minvalue)])\r
-    def GetMin(self,DefaultSIdList):\r
+    def GetMin(self, DefaultSIdList):\r
         if not DefaultSIdList:\r
             return TAB_DEFAULT_STORES_DEFAULT\r
         storeidset = {storeid for storeid, storename in self.DefaultStores.values() if storename in DefaultSIdList}\r
         if not storeidset:\r
             return ""\r
         minid = min(storeidset )\r
-        for sid,name in self.DefaultStores.values():\r
+        for sid, name in self.DefaultStores.values():\r
             if sid == minid:\r
                 return name\r
 class SkuClass():\r
@@ -1950,7 +1956,7 @@ class SkuClass():
 \r
         for SkuName in SkuIds:\r
             SkuId = SkuIds[SkuName][0]\r
-            skuid_num = int(SkuId,16) if SkuId.upper().startswith("0X") else int(SkuId)\r
+            skuid_num = int(SkuId, 16) if SkuId.upper().startswith("0X") else int(SkuId)\r
             if skuid_num > 0xFFFFFFFFFFFFFFFF:\r
                 EdkLogger.error("build", PARAMETER_INVALID,\r
                             ExtraData = "SKU-ID [%s] value %s exceeds the max value of UINT64"\r
@@ -2003,14 +2009,14 @@ class SkuClass():
             self.__SkuInherit = {}\r
             for item in self.SkuData.values():\r
                 self.__SkuInherit[item[1]]=item[2] if item[2] else "DEFAULT"\r
-        return self.__SkuInherit.get(skuname,"DEFAULT")\r
+        return self.__SkuInherit.get(skuname, "DEFAULT")\r
 \r
-    def GetSkuChain(self,sku):\r
+    def GetSkuChain(self, sku):\r
         if sku == "DEFAULT":\r
             return ["DEFAULT"]\r
         skulist = [sku]\r
         nextsku = sku\r
-        while 1:\r
+        while True:\r
             nextsku = self.GetNextSkuId(nextsku)\r
             skulist.append(nextsku)\r
             if nextsku == "DEFAULT":\r
@@ -2023,7 +2029,7 @@ class SkuClass():
             skuorderset.append(self.GetSkuChain(skuname))\r
         \r
         skuorder = []\r
-        for index in range(max([len(item) for item in skuorderset])):\r
+        for index in range(max(len(item) for item in skuorderset)):\r
             for subset in skuorderset:\r
                 if index > len(subset)-1:\r
                     continue\r