> -----Original Message-----
> From: Justen, Jordan L
> Sent: Tuesday, March 08, 2016 11:37 AM
> To: Carsey, Jaben <[email protected]>
> Cc: [email protected]; Gao, Liming <[email protected]>; Bjorge, Erik
> C <[email protected]>
> Subject: Re: [edk2] [PATCH 3/3] BaseTools ConvertMasmToNasm: Support
> Python 3
> Importance: High
>
> On 2016-03-08 06:22:28, Carsey, Jaben wrote:
> >
> >
> > > On Mar 7, 2016, at 7:16 PM, Jordan Justen <[email protected]>
> wrote:
> > >
> > > The script is updated to support both python 2.7 and python 3.
> > >
> > > Contributed-under: TianoCore Contribution Agreement 1.0
> > > Signed-off-by: Jordan Justen <[email protected]>
> > > Cc: Yonghong Zhu <[email protected]>
> > > Cc: Liming Gao <[email protected]>
> > > Cc: Erik Bjorge <[email protected]>
> > > ---
> > > BaseTools/Scripts/ConvertMasmToNasm.py | 87 ++++++++++++++++++---
> -------------
> > > 1 file changed, 46 insertions(+), 41 deletions(-)
> > >
> > > diff --git a/BaseTools/Scripts/ConvertMasmToNasm.py
> b/BaseTools/Scripts/ConvertMasmToNasm.py
> > > index 8288972..98e1fac 100755
> > > --- a/BaseTools/Scripts/ConvertMasmToNasm.py
> > > +++ b/BaseTools/Scripts/ConvertMasmToNasm.py
> > > @@ -12,15 +12,18 @@
> > > # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
> EXPRESS OR IMPLIED.
> > > #
> > >
> > > +from __future__ import print_function
> > > +
> > > #
> > > # Import Modules
> > > #
> > > import argparse
> > > +import io
> > > import os.path
> > > import re
> > > -import StringIO
> > > import subprocess
> > > import sys
> > > +from io import open
> >
> > Why import all of io, then import some again?
> >
>
> This allows the code to call the function as open(), rather than
> io.open(). I can update all the calls to io.open() pretty easily
> instead.
>
> -Jordan
I initially thought that you already edited most of the open() calls, but I see
that is not true. I'd say change to io.open, but not sure if it's important.
-Jaben
>
> > >
> > >
> > > class UnsupportedConversion(Exception):
> > > @@ -152,12 +155,12 @@ class CommonUtils:
> > > (stdout, stderr) = p.communicate(pipeIn)
> > > if checkExitCode:
> > > if p.returncode != 0:
> > > - print 'command:', ' '.join(cmd)
> > > - print 'stdout:', stdout
> > > - print 'stderr:', stderr
> > > - print 'return:', p.returncode
> > > + print('command:', ' '.join(cmd))
> > > + print('stdout:', stdout)
> > > + print('stderr:', stderr)
> > > + print('return:', p.returncode)
> > > assert p.returncode == 0
> > > - return stdout
> > > + return stdout.decode('utf-8', 'ignore')
> > >
> > > def FileUpdated(self, path):
> > > if not self.git or not self.gitdir:
> > > @@ -181,7 +184,7 @@ class CommonUtils:
> > > return
> > >
> > > if not self.args.quiet:
> > > - print 'Committing: Conversion of', dst
> > > + print('Committing: Conversion of', dst)
> > >
> > > prefix = ' '.join(filter(lambda a: a, [pkg, module]))
> > > message = ''
> > > @@ -195,6 +198,7 @@ class CommonUtils:
> > > message += 'Contributed-under: TianoCore Contribution Agreement
> 1.0\n'
> > > assert(self.gitemail is not None)
> > > message += 'Signed-off-by: %s\n' % self.gitemail
> > > + message = message.encode('utf-8', 'ignore')
> > >
> > > cmd = ('git', 'commit', '-F', '-')
> > > self.RunAndCaptureOutput(cmd, pipeIn=message)
> > > @@ -226,21 +230,20 @@ class ConvertAsmFile(CommonUtils):
> > >
> > > self.inputFileBase = os.path.basename(self.inputFilename)
> > > self.outputFileBase = os.path.basename(self.outputFilename)
> > > - if self.outputFilename == '-' and not self.diff:
> > > - self.output = sys.stdout
> > > - else:
> > > - self.output = StringIO.StringIO()
> > > + self.output = io.BytesIO()
> > > if not self.args.quiet:
> > > dirpath, src = os.path.split(self.inputFilename)
> > > dirpath = self.RootRelative(dirpath)
> > > dst = os.path.basename(self.outputFilename)
> > > - print 'Converting:', dirpath, src, '->', dst
> > > + print('Converting:', dirpath, src, '->', dst)
> > > lines = open(self.inputFilename).readlines()
> > > self.Convert(lines)
> > > - if self.outputFilename == '-':
> > > - if self.diff:
> > > - sys.stdout.write(self.output.getvalue())
> > > - self.output.close()
> > > + if self.outputFilename == '-' and not self.diff:
> > > + output_data = self.output.getvalue()
> > > + if sys.version_info >= (3, 0):
> > > + output_data = output_data.decode('utf-8', 'ignore')
> > > + sys.stdout.write(output_data)
> > > + self.output.close()
> > > else:
> > > f = open(self.outputFilename, 'wb')
> > > f.write(self.output.getvalue())
> > > @@ -521,18 +524,18 @@ class ConvertAsmFile(CommonUtils):
> > > return '.%d' % count
> > >
> > > def EmitString(self, string):
> > > - self.output.write(string)
> > > + self.output.write(string.encode('utf-8', 'ignore'))
> > >
> > > def EmitLineWithDiff(self, old, new):
> > > newLine = (self.indent + new).rstrip()
> > > if self.diff:
> > > if old is None:
> > > - print '+%s' % newLine
> > > + print('+%s' % newLine)
> > > elif newLine != old:
> > > - print '-%s' % old
> > > - print '+%s' % newLine
> > > + print('-%s' % old)
> > > + print('+%s' % newLine)
> > > else:
> > > - print '', newLine
> > > + print('', newLine)
> > > if newLine != '':
> > > self.newAsmEmptyLineCount = 0
> > > self.EmitString(newLine + '\r\n')
> > > @@ -565,7 +568,7 @@ class ConvertAsmFile(CommonUtils):
> > > if emitNewLine:
> > > self.EmitLine(newLine.rstrip())
> > > elif self.diff:
> > > - print '-%s' % self.originalLine
> > > + print('-%s' % self.originalLine)
> > >
> > > leaRe = re.compile(r'''
> > > (lea \s+) ([\w@][\w@0-9]*) \s* , \s* (\S
> > > (?:.*\S)?)
> > > @@ -759,7 +762,7 @@ class ConvertInfFile(CommonUtils):
> > > def ScanInfAsmFiles(self):
> > > src = self.inf
> > > assert os.path.isfile(src)
> > > - f = open(src)
> > > + f = open(src, 'rt')
> > > self.lines = f.readlines()
> > > f.close()
> > >
> > > @@ -801,17 +804,16 @@ class ConvertInfFile(CommonUtils):
> > > unsupportedArchCount = 0
> > > for dst in self:
> > > didSomething = False
> > > - fileChanged = self.UpdateInfAsmFile(dst)
> > > try:
> > > self.UpdateInfAsmFile(dst)
> > > didSomething = True
> > > except UnsupportedConversion:
> > > if not self.args.quiet:
> > > - print 'MASM=>NASM conversion unsupported for', dst
> > > + print('MASM=>NASM conversion unsupported for', dst)
> > > notConverted.append(dst)
> > > except NoSourceFile:
> > > if not self.args.quiet:
> > > - print 'Source file missing for', reldst
> > > + print('Source file missing for', reldst)
> > > notConverted.append(dst)
> > > except UnsupportedArch:
> > > unsupportedArchCount += 1
> > > @@ -821,9 +823,9 @@ class ConvertInfFile(CommonUtils):
> > > if len(notConverted) > 0 and not self.args.quiet:
> > > for dst in notConverted:
> > > reldst = self.RootRelative(dst)
> > > - print 'Unabled to convert', reldst
> > > + print('Unabled to convert', reldst)
> > > if unsupportedArchCount > 0 and not self.args.quiet:
> > > - print 'Skipped', unsupportedArchCount, 'files based on
> architecture'
> > > + print('Skipped', unsupportedArchCount, 'files based on
> architecture')
> > >
> > > def UpdateInfAsmFile(self, dst, IgnoreMissingAsm=False):
> > > infPath = os.path.split(os.path.realpath(self.inf))[0]
> > > @@ -842,8 +844,9 @@ class ConvertInfFile(CommonUtils):
> > >
> > > lastLine = ''
> > > fileChanged = False
> > > - for i in range(len(self.lines)):
> > > - line = self.lines[i].rstrip()
> > > + i = 0
> > > + for line in self.lines:
> > > + line = line.rstrip()
> > > updatedLine = line
> > > for src in self.dstToSrc[dst]:
> > > assert self.srcToDst[src] == dst
> > > @@ -855,22 +858,24 @@ class ConvertInfFile(CommonUtils):
> > > if lastLine.strip() == updatedLine.strip():
> > > self.lines[i] = None
> > > else:
> > > - self.lines[i] = updatedLine + '\r\n'
> > > + self.lines[i] = updatedLine + '\n'
> > >
> > > if self.diff:
> > > if lineChanged:
> > > - print '-%s' % line
> > > + print('-%s' % line)
> > > if self.lines[i] is not None:
> > > - print '+%s' % updatedLine
> > > + print('+%s' % updatedLine)
> > > else:
> > > - print '', line
> > > + print('', line)
> > >
> > > fileChanged |= lineChanged
> > > if self.lines[i] is not None:
> > > lastLine = self.lines[i]
> > >
> > > + i += 1
> > > +
> > > if fileChanged:
> > > - self.lines = filter(lambda l: l is not None, self.lines)
> > > + self.lines = list(filter(lambda l: l is not None,
> > > self.lines))
> > >
> > > for src in self.dstToSrc[dst]:
> > > if not src.endswith('.asm'):
> > > @@ -879,7 +884,7 @@ class ConvertInfFile(CommonUtils):
> > > self.RemoveFile(fullSrc)
> > >
> > > if fileChanged:
> > > - f = open(self.inf, 'wb')
> > > + f = open(self.inf, 'w', newline='\r\n')
> > > f.writelines(self.lines)
> > > f.close()
> > > self.FileUpdated(self.inf)
> > > @@ -917,11 +922,11 @@ class ConvertInfFiles(CommonUtils):
> > > didSomething = True
> > > except UnsupportedConversion:
> > > if not self.args.quiet:
> > > - print 'MASM=>NASM conversion unsupported for', reldst
> > > + print('MASM=>NASM conversion unsupported for',
> > > reldst)
> > > notConverted.append(dst)
> > > except NoSourceFile:
> > > if not self.args.quiet:
> > > - print 'Source file missing for', reldst
> > > + print('Source file missing for', reldst)
> > > notConverted.append(dst)
> > > except UnsupportedArch:
> > > unsupportedArchCount += 1
> > > @@ -931,9 +936,9 @@ class ConvertInfFiles(CommonUtils):
> > > if len(notConverted) > 0 and not self.args.quiet:
> > > for dst in notConverted:
> > > reldst = self.RootRelative(dst)
> > > - print 'Unabled to convert', reldst
> > > + print('Unabled to convert', reldst)
> > > if unsupportedArchCount > 0 and not self.args.quiet:
> > > - print 'Skipped', unsupportedArchCount, 'files based on
> architecture'
> > > + print('Skipped', unsupportedArchCount, 'files based on
> architecture')
> > >
> > >
> > > class ConvertDirectories(CommonUtils):
> > > @@ -968,7 +973,7 @@ class ConvertAsmApp(CommonUtils):
> > > src = self.args.source
> > > dst = self.args.dest
> > > if self.infmode:
> > > - ConvertInfFiles(src, self)
> > > + ConvertInfFiles((src,), self)
> > > elif self.dirmode:
> > > ConvertDirectories((src,), self)
> > > elif not self.dirmode:
> > > --
> > > 2.7.0
> > >
> > > _______________________________________________
> > > edk2-devel mailing list
> > > [email protected]
> > > https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel