Sync BaseTools Branch (version r2271) to EDKII main trunk.
BaseTool Branch: https://edk2-buildtools.svn.sourceforge.net/svnroot/edk2-buildtools/branches/Releases/BaseTools_r2100 Signed-off-by: lgao4 Reviewed-by: hchen30 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12214 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
228
BaseTools/Source/Python/UPT/Core/DistributionPackageClass.py
Normal file
228
BaseTools/Source/Python/UPT/Core/DistributionPackageClass.py
Normal file
@ -0,0 +1,228 @@
|
||||
## @file
|
||||
# This file is used to define a class object to describe a distribution package
|
||||
#
|
||||
# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
|
||||
#
|
||||
# This program and the accompanying materials are licensed and made available
|
||||
# under the terms and conditions of the BSD License which accompanies this
|
||||
# distribution. The full text of the license may be found at
|
||||
# http://opensource.org/licenses/bsd-license.php
|
||||
#
|
||||
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
'''
|
||||
DistributionPackageClass
|
||||
'''
|
||||
|
||||
##
|
||||
# Import Modules
|
||||
#
|
||||
import os.path
|
||||
|
||||
from Library.Misc import Sdict
|
||||
from Library.Misc import GetNonMetaDataFiles
|
||||
from PomAdapter.InfPomAlignment import InfPomAlignment
|
||||
from PomAdapter.DecPomAlignment import DecPomAlignment
|
||||
import Logger.Log as Logger
|
||||
from Logger import StringTable as ST
|
||||
from Logger.ToolError import OPTION_VALUE_INVALID
|
||||
from Logger.ToolError import FatalError
|
||||
from Logger.ToolError import EDK1_INF_ERROR
|
||||
from Object.POM.CommonObject import IdentificationObject
|
||||
from Object.POM.CommonObject import CommonHeaderObject
|
||||
from Object.POM.CommonObject import MiscFileObject
|
||||
|
||||
## DistributionPackageHeaderClass
|
||||
#
|
||||
# @param IdentificationObject: Identification Object
|
||||
# @param CommonHeaderObject: Common Header Object
|
||||
#
|
||||
class DistributionPackageHeaderObject(IdentificationObject, \
|
||||
CommonHeaderObject):
|
||||
def __init__(self):
|
||||
IdentificationObject.__init__(self)
|
||||
CommonHeaderObject.__init__(self)
|
||||
self.ReadOnly = ''
|
||||
self.RePackage = ''
|
||||
self.Vendor = ''
|
||||
self.Date = ''
|
||||
self.Signature = 'Md5Sum'
|
||||
self.XmlSpecification = ''
|
||||
|
||||
def GetReadOnly(self):
|
||||
return self.ReadOnly
|
||||
|
||||
def SetReadOnly(self, ReadOnly):
|
||||
self.ReadOnly = ReadOnly
|
||||
|
||||
def GetRePackage(self):
|
||||
return self.RePackage
|
||||
|
||||
def SetRePackage(self, RePackage):
|
||||
self.RePackage = RePackage
|
||||
|
||||
def GetVendor(self):
|
||||
return self.Vendor
|
||||
|
||||
def SetDate(self, Date):
|
||||
self.Date = Date
|
||||
|
||||
def GetDate(self):
|
||||
return self.Date
|
||||
|
||||
def SetSignature(self, Signature):
|
||||
self.Signature = Signature
|
||||
|
||||
def GetSignature(self):
|
||||
return self.Signature
|
||||
|
||||
def SetXmlSpecification(self, XmlSpecification):
|
||||
self.XmlSpecification = XmlSpecification
|
||||
|
||||
def GetXmlSpecification(self):
|
||||
return self.XmlSpecification
|
||||
|
||||
## DistributionPackageClass
|
||||
#
|
||||
# @param object: DistributionPackageClass
|
||||
#
|
||||
class DistributionPackageClass(object):
|
||||
def __init__(self):
|
||||
self.Header = DistributionPackageHeaderObject()
|
||||
#
|
||||
# {(Guid, Version, Path) : PackageObj}
|
||||
#
|
||||
self.PackageSurfaceArea = Sdict()
|
||||
#
|
||||
# {(Guid, Version, Path) : ModuleObj}
|
||||
#
|
||||
self.ModuleSurfaceArea = Sdict()
|
||||
self.Tools = MiscFileObject()
|
||||
self.MiscellaneousFiles = MiscFileObject()
|
||||
self.UserExtensions = []
|
||||
self.FileList = []
|
||||
|
||||
## Get all included packages and modules for a distribution package
|
||||
#
|
||||
# @param WorkspaceDir: WorkspaceDir
|
||||
# @param PackageList: A list of all packages
|
||||
# @param ModuleList: A list of all modules
|
||||
#
|
||||
def GetDistributionPackage(self, WorkspaceDir, PackageList, ModuleList):
|
||||
#
|
||||
# Get Packages
|
||||
#
|
||||
if PackageList:
|
||||
for PackageFile in PackageList:
|
||||
PackageFileFullPath = \
|
||||
os.path.normpath(os.path.join(WorkspaceDir, PackageFile))
|
||||
DecObj = DecPomAlignment(PackageFileFullPath, WorkspaceDir, CheckMulDec = True)
|
||||
PackageObj = DecObj
|
||||
#
|
||||
# Parser inf file one bye one
|
||||
#
|
||||
ModuleInfFileList = PackageObj.GetModuleFileList()
|
||||
for File in ModuleInfFileList:
|
||||
WsRelPath = os.path.join(PackageObj.GetPackagePath(), File)
|
||||
WsRelPath = os.path.normpath(WsRelPath)
|
||||
if ModuleList and WsRelPath in ModuleList:
|
||||
Logger.Error("UPT",
|
||||
OPTION_VALUE_INVALID,
|
||||
ST.ERR_NOT_STANDALONE_MODULE_ERROR%\
|
||||
(WsRelPath, PackageFile))
|
||||
Filename = os.path.normpath\
|
||||
(os.path.join(PackageObj.GetRelaPath(), File))
|
||||
os.path.splitext(Filename)
|
||||
#
|
||||
# Call INF parser to generate Inf Object.
|
||||
# Actually, this call is not directly call, but wrapped by
|
||||
# Inf class in InfPomAlignment.
|
||||
#
|
||||
try:
|
||||
ModuleObj = InfPomAlignment(Filename, WorkspaceDir, \
|
||||
PackageObj.GetPackagePath())
|
||||
|
||||
#
|
||||
# Add module to package
|
||||
#
|
||||
ModuleDict = PackageObj.GetModuleDict()
|
||||
ModuleDict[(ModuleObj.GetGuid(), \
|
||||
ModuleObj.GetVersion(), \
|
||||
ModuleObj.GetCombinePath())] = ModuleObj
|
||||
PackageObj.SetModuleDict(ModuleDict)
|
||||
except FatalError, ErrCode:
|
||||
if ErrCode.message == EDK1_INF_ERROR:
|
||||
Logger.Warn("UPT",
|
||||
ST.WRN_EDK1_INF_FOUND%Filename)
|
||||
else:
|
||||
raise
|
||||
|
||||
self.PackageSurfaceArea\
|
||||
[(PackageObj.GetGuid(), PackageObj.GetVersion(), \
|
||||
PackageObj.GetCombinePath())] = PackageObj
|
||||
|
||||
#
|
||||
# Get Modules
|
||||
#
|
||||
if ModuleList:
|
||||
for ModuleFile in ModuleList:
|
||||
ModuleFileFullPath = \
|
||||
os.path.normpath(os.path.join(WorkspaceDir, ModuleFile))
|
||||
try:
|
||||
ModuleObj = InfPomAlignment(ModuleFileFullPath,
|
||||
WorkspaceDir)
|
||||
self.ModuleSurfaceArea[(ModuleObj.GetGuid(), \
|
||||
ModuleObj.GetVersion(), \
|
||||
ModuleObj.GetCombinePath())] = \
|
||||
ModuleObj
|
||||
except FatalError, ErrCode:
|
||||
if ErrCode.message == EDK1_INF_ERROR:
|
||||
Logger.Error("UPT",
|
||||
EDK1_INF_ERROR,
|
||||
ST.WRN_EDK1_INF_FOUND%ModuleFileFullPath,
|
||||
ExtraData=ST.ERR_NOT_SUPPORTED_SA_MODULE)
|
||||
else:
|
||||
raise
|
||||
|
||||
## Get all files included for a distribution package, except tool/misc of
|
||||
# distribution level
|
||||
#
|
||||
# @retval DistFileList A list of filepath for NonMetaDataFile, relative to workspace
|
||||
# @retval MetaDataFileList A list of filepath for MetaDataFile, relative to workspace
|
||||
#
|
||||
def GetDistributionFileList(self):
|
||||
MetaDataFileList = []
|
||||
|
||||
for Guid, Version, Path in self.PackageSurfaceArea:
|
||||
Package = self.PackageSurfaceArea[Guid, Version, Path]
|
||||
PackagePath = Package.GetPackagePath()
|
||||
FullPath = Package.GetFullPath()
|
||||
MetaDataFileList.append(Path)
|
||||
IncludePathList = Package.GetIncludePathList()
|
||||
for IncludePath in IncludePathList:
|
||||
SearchPath = os.path.normpath(os.path.join(os.path.dirname(FullPath), IncludePath))
|
||||
AddPath = os.path.normpath(os.path.join(PackagePath, IncludePath))
|
||||
self.FileList += GetNonMetaDataFiles(SearchPath, ['CVS', '.svn'], False, AddPath)
|
||||
|
||||
Module = None
|
||||
ModuleDict = Package.GetModuleDict()
|
||||
for Guid, Version, Path in ModuleDict:
|
||||
Module = ModuleDict[Guid, Version, Path]
|
||||
ModulePath = Module.GetModulePath()
|
||||
FullPath = Module.GetFullPath()
|
||||
PkgRelPath = os.path.normpath(os.path.join(PackagePath, ModulePath))
|
||||
MetaDataFileList.append(Path)
|
||||
self.FileList += GetNonMetaDataFiles(os.path.dirname(FullPath), ['CVS', '.svn'], False, PkgRelPath)
|
||||
|
||||
for Guid, Version, Path in self.ModuleSurfaceArea:
|
||||
Module = self.ModuleSurfaceArea[Guid, Version, Path]
|
||||
ModulePath = Module.GetModulePath()
|
||||
FullPath = Module.GetFullPath()
|
||||
MetaDataFileList.append(Path)
|
||||
self.FileList += GetNonMetaDataFiles(os.path.dirname(FullPath), ['CVS', '.svn'], False, ModulePath)
|
||||
|
||||
return self.FileList, MetaDataFileList
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user