mirror of https://github.com/acidanthera/audk.git
BaseTools: remove EdkIIWorkspace as its not used.
v2 - update makefile too. Cc: Liming Gao <liming.gao@intel.com> Cc: Yonghong Zhu <yonghong.zhu@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Jaben Carsey <jaben.carsey@intel.com> Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com>
This commit is contained in:
parent
d4ccf26491
commit
66d04638e5
|
@ -1,317 +0,0 @@
|
||||||
## @file
|
|
||||||
# This is the base class for applications that operate on an EDK II Workspace
|
|
||||||
#
|
|
||||||
# Copyright (c) 2007 - 2018, 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.
|
|
||||||
#
|
|
||||||
|
|
||||||
##
|
|
||||||
# Import Modules
|
|
||||||
#
|
|
||||||
import Common.LongFilePathOs as os, sys, time
|
|
||||||
from DataType import *
|
|
||||||
from Common.LongFilePathSupport import OpenLongFilePath as open
|
|
||||||
from Common.MultipleWorkspace import MultipleWorkspace as mws
|
|
||||||
|
|
||||||
## EdkIIWorkspace
|
|
||||||
#
|
|
||||||
# Collect WorkspaceDir from the environment, the Verbose command line flag, and detect an icon bitmap file.
|
|
||||||
#
|
|
||||||
# @var StartTime: Time of build system starting
|
|
||||||
# @var PrintRunTime: Printable time of build system running
|
|
||||||
# @var PrintRunStatus: Printable status of build system running
|
|
||||||
# @var RunStatus: Status of build system running
|
|
||||||
#
|
|
||||||
class EdkIIWorkspace:
|
|
||||||
def __init__(self):
|
|
||||||
self.StartTime = time.time()
|
|
||||||
self.PrintRunTime = False
|
|
||||||
self.PrintRunStatus = False
|
|
||||||
self.RunStatus = ''
|
|
||||||
|
|
||||||
#
|
|
||||||
# Check environment valiable 'WORKSPACE'
|
|
||||||
#
|
|
||||||
if os.environ.get('WORKSPACE') is None:
|
|
||||||
print 'ERROR: WORKSPACE not defined. Please run EdkSetup from the EDK II install directory.'
|
|
||||||
return False
|
|
||||||
|
|
||||||
self.CurrentWorkingDir = os.getcwd()
|
|
||||||
|
|
||||||
self.WorkspaceDir = os.path.realpath(os.environ.get('WORKSPACE'))
|
|
||||||
(Drive, Path) = os.path.splitdrive(self.WorkspaceDir)
|
|
||||||
if Drive == '':
|
|
||||||
(Drive, CwdPath) = os.path.splitdrive(self.CurrentWorkingDir)
|
|
||||||
if Drive != '':
|
|
||||||
self.WorkspaceDir = Drive + Path
|
|
||||||
else:
|
|
||||||
self.WorkspaceDir = Drive.upper() + Path
|
|
||||||
|
|
||||||
self.WorkspaceRelativeWorkingDir = self.WorkspaceRelativePath (self.CurrentWorkingDir)
|
|
||||||
|
|
||||||
try:
|
|
||||||
#
|
|
||||||
# Load TianoCoreOrgLogo, used for GUI tool
|
|
||||||
#
|
|
||||||
self.Icon = wx.Icon(self.WorkspaceFile('tools/Python/TianoCoreOrgLogo.gif'), wx.BITMAP_TYPE_GIF)
|
|
||||||
except:
|
|
||||||
self.Icon = None
|
|
||||||
|
|
||||||
self.Verbose = False
|
|
||||||
for Arg in sys.argv:
|
|
||||||
if Arg.lower() == '-v':
|
|
||||||
self.Verbose = True
|
|
||||||
|
|
||||||
## Close build system
|
|
||||||
#
|
|
||||||
# Close build system and print running time and status
|
|
||||||
#
|
|
||||||
def Close(self):
|
|
||||||
if self.PrintRunTime:
|
|
||||||
Seconds = int(time.time() - self.StartTime)
|
|
||||||
if Seconds < 60:
|
|
||||||
print 'Run Time: %d seconds' % (Seconds)
|
|
||||||
else:
|
|
||||||
Minutes = Seconds / 60
|
|
||||||
Seconds = Seconds % 60
|
|
||||||
if Minutes < 60:
|
|
||||||
print 'Run Time: %d minutes %d seconds' % (Minutes, Seconds)
|
|
||||||
else:
|
|
||||||
Hours = Minutes / 60
|
|
||||||
Minutes = Minutes % 60
|
|
||||||
print 'Run Time: %d hours %d minutes %d seconds' % (Hours, Minutes, Seconds)
|
|
||||||
if self.RunStatus != '':
|
|
||||||
print self.RunStatus
|
|
||||||
|
|
||||||
## Convert to a workspace relative filename
|
|
||||||
#
|
|
||||||
# Convert a full path filename to a workspace relative filename.
|
|
||||||
#
|
|
||||||
# @param FileName: The filename to be Converted
|
|
||||||
#
|
|
||||||
# @retval None Workspace dir is not found in the full path
|
|
||||||
# @retval string The relative filename
|
|
||||||
#
|
|
||||||
def WorkspaceRelativePath(self, FileName):
|
|
||||||
FileName = os.path.realpath(FileName)
|
|
||||||
if FileName.find(self.WorkspaceDir) != 0:
|
|
||||||
return None
|
|
||||||
return FileName.replace (self.WorkspaceDir, '').strip('\\').strip('/')
|
|
||||||
|
|
||||||
## Convert to a full path filename
|
|
||||||
#
|
|
||||||
# Convert a workspace relative filename to a full path filename.
|
|
||||||
#
|
|
||||||
# @param FileName: The filename to be Converted
|
|
||||||
#
|
|
||||||
# @retval string The full path filename
|
|
||||||
#
|
|
||||||
def WorkspaceFile(self, FileName):
|
|
||||||
return os.path.realpath(mws.join(self.WorkspaceDir,FileName))
|
|
||||||
|
|
||||||
## Convert to a real path filename
|
|
||||||
#
|
|
||||||
# Convert ${WORKSPACE} to real path
|
|
||||||
#
|
|
||||||
# @param FileName: The filename to be Converted
|
|
||||||
#
|
|
||||||
# @retval string The full path filename
|
|
||||||
#
|
|
||||||
def WorkspacePathConvert(self, FileName):
|
|
||||||
return os.path.realpath(FileName.replace(TAB_WORKSPACE, self.WorkspaceDir))
|
|
||||||
|
|
||||||
## Convert XML into a DOM
|
|
||||||
#
|
|
||||||
# Parse an XML file into a DOM and return the DOM.
|
|
||||||
#
|
|
||||||
# @param FileName: The filename to be parsed
|
|
||||||
#
|
|
||||||
# @retval XmlParseFile (self.WorkspaceFile(FileName))
|
|
||||||
#
|
|
||||||
def XmlParseFile (self, FileName):
|
|
||||||
if self.Verbose:
|
|
||||||
print FileName
|
|
||||||
return XmlParseFile (self.WorkspaceFile(FileName))
|
|
||||||
|
|
||||||
## Convert a XML section
|
|
||||||
#
|
|
||||||
# Parse a section of an XML file into a DOM(Document Object Model) and return the DOM.
|
|
||||||
#
|
|
||||||
# @param FileName: The filename to be parsed
|
|
||||||
# @param SectionTag: The tag name of the section to be parsed
|
|
||||||
#
|
|
||||||
# @retval XmlParseFileSection (self.WorkspaceFile(FileName), SectionTag)
|
|
||||||
#
|
|
||||||
def XmlParseFileSection (self, FileName, SectionTag):
|
|
||||||
if self.Verbose:
|
|
||||||
print FileName
|
|
||||||
return XmlParseFileSection (self.WorkspaceFile(FileName), SectionTag)
|
|
||||||
|
|
||||||
## Save a XML file
|
|
||||||
#
|
|
||||||
# Save a DOM(Document Object Model) into an XML file.
|
|
||||||
#
|
|
||||||
# @param Dom: The Dom to be saved
|
|
||||||
# @param FileName: The filename
|
|
||||||
#
|
|
||||||
# @retval XmlSaveFile (Dom, self.WorkspaceFile(FileName))
|
|
||||||
#
|
|
||||||
def XmlSaveFile (self, Dom, FileName):
|
|
||||||
if self.Verbose:
|
|
||||||
print FileName
|
|
||||||
return XmlSaveFile (Dom, self.WorkspaceFile(FileName))
|
|
||||||
|
|
||||||
## Convert Text File To Dictionary
|
|
||||||
#
|
|
||||||
# Convert a workspace relative text file to a dictionary of (name:value) pairs.
|
|
||||||
#
|
|
||||||
# @param FileName: Text filename
|
|
||||||
# @param Dictionary: Dictionary to store data
|
|
||||||
# @param CommentCharacter: Comment char, be used to ignore comment content
|
|
||||||
# @param KeySplitCharacter: Key split char, between key name and key value. Key1 = Value1, '=' is the key split char
|
|
||||||
# @param ValueSplitFlag: Value split flag, be used to decide if has multiple values
|
|
||||||
# @param ValueSplitCharacter: Value split char, be used to split multiple values. Key1 = Value1|Value2, '|' is the value split char
|
|
||||||
#
|
|
||||||
# @retval ConvertTextFileToDictionary(self.WorkspaceFile(FileName), Dictionary, CommentCharacter, KeySplitCharacter, ValueSplitFlag, ValueSplitCharacter)
|
|
||||||
#
|
|
||||||
def ConvertTextFileToDictionary(self, FileName, Dictionary, CommentCharacter, KeySplitCharacter, ValueSplitFlag, ValueSplitCharacter):
|
|
||||||
if self.Verbose:
|
|
||||||
print FileName
|
|
||||||
return ConvertTextFileToDictionary(self.WorkspaceFile(FileName), Dictionary, CommentCharacter, KeySplitCharacter, ValueSplitFlag, ValueSplitCharacter)
|
|
||||||
|
|
||||||
## Convert Dictionary To Text File
|
|
||||||
#
|
|
||||||
# Convert a dictionary of (name:value) pairs to a workspace relative text file.
|
|
||||||
#
|
|
||||||
# @param FileName: Text filename
|
|
||||||
# @param Dictionary: Dictionary to store data
|
|
||||||
# @param CommentCharacter: Comment char, be used to ignore comment content
|
|
||||||
# @param KeySplitCharacter: Key split char, between key name and key value. Key1 = Value1, '=' is the key split char
|
|
||||||
# @param ValueSplitFlag: Value split flag, be used to decide if has multiple values
|
|
||||||
# @param ValueSplitCharacter: Value split char, be used to split multiple values. Key1 = Value1|Value2, '|' is the value split char
|
|
||||||
#
|
|
||||||
# @retval ConvertDictionaryToTextFile(self.WorkspaceFile(FileName), Dictionary, CommentCharacter, KeySplitCharacter, ValueSplitFlag, ValueSplitCharacter)
|
|
||||||
#
|
|
||||||
def ConvertDictionaryToTextFile(self, FileName, Dictionary, CommentCharacter, KeySplitCharacter, ValueSplitFlag, ValueSplitCharacter):
|
|
||||||
if self.Verbose:
|
|
||||||
print FileName
|
|
||||||
return ConvertDictionaryToTextFile(self.WorkspaceFile(FileName), Dictionary, CommentCharacter, KeySplitCharacter, ValueSplitFlag, ValueSplitCharacter)
|
|
||||||
|
|
||||||
## Convert Text File To Dictionary
|
|
||||||
#
|
|
||||||
# Convert a text file to a dictionary of (name:value) pairs.
|
|
||||||
#
|
|
||||||
# @param FileName: Text filename
|
|
||||||
# @param Dictionary: Dictionary to store data
|
|
||||||
# @param CommentCharacter: Comment char, be used to ignore comment content
|
|
||||||
# @param KeySplitCharacter: Key split char, between key name and key value. Key1 = Value1, '=' is the key split char
|
|
||||||
# @param ValueSplitFlag: Value split flag, be used to decide if has multiple values
|
|
||||||
# @param ValueSplitCharacter: Value split char, be used to split multiple values. Key1 = Value1|Value2, '|' is the value split char
|
|
||||||
#
|
|
||||||
# @retval True Convert successfully
|
|
||||||
# @retval False Open file failed
|
|
||||||
#
|
|
||||||
def ConvertTextFileToDictionary(FileName, Dictionary, CommentCharacter, KeySplitCharacter, ValueSplitFlag, ValueSplitCharacter):
|
|
||||||
try:
|
|
||||||
F = open(FileName, 'r')
|
|
||||||
except:
|
|
||||||
return False
|
|
||||||
Keys = []
|
|
||||||
for Line in F:
|
|
||||||
LineList = Line.split(KeySplitCharacter, 1)
|
|
||||||
if len(LineList) >= 2:
|
|
||||||
Key = LineList[0].split()
|
|
||||||
if len(Key) == 1 and Key[0][0] != CommentCharacter and Key[0] not in Keys:
|
|
||||||
if ValueSplitFlag:
|
|
||||||
Dictionary[Key[0]] = LineList[1].replace('\\', '/').split(ValueSplitCharacter)
|
|
||||||
else:
|
|
||||||
Dictionary[Key[0]] = LineList[1].strip().replace('\\', '/')
|
|
||||||
Keys += [Key[0]]
|
|
||||||
F.close()
|
|
||||||
return True
|
|
||||||
|
|
||||||
## Convert Dictionary To Text File
|
|
||||||
#
|
|
||||||
# Convert a dictionary of (name:value) pairs to a text file.
|
|
||||||
#
|
|
||||||
# @param FileName: Text filename
|
|
||||||
# @param Dictionary: Dictionary to store data
|
|
||||||
# @param CommentCharacter: Comment char, be used to ignore comment content
|
|
||||||
# @param KeySplitCharacter: Key split char, between key name and key value. Key1 = Value1, '=' is the key split char
|
|
||||||
# @param ValueSplitFlag: Value split flag, be used to decide if has multiple values
|
|
||||||
# @param ValueSplitCharacter: Value split char, be used to split multiple values. Key1 = Value1|Value2, '|' is the value split char
|
|
||||||
#
|
|
||||||
# @retval True Convert successfully
|
|
||||||
# @retval False Open file failed
|
|
||||||
#
|
|
||||||
def ConvertDictionaryToTextFile(FileName, Dictionary, CommentCharacter, KeySplitCharacter, ValueSplitFlag, ValueSplitCharacter):
|
|
||||||
try:
|
|
||||||
F = open(FileName, 'r')
|
|
||||||
Lines = []
|
|
||||||
Lines = F.readlines()
|
|
||||||
F.close()
|
|
||||||
except:
|
|
||||||
Lines = []
|
|
||||||
Keys = Dictionary.keys()
|
|
||||||
MaxLength = max(map(len,Keys))
|
|
||||||
Index = 0
|
|
||||||
for Line in Lines:
|
|
||||||
LineList = Line.split(KeySplitCharacter, 1)
|
|
||||||
if len(LineList) >= 2:
|
|
||||||
Key = LineList[0].split()
|
|
||||||
if len(Key) == 1 and Key[0][0] != CommentCharacter and Key[0] in Dictionary:
|
|
||||||
if ValueSplitFlag:
|
|
||||||
Line = '%-*s %c %s\n' % (MaxLength, Key[0], KeySplitCharacter, ' '.join(Dictionary[Key[0]]))
|
|
||||||
else:
|
|
||||||
Line = '%-*s %c %s\n' % (MaxLength, Key[0], KeySplitCharacter, Dictionary[Key[0]])
|
|
||||||
Lines.pop(Index)
|
|
||||||
if Key[0] in Keys:
|
|
||||||
Lines.insert(Index, Line)
|
|
||||||
Keys.remove(Key[0])
|
|
||||||
Index += 1
|
|
||||||
for RemainingKey in Keys:
|
|
||||||
if ValueSplitFlag:
|
|
||||||
Line = '%-*s %c %s\n' % (MaxLength, RemainingKey, KeySplitCharacter, ' '.join(Dictionary[RemainingKey]))
|
|
||||||
else:
|
|
||||||
Line = '%-*s %c %s\n' % (MaxLength, RemainingKey, KeySplitCharacter, Dictionary[RemainingKey])
|
|
||||||
Lines.append(Line)
|
|
||||||
try:
|
|
||||||
F = open(FileName, 'w')
|
|
||||||
except:
|
|
||||||
return False
|
|
||||||
F.writelines(Lines)
|
|
||||||
F.close()
|
|
||||||
return True
|
|
||||||
|
|
||||||
## Create a new directory
|
|
||||||
#
|
|
||||||
# @param Directory: Directory to be created
|
|
||||||
#
|
|
||||||
def CreateDirectory(Directory):
|
|
||||||
if not os.access(Directory, os.F_OK):
|
|
||||||
os.makedirs (Directory)
|
|
||||||
|
|
||||||
## Create a new file
|
|
||||||
#
|
|
||||||
# @param Directory: Directory to be created
|
|
||||||
# @param FileName: Filename to be created
|
|
||||||
# @param Mode: The mode of open file, defautl is 'w'
|
|
||||||
#
|
|
||||||
def CreateFile(Directory, FileName, Mode='w'):
|
|
||||||
CreateDirectory (Directory)
|
|
||||||
return open(os.path.join(Directory, FileName), Mode)
|
|
||||||
|
|
||||||
##
|
|
||||||
#
|
|
||||||
# This acts like the main() function for the script, unless it is 'import'ed into another
|
|
||||||
# script.
|
|
||||||
#
|
|
||||||
if __name__ == '__main__':
|
|
||||||
# Nothing to do here. Could do some unit tests
|
|
||||||
pass
|
|
|
@ -37,7 +37,6 @@ APPLICATIONS=$(BIN_DIR)\build.exe $(BIN_DIR)\GenFds.exe $(BIN_DIR)\Trim.exe $(BI
|
||||||
COMMON_PYTHON=$(BASE_TOOLS_PATH)\Source\Python\Common\BuildToolError.py \
|
COMMON_PYTHON=$(BASE_TOOLS_PATH)\Source\Python\Common\BuildToolError.py \
|
||||||
$(BASE_TOOLS_PATH)\Source\Python\Common\Database.py \
|
$(BASE_TOOLS_PATH)\Source\Python\Common\Database.py \
|
||||||
$(BASE_TOOLS_PATH)\Source\Python\Common\DataType.py \
|
$(BASE_TOOLS_PATH)\Source\Python\Common\DataType.py \
|
||||||
$(BASE_TOOLS_PATH)\Source\Python\Common\EdkIIWorkspace.py \
|
|
||||||
$(BASE_TOOLS_PATH)\Source\Python\Common\EdkLogger.py \
|
$(BASE_TOOLS_PATH)\Source\Python\Common\EdkLogger.py \
|
||||||
$(BASE_TOOLS_PATH)\Source\Python\Common\Expression.py \
|
$(BASE_TOOLS_PATH)\Source\Python\Common\Expression.py \
|
||||||
$(BASE_TOOLS_PATH)\Source\Python\Common\GlobalData.py \
|
$(BASE_TOOLS_PATH)\Source\Python\Common\GlobalData.py \
|
||||||
|
|
Loading…
Reference in New Issue