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
 
 
 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

Reply via email to