Reviewed-by: Erik Bjorge <[email protected]> > -----Original Message----- > From: Justen, Jordan L > Sent: Wednesday, March 9, 2016 5:46 PM > To: [email protected] > Cc: Justen, Jordan L <[email protected]>; Zhu, Yonghong > <[email protected]>; Gao, Liming <[email protected]>; Bjorge, > Erik C <[email protected]> > Subject: [PATCH v2] BaseTools ConvertMasmToNasm: Support Python 3 > > The script is updated to support both python 2.7 and python 3. > > v2: > * Use io.open() rather than open() (Jaben) > > 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 | 90 ++++++++++++++++++--------- > ------- > 1 file changed, 47 insertions(+), 43 deletions(-) > > diff --git a/BaseTools/Scripts/ConvertMasmToNasm.py > b/BaseTools/Scripts/ConvertMasmToNasm.py > index 8288972..6a0d27d 100755 > --- a/BaseTools/Scripts/ConvertMasmToNasm.py > +++ b/BaseTools/Scripts/ConvertMasmToNasm.py > @@ -12,13 +12,15 @@ > # 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 > > @@ -152,12 +154,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 +183,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 +197,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,23 +229,22 @@ 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 > - lines = open(self.inputFilename).readlines() > + print('Converting:', dirpath, src, '->', dst) > + lines = io.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 = io.open(self.outputFilename, 'wb') > f.write(self.output.getvalue()) > f.close() > self.output.close() > @@ -521,18 +523,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 +567,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 +761,7 @@ class ConvertInfFile(CommonUtils): > def ScanInfAsmFiles(self): > src = self.inf > assert os.path.isfile(src) > - f = open(src) > + f = io.open(src, 'rt') > self.lines = f.readlines() > f.close() > > @@ -801,17 +803,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 +822,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 +843,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 +857,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 +883,7 @@ class ConvertInfFile(CommonUtils): > self.RemoveFile(fullSrc) > > if fileChanged: > - f = open(self.inf, 'wb') > + f = io.open(self.inf, 'w', newline='\r\n') > f.writelines(self.lines) > f.close() > self.FileUpdated(self.inf) > @@ -917,11 +921,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 +935,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 +972,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

