]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/UPT/Core/DistributionPackageClass.py
BaseTools: Clean up source files
[mirror_edk2.git] / BaseTools / Source / Python / UPT / Core / DistributionPackageClass.py
index 8ac8d4ed5255253ef9415f0a6cc99ba74646bb9a..873e2b4de441fa9ffbc2ebfcc3a7c6e80e76df39 100644 (file)
@@ -1,11 +1,11 @@
 ## @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 - 2018, 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
-# distribution. The full text of the license may be found at \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
+# distribution. The full text of the license may be found at\r
 # http://opensource.org/licenses/bsd-license.php\r
 #\r
 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\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
@@ -49,75 +50,78 @@ class DistributionPackageHeaderObject(IdentificationObject, \
         self.Date = ''\r
         self.Signature = 'Md5Sum'\r
         self.XmlSpecification = ''\r
-    \r
+\r
     def GetReadOnly(self):\r
         return self.ReadOnly\r
-    \r
+\r
     def SetReadOnly(self, ReadOnly):\r
         self.ReadOnly = ReadOnly\r
-    \r
+\r
     def GetRePackage(self):\r
         return self.RePackage\r
-    \r
+\r
     def SetRePackage(self, RePackage):\r
         self.RePackage = RePackage\r
-        \r
+\r
     def GetVendor(self):\r
         return self.Vendor\r
-    \r
+\r
     def SetDate(self, Date):\r
         self.Date = Date\r
-        \r
+\r
     def GetDate(self):\r
         return self.Date\r
-    \r
+\r
     def SetSignature(self, Signature):\r
         self.Signature = Signature\r
-        \r
+\r
     def GetSignature(self):\r
         return self.Signature\r
-    \r
+\r
     def SetXmlSpecification(self, XmlSpecification):\r
         self.XmlSpecification = XmlSpecification\r
-        \r
+\r
     def GetXmlSpecification(self):\r
         return self.XmlSpecification\r
-    \r
+\r
 ## DistributionPackageClass\r
 #\r
 # @param object: DistributionPackageClass\r
-# \r
+#\r
 class DistributionPackageClass(object):\r
     def __init__(self):\r
         self.Header = DistributionPackageHeaderObject()\r
         #\r
         # {(Guid, Version, Path) : PackageObj}\r
         #\r
-        self.PackageSurfaceArea = Sdict() \r
+        self.PackageSurfaceArea = Sdict()\r
         #\r
         # {(Guid, Version, Name, Path) : ModuleObj}\r
         #\r
-        self.ModuleSurfaceArea = Sdict()  \r
+        self.ModuleSurfaceArea = Sdict()\r
         self.Tools = MiscFileObject()\r
         self.MiscellaneousFiles = MiscFileObject()\r
         self.UserExtensions = []\r
         self.FileList = []\r
-    \r
+\r
     ## Get all included packages and modules for a distribution package\r
-    # \r
+    #\r
     # @param WorkspaceDir:  WorkspaceDir\r
     # @param PackageList:   A list of all packages\r
     # @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
@@ -128,7 +132,7 @@ class DistributionPackageClass(object):
                     WsRelPath = os.path.normpath(WsRelPath)\r
                     if ModuleList and WsRelPath in ModuleList:\r
                         Logger.Error("UPT",\r
-                                     OPTION_VALUE_INVALID, \r
+                                     OPTION_VALUE_INVALID,\r
                                      ST.ERR_NOT_STANDALONE_MODULE_ERROR%\\r
                                      (WsRelPath, PackageFile))\r
                     Filename = os.path.normpath\\r
@@ -136,13 +140,12 @@ class DistributionPackageClass(object):
                     os.path.splitext(Filename)\r
                     #\r
                     # Call INF parser to generate Inf Object.\r
-                    # Actually, this call is not directly call, but wrapped by \r
+                    # Actually, this call is not directly call, but wrapped by\r
                     # Inf class in InfPomAlignment.\r
                     #\r
                     try:\r
-                        ModuleObj = InfPomAlignment(Filename, WorkspaceDir, \\r
-                                                PackageObj.GetPackagePath())\r
-     \r
+                        ModuleObj = InfPomAlignment(Filename, WorkspaceDir, PackageObj.GetPackagePath())\r
+\r
                         #\r
                         # Add module to package\r
                         #\r
@@ -152,13 +155,13 @@ class DistributionPackageClass(object):
                                     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
                         else:\r
                             raise\r
-                \r
+\r
                 self.PackageSurfaceArea\\r
                 [(PackageObj.GetGuid(), PackageObj.GetVersion(), \\r
                   PackageObj.GetCombinePath())] = PackageObj\r
@@ -168,34 +171,38 @@ 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
-                    ModuleKey = (ModuleObj.GetGuid(), \r
-                                 ModuleObj.GetVersion(), \r
-                                 ModuleObj.GetName(), \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, ErrCode:\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
+                                     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
+    ## Get all files included for a distribution package, except tool/misc of\r
     # distribution level\r
-    # \r
+    #\r
     # @retval DistFileList  A list of filepath for NonMetaDataFile, relative to workspace\r
     # @retval MetaDataFileList  A list of filepath for MetaDataFile, relative to workspace\r
     #\r
     def GetDistributionFileList(self):\r
         MetaDataFileList = []\r
-        \r
+        SkipModulesUniList = []\r
+\r
         for Guid, Version, Path in self.PackageSurfaceArea:\r
             Package = self.PackageSurfaceArea[Guid, Version, Path]\r
             PackagePath = Package.GetPackagePath()\r
@@ -206,7 +213,15 @@ 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, Name, Path in ModuleDict:\r
@@ -215,16 +230,44 @@ class DistributionPackageClass(object):
                 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
+                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
+\r
 \r