BaseTools/UPT: Use a simple way to get package path

Instead of parsing all content of DEC file, just get the package
path only to save time.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hess Chen <hesheng.chen@intel.com>
Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com>
This commit is contained in:
Hess Chen 2017-04-01 13:33:03 +08:00 committed by Yonghong Zhu
parent 4d2ea2616e
commit 5692fa883f
1 changed files with 36 additions and 20 deletions

View File

@ -1,7 +1,7 @@
## @file
# This file is for installed package information database operations
#
# Copyright (c) 2011 - 2016, Intel Corporation. All rights reserved.<BR>
# Copyright (c) 2011 - 2017, 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
@ -21,14 +21,15 @@ Dependency
# Import Modules
#
from os.path import dirname
import os
import Logger.Log as Logger
from Logger import StringTable as ST
from Library.Parsing import GetWorkspacePackage
from Library.Parsing import GetWorkspaceModule
from Library.Parsing import GetPkgInfoFromDec
from Library.Misc import GetRelativePath
from Library import GlobalData
from PomAdapter.InfPomAlignment import InfPomAlignment
from Logger.ToolError import FatalError
from Logger.ToolError import EDK1_INF_ERROR
from Logger.ToolError import UNKNOWN_ERROR
@ -373,14 +374,11 @@ class DependencyRules(object):
# True: module doesn't depend on package in DpPackagePathList
#
def VerifyRemoveModuleDep(Path, DpPackagePathList):
WorkSP = GlobalData.gWORKSPACE
try:
PomAli = InfPomAlignment(Path, WorkSP, Skip=True)
for Item in PomAli.GetPackageDependencyList():
if Item.GetPackageFilePath() in DpPackagePathList:
Logger.Info(ST.MSG_MODULE_DEPEND_ON % (Path, Item.GetPackageFilePath()))
for Item in GetPackagePath(Path):
if Item in DpPackagePathList:
DecPath = os.path.normpath(os.path.join(GlobalData.gWORKSPACE, Item))
Logger.Info(ST.MSG_MODULE_DEPEND_ON % (Path, DecPath))
return False
else:
return True
@ -392,6 +390,30 @@ def VerifyRemoveModuleDep(Path, DpPackagePathList):
else:
return True
# # GetPackagePath
#
# Get Dependency package path from an Inf file path
#
def GetPackagePath(InfPath):
PackagePath = []
if os.path.exists(InfPath):
FindSection = False
for Line in open(InfPath).readlines():
Line = Line.strip()
if not Line:
continue
if Line.startswith('#'):
continue
if Line.startswith('[Packages') and Line.endswith(']'):
FindSection = True
continue
if Line.startswith('[') and Line.endswith(']') and FindSection:
break
if FindSection:
PackagePath.append(os.path.normpath(Line))
return PackagePath
## check whether module depends on packages in DpPackagePathList and can not be satisfied by OtherPkgList
#
# @param Path: a module path
@ -402,16 +424,13 @@ def VerifyRemoveModuleDep(Path, DpPackagePathList):
# but can be satisfied by OtherPkgList
#
def VerifyReplaceModuleDep(Path, DpPackagePathList, OtherPkgList):
WorkSP = GlobalData.gWORKSPACE
try:
PomAli = InfPomAlignment(Path, WorkSP, Skip=True)
for Item in PomAli.GetPackageDependencyList():
if Item.GetPackageFilePath() in DpPackagePathList:
Guid, Version = Item.GetGuid(), Item.GetVersion()
for Item in GetPackagePath(Path):
if Item in DpPackagePathList:
DecPath = os.path.normpath(os.path.join(GlobalData.gWORKSPACE, Item))
Name, Guid, Version = GetPkgInfoFromDec(DecPath)
if (Guid, Version) not in OtherPkgList:
Logger.Info(ST.MSG_MODULE_DEPEND_ON % (Path, Item.GetPackageFilePath()))
Logger.Info(ST.MSG_MODULE_DEPEND_ON % (Path, DecPath))
return False
else:
return True
@ -422,6 +441,3 @@ def VerifyReplaceModuleDep(Path, DpPackagePathList, OtherPkgList):
return True
else:
return True