]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/UPT/Core/DistributionPackageClass.py
BaseTools: Refactor python except statements
[mirror_edk2.git] / BaseTools / Source / Python / UPT / Core / DistributionPackageClass.py
index 03872379518eb26c5b38ad7e9e8259a3703c84f8..81c67fb510a28014981c2647020262f9f4b17247 100644 (file)
@@ -1,7 +1,7 @@
 ## @file\r
 # This file is used to define a class object to describe a distribution package\r
 #\r
-# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>\r
 #\r
 # This program and the accompanying materials are licensed and made available \r
 # under the terms and conditions of the BSD License which accompanies this \r
@@ -32,6 +32,7 @@ from Logger.ToolError import EDK1_INF_ERROR
 from Object.POM.CommonObject import IdentificationObject\r
 from Object.POM.CommonObject import CommonHeaderObject\r
 from Object.POM.CommonObject import MiscFileObject\r
+from Common.MultipleWorkspace import MultipleWorkspace as mws\r
 \r
 ## DistributionPackageHeaderClass\r
 #\r
@@ -95,7 +96,7 @@ class DistributionPackageClass(object):
         #\r
         self.PackageSurfaceArea = Sdict() \r
         #\r
-        # {(Guid, Version, Path) : ModuleObj}\r
+        # {(Guid, Version, Name, Path) : ModuleObj}\r
         #\r
         self.ModuleSurfaceArea = Sdict()  \r
         self.Tools = MiscFileObject()\r
@@ -110,14 +111,17 @@ class DistributionPackageClass(object):
     # @param ModuleList:    A list of all modules\r
     #\r
     def GetDistributionPackage(self, WorkspaceDir, PackageList, ModuleList):\r
+        # Backup WorkspaceDir\r
+        Root = WorkspaceDir\r
+\r
         #\r
         # Get Packages\r
         #\r
         if PackageList:\r
             for PackageFile in PackageList:\r
-                PackageFileFullPath = \\r
-                os.path.normpath(os.path.join(WorkspaceDir, PackageFile))\r
-                DecObj = DecPomAlignment(PackageFileFullPath, WorkspaceDir, CheckMulDec = True)\r
+                PackageFileFullPath = mws.join(Root, PackageFile)\r
+                WorkspaceDir = mws.getWs(Root, PackageFile)\r
+                DecObj = DecPomAlignment(PackageFileFullPath, WorkspaceDir, CheckMulDec=True)\r
                 PackageObj = DecObj\r
                 #\r
                 # Parser inf file one bye one\r
@@ -140,8 +144,7 @@ class DistributionPackageClass(object):
                     # Inf class in InfPomAlignment.\r
                     #\r
                     try:\r
-                        ModuleObj = InfPomAlignment(Filename, WorkspaceDir, \\r
-                                                PackageObj.GetPackagePath())\r
+                        ModuleObj = InfPomAlignment(Filename, WorkspaceDir, PackageObj.GetPackagePath())\r
      \r
                         #\r
                         # Add module to package\r
@@ -149,9 +152,10 @@ class DistributionPackageClass(object):
                         ModuleDict = PackageObj.GetModuleDict()\r
                         ModuleDict[(ModuleObj.GetGuid(), \\r
                                     ModuleObj.GetVersion(), \\r
+                                    ModuleObj.GetName(), \\r
                                     ModuleObj.GetCombinePath())] = ModuleObj\r
                         PackageObj.SetModuleDict(ModuleDict)\r
-                    except FatalError, ErrCode:\r
+                    except FatalError as ErrCode:\r
                         if ErrCode.message == EDK1_INF_ERROR:\r
                             Logger.Warn("UPT",\r
                                         ST.WRN_EDK1_INF_FOUND%Filename)\r
@@ -167,23 +171,27 @@ class DistributionPackageClass(object):
         #\r
         if ModuleList:\r
             for ModuleFile in ModuleList:\r
-                ModuleFileFullPath = \\r
-                os.path.normpath(os.path.join(WorkspaceDir, ModuleFile))\r
+                ModuleFileFullPath = mws.join(Root, ModuleFile)\r
+                WorkspaceDir = mws.getWs(Root, ModuleFile)\r
+\r
                 try:\r
-                    ModuleObj = InfPomAlignment(ModuleFileFullPath, \r
-                                                WorkspaceDir)\r
-                    self.ModuleSurfaceArea[(ModuleObj.GetGuid(), \\r
-                                            ModuleObj.GetVersion(), \\r
-                                            ModuleObj.GetCombinePath())] = \\r
-                                            ModuleObj\r
-                except FatalError, ErrCode:\r
+                    ModuleObj = InfPomAlignment(ModuleFileFullPath, WorkspaceDir)\r
+                    ModuleKey = (ModuleObj.GetGuid(), \r
+                                 ModuleObj.GetVersion(), \r
+                                 ModuleObj.GetName(), \r
+                                 ModuleObj.GetCombinePath())\r
+                    self.ModuleSurfaceArea[ModuleKey] = ModuleObj\r
+                except FatalError as ErrCode:\r
                     if ErrCode.message == EDK1_INF_ERROR:\r
                         Logger.Error("UPT",\r
                                      EDK1_INF_ERROR,\r
                                      ST.WRN_EDK1_INF_FOUND%ModuleFileFullPath, \r
                                      ExtraData=ST.ERR_NOT_SUPPORTED_SA_MODULE)\r
                     else:\r
-                        raise                \r
+                        raise\r
+\r
+        # Recover WorkspaceDir\r
+        WorkspaceDir = Root\r
 \r
     ## Get all files included for a distribution package, except tool/misc of \r
     # distribution level\r
@@ -193,6 +201,7 @@ class DistributionPackageClass(object):
     #\r
     def GetDistributionFileList(self):\r
         MetaDataFileList = []\r
+        SkipModulesUniList = []\r
         \r
         for Guid, Version, Path in self.PackageSurfaceArea:\r
             Package = self.PackageSurfaceArea[Guid, Version, Path]\r
@@ -204,24 +213,60 @@ class DistributionPackageClass(object):
                 SearchPath = os.path.normpath(os.path.join(os.path.dirname(FullPath), IncludePath))\r
                 AddPath = os.path.normpath(os.path.join(PackagePath, IncludePath))\r
                 self.FileList += GetNonMetaDataFiles(SearchPath, ['CVS', '.svn'], False, AddPath)\r
-        \r
+            #\r
+            # Add the miscellaneous files on DEC file\r
+            #\r
+            for MiscFileObj in Package.GetMiscFileList():\r
+                for FileObj in MiscFileObj.GetFileList():\r
+                    MiscFileFullPath = os.path.normpath(os.path.join(PackagePath, FileObj.GetURI()))\r
+                    if MiscFileFullPath not in self.FileList:\r
+                        self.FileList.append(MiscFileFullPath)\r
+            \r
             Module = None\r
             ModuleDict = Package.GetModuleDict()\r
-            for Guid, Version, Path in ModuleDict:\r
-                Module = ModuleDict[Guid, Version, Path]\r
+            for Guid, Version, Name, Path in ModuleDict:\r
+                Module = ModuleDict[Guid, Version, Name, Path]\r
                 ModulePath = Module.GetModulePath()\r
                 FullPath = Module.GetFullPath()\r
                 PkgRelPath = os.path.normpath(os.path.join(PackagePath, ModulePath))\r
                 MetaDataFileList.append(Path)\r
-                self.FileList += GetNonMetaDataFiles(os.path.dirname(FullPath), ['CVS', '.svn'], False, PkgRelPath)\r
-     \r
-        for Guid, Version, Path in self.ModuleSurfaceArea:\r
-            Module = self.ModuleSurfaceArea[Guid, Version, Path]\r
+                SkipList = ['CVS', '.svn']\r
+                NonMetaDataFileList = []\r
+                if Module.UniFileClassObject:\r
+                    for UniFile in Module.UniFileClassObject.IncFileList:\r
+                        OriPath = os.path.normpath(os.path.dirname(FullPath))\r
+                        UniFilePath = os.path.normpath(os.path.join(PkgRelPath, UniFile.Path[len(OriPath) + 1:]))\r
+                        if UniFilePath not in SkipModulesUniList:\r
+                            SkipModulesUniList.append(UniFilePath)\r
+                    for IncludeFile in Module.UniFileClassObject.IncludePathList:\r
+                        if IncludeFile not in SkipModulesUniList:\r
+                            SkipModulesUniList.append(IncludeFile)\r
+                NonMetaDataFileList = GetNonMetaDataFiles(os.path.dirname(FullPath), SkipList, False, PkgRelPath)\r
+                for NonMetaDataFile in NonMetaDataFileList:\r
+                    if NonMetaDataFile not in self.FileList:\r
+                        self.FileList.append(NonMetaDataFile)\r
+        for Guid, Version, Name, Path in self.ModuleSurfaceArea:\r
+            Module = self.ModuleSurfaceArea[Guid, Version, Name, Path]\r
             ModulePath = Module.GetModulePath()\r
             FullPath = Module.GetFullPath()\r
             MetaDataFileList.append(Path)\r
-            self.FileList += GetNonMetaDataFiles(os.path.dirname(FullPath), ['CVS', '.svn'], False, ModulePath)\r
-        \r
+            SkipList = ['CVS', '.svn']\r
+            NonMetaDataFileList = []\r
+            if Module.UniFileClassObject:\r
+                for UniFile in Module.UniFileClassObject.IncFileList:\r
+                    OriPath = os.path.normpath(os.path.dirname(FullPath))\r
+                    UniFilePath = os.path.normpath(os.path.join(ModulePath, UniFile.Path[len(OriPath) + 1:]))\r
+                    if UniFilePath not in SkipModulesUniList:\r
+                        SkipModulesUniList.append(UniFilePath)\r
+            NonMetaDataFileList = GetNonMetaDataFiles(os.path.dirname(FullPath), SkipList, False, ModulePath)\r
+            for NonMetaDataFile in NonMetaDataFileList:\r
+                if NonMetaDataFile not in self.FileList:\r
+                    self.FileList.append(NonMetaDataFile)\r
+            \r
+        for SkipModuleUni in SkipModulesUniList:\r
+            if SkipModuleUni in self.FileList:\r
+                self.FileList.remove(SkipModuleUni)\r
+\r
         return  self.FileList, MetaDataFileList\r
 \r
         \r