## @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
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
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
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
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
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
#\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
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
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