##\r
# Import Modules\r
#\r
+from __future__ import print_function\r
import Common.LongFilePathOs as os\r
import re\r
-import StringIO\r
+from io import BytesIO\r
import sys\r
import glob\r
import time\r
import Common.GlobalData as GlobalData\r
from GenFds.GenFds import GenFds\r
\r
-from collections import OrderedDict,defaultdict\r
+from collections import OrderedDict, defaultdict\r
\r
# Version and Copyright\r
VersionNumber = "0.60" + ' ' + gBUILD_VERSION\r
# Otherwise, False is returned\r
#\r
def IsToolInPath(tool):\r
- if os.environ.has_key('PATHEXT'):\r
+ if 'PATHEXT' in os.environ:\r
extns = os.environ['PATHEXT'].split(os.path.pathsep)\r
else:\r
extns = ('',)\r
\r
WorkspaceDir = os.path.normcase(os.path.normpath(os.environ["WORKSPACE"]))\r
if not os.path.exists(WorkspaceDir):\r
- EdkLogger.error("build", FILE_NOT_FOUND, "WORKSPACE doesn't exist", ExtraData="%s" % WorkspaceDir)\r
+ EdkLogger.error("build", FILE_NOT_FOUND, "WORKSPACE doesn't exist", ExtraData=WorkspaceDir)\r
elif ' ' in WorkspaceDir:\r
EdkLogger.error("build", FORMAT_NOT_SUPPORTED, "No space is allowed in WORKSPACE path",\r
ExtraData=WorkspaceDir)\r
if mws.PACKAGES_PATH:\r
for Path in mws.PACKAGES_PATH:\r
if not os.path.exists(Path):\r
- EdkLogger.error("build", FILE_NOT_FOUND, "One Path in PACKAGES_PATH doesn't exist", ExtraData="%s" % Path)\r
+ EdkLogger.error("build", FILE_NOT_FOUND, "One Path in PACKAGES_PATH doesn't exist", ExtraData=Path)\r
elif ' ' in Path:\r
EdkLogger.error("build", FORMAT_NOT_SUPPORTED, "No space is allowed in PACKAGES_PATH", ExtraData=Path)\r
\r
if EndOfProcedure is not None:\r
EndOfProcedure.set()\r
if Proc is None:\r
- if type(Command) != type(""):\r
+ if not isinstance(Command, type("")):\r
Command = " ".join(Command)\r
EdkLogger.error("build", COMMAND_FAILURE, "Failed to start command", ExtraData="%s [%s]" % (Command, WorkingDir))\r
\r
\r
# check the return code of the program\r
if Proc.returncode != 0:\r
- if type(Command) != type(""):\r
+ if not isinstance(Command, type("")):\r
Command = " ".join(Command)\r
# print out the Response file and its content when make failure\r
RespFile = os.path.join(WorkingDir, 'OUTPUT', 'respfilelist.txt')\r
# @param Other The other BuildUnit object compared to\r
#\r
def __eq__(self, Other):\r
- return Other is not None and self.BuildObject == Other.BuildObject \\r
+ return Other and self.BuildObject == Other.BuildObject \\r
+ and Other.BuildObject \\r
and self.BuildObject.Arch == Other.BuildObject.Arch\r
\r
## hash() method\r
BuildTask._Thread.acquire(True)\r
\r
# start a new build thread\r
- Bo,Bt = BuildTask._ReadyQueue.popitem()\r
+ Bo, Bt = BuildTask._ReadyQueue.popitem()\r
\r
# move into running queue\r
BuildTask._RunningQueueLock.acquire()\r
# while not BuildTask._ErrorFlag.isSet() and \\r
while len(BuildTask._RunningQueue) > 0:\r
EdkLogger.verbose("Waiting for thread ending...(%d)" % len(BuildTask._RunningQueue))\r
- EdkLogger.debug(EdkLogger.DEBUG_8, "Threads [%s]" % ", ".join([Th.getName() for Th in threading.enumerate()]))\r
+ EdkLogger.debug(EdkLogger.DEBUG_8, "Threads [%s]" % ", ".join(Th.getName() for Th in threading.enumerate()))\r
# avoid tense loop\r
time.sleep(0.1)\r
- except BaseException, X:\r
+ except BaseException as X:\r
#\r
# TRICK: hide the output of threads left runing, so that the user can\r
# catch the error message easily\r
self.HashSkipModules = []\r
self.Db_Flag = False\r
self.LaunchPrebuildFlag = False\r
- self.PlatformBuildPath = os.path.join(GlobalData.gConfDirectory,'.cache', '.PlatformBuild')\r
+ self.PlatformBuildPath = os.path.join(GlobalData.gConfDirectory, '.cache', '.PlatformBuild')\r
if BuildOptions.CommandLength:\r
GlobalData.gCommandMaxLength = BuildOptions.CommandLength\r
\r
# and preserve them for the rest of the main build step, because the child process environment will\r
# evaporate as soon as it exits, we cannot get it in build step.\r
#\r
- PrebuildEnvFile = os.path.join(GlobalData.gConfDirectory,'.cache','.PrebuildEnv')\r
+ PrebuildEnvFile = os.path.join(GlobalData.gConfDirectory, '.cache', '.PrebuildEnv')\r
if os.path.isfile(PrebuildEnvFile):\r
os.remove(PrebuildEnvFile)\r
if os.path.isfile(self.PlatformBuildPath):\r
f = open(PrebuildEnvFile)\r
envs = f.readlines()\r
f.close()\r
- envs = itertools.imap(lambda l: l.split('=',1), envs)\r
+ envs = itertools.imap(lambda l: l.split('=', 1), envs)\r
envs = itertools.ifilter(lambda l: len(l) == 2, envs)\r
envs = itertools.imap(lambda l: [i.strip() for i in l], envs)\r
os.environ.update(dict(envs))\r
try:\r
#os.rmdir(AutoGenObject.BuildDir)\r
RemoveDirectory(AutoGenObject.BuildDir, True)\r
- except WindowsError, X:\r
+ except WindowsError as X:\r
EdkLogger.error("build", FILE_DELETE_FAILURE, ExtraData=str(X))\r
return True\r
\r
try:\r
#os.rmdir(AutoGenObject.BuildDir)\r
RemoveDirectory(AutoGenObject.BuildDir, True)\r
- except WindowsError, X:\r
+ except WindowsError as X:\r
EdkLogger.error("build", FILE_DELETE_FAILURE, ExtraData=str(X))\r
return True\r
\r
GuidString = MatchGuid.group()\r
if GuidString.upper() in ModuleList:\r
Line = Line.replace(GuidString, ModuleList[GuidString.upper()].Name)\r
- MapBuffer.write('%s' % (Line))\r
+ MapBuffer.write(Line)\r
#\r
# Add the debug image full path.\r
#\r
if not Ma.IsLibrary:\r
ModuleList[Ma.Guid.upper()] = Ma\r
\r
- MapBuffer = StringIO('')\r
+ MapBuffer = BytesIO('')\r
if self.LoadFixAddress != 0:\r
#\r
# Rebase module to the preferred memory address before GenFds\r
if not Ma.IsLibrary:\r
ModuleList[Ma.Guid.upper()] = Ma\r
\r
- MapBuffer = StringIO('')\r
+ MapBuffer = BytesIO('')\r
if self.LoadFixAddress != 0:\r
#\r
# Rebase module to the preferred memory address before GenFds\r
#\r
# Rebase module to the preferred memory address before GenFds\r
#\r
- MapBuffer = StringIO('')\r
+ MapBuffer = BytesIO('')\r
if self.LoadFixAddress != 0:\r
self._CollectModuleMapBuffer(MapBuffer, ModuleList)\r
\r
toolsFile = os.path.join(FvDir, 'GuidedSectionTools.txt')\r
toolsFile = open(toolsFile, 'wt')\r
for guidedSectionTool in guidAttribs:\r
- print >> toolsFile, ' '.join(guidedSectionTool)\r
+ print(' '.join(guidedSectionTool), file=toolsFile)\r
toolsFile.close()\r
\r
## Returns the full path of the tool.\r
Parser.add_option("-D", "--define", action="append", type="string", dest="Macros", help="Macro: \"Name [= Value]\".")\r
\r
Parser.add_option("-y", "--report-file", action="store", dest="ReportFile", help="Create/overwrite the report to the specified filename.")\r
- Parser.add_option("-Y", "--report-type", action="append", type="choice", choices=['PCD','LIBRARY','FLASH','DEPEX','BUILD_FLAGS','FIXED_ADDRESS','HASH','EXECUTION_ORDER'], dest="ReportType", default=[],\r
+ Parser.add_option("-Y", "--report-type", action="append", type="choice", choices=['PCD', 'LIBRARY', 'FLASH', 'DEPEX', 'BUILD_FLAGS', 'FIXED_ADDRESS', 'HASH', 'EXECUTION_ORDER'], dest="ReportType", default=[],\r
help="Flags that control the type of build report to generate. Must be one of: [PCD, LIBRARY, FLASH, DEPEX, BUILD_FLAGS, FIXED_ADDRESS, HASH, EXECUTION_ORDER]. "\\r
"To specify more than one flag, repeat this option on the command line and the default flag set is [PCD, LIBRARY, FLASH, DEPEX, HASH, BUILD_FLAGS, FIXED_ADDRESS]")\r
Parser.add_option("-F", "--flag", action="store", type="string", dest="Flag",\r
# All job done, no error found and no exception raised\r
#\r
BuildError = False\r
- except FatalError, X:\r
+ except FatalError as X:\r
if MyBuild is not None:\r
# for multi-thread build exits safely\r
MyBuild.Relinquish()\r
if Option is not None and Option.debug is not None:\r
EdkLogger.quiet("(Python %s on %s) " % (platform.python_version(), sys.platform) + traceback.format_exc())\r
ReturnCode = X.args[0]\r
- except Warning, X:\r
+ except Warning as X:\r
# error from Fdf parser\r
if MyBuild is not None:\r
# for multi-thread build exits safely\r