diff options
author | Gary Oberbrunner <garyo@oberbrunner.com> | 2013-09-22 17:10:51 (GMT) |
---|---|---|
committer | Gary Oberbrunner <garyo@oberbrunner.com> | 2013-09-22 17:10:51 (GMT) |
commit | b554eb817c60f4e419bbc84efc02c7fbc62b7ced (patch) | |
tree | 5d6a8f035bcce302da428d3dd9d26920407a78ee /src/engine/SCons | |
parent | 953dc41b8b720fdcec7955de67d23206214e5125 (diff) | |
download | SCons-b554eb817c60f4e419bbc84efc02c7fbc62b7ced.zip SCons-b554eb817c60f4e419bbc84efc02c7fbc62b7ced.tar.gz SCons-b554eb817c60f4e419bbc84efc02c7fbc62b7ced.tar.bz2 |
Manual python3 post-2to3 fixes from Neal Becker
Diffstat (limited to 'src/engine/SCons')
-rw-r--r-- | src/engine/SCons/Action.py | 32 | ||||
-rw-r--r-- | src/engine/SCons/Conftest.py | 1 | ||||
-rw-r--r-- | src/engine/SCons/Errors.py | 4 | ||||
-rw-r--r-- | src/engine/SCons/Executor.py | 2 | ||||
-rw-r--r-- | src/engine/SCons/SConf.py | 16 | ||||
-rw-r--r-- | src/engine/SCons/Scanner/__init__.py | 2 | ||||
-rw-r--r-- | src/engine/SCons/Script/SConscript.py | 2 | ||||
-rw-r--r-- | src/engine/SCons/Script/__init__.py | 2 | ||||
-rw-r--r-- | src/engine/SCons/Taskmaster.py | 10 | ||||
-rw-r--r-- | src/engine/SCons/Tool/__init__.py | 4 | ||||
-rw-r--r-- | src/engine/SCons/Tool/g++.py | 5 | ||||
-rw-r--r-- | src/engine/SCons/Tool/gas.py | 5 | ||||
-rw-r--r-- | src/engine/SCons/Tool/gcc.py | 2 | ||||
-rw-r--r-- | src/engine/SCons/Tool/link.py | 2 | ||||
-rw-r--r-- | src/engine/SCons/Tool/swig.py | 2 | ||||
-rw-r--r-- | src/engine/SCons/Util.py | 19 | ||||
-rw-r--r-- | src/engine/SCons/dblite.py | 16 |
17 files changed, 70 insertions, 56 deletions
diff --git a/src/engine/SCons/Action.py b/src/engine/SCons/Action.py index e8574cb..68c93b4 100644 --- a/src/engine/SCons/Action.py +++ b/src/engine/SCons/Action.py @@ -237,9 +237,9 @@ def _code_contents(code): # The code contents depends on the number of local variables # but not their actual names. - contents.append("%s,%s" % (code.co_argcount, len(code.co_varnames))) + contents.append(str.encode("%s,%s" % (code.co_argcount, len(code.co_varnames)))) try: - contents.append(",%s,%s" % (len(code.co_cellvars), len(code.co_freevars))) + contents.append(str.encode(",%s,%s" % (len(code.co_cellvars), len(code.co_freevars)))) except AttributeError: # Older versions of Python do not support closures. contents.append(",0,0") @@ -252,19 +252,19 @@ def _code_contents(code): # Note that we also always ignore the first entry of co_consts # which contains the function doc string. We assume that the # function does not access its doc string. - contents.append(',(' + ','.join(map(_object_contents,code.co_consts[1:])) + ')') + contents.append(b',(' + b','.join(map(_object_contents,code.co_consts[1:])) + b')') # The code contents depends on the variable names used to # accessed global variable, as changing the variable name changes # the variable actually accessed and therefore changes the # function result. - contents.append(',(' + ','.join(map(_object_contents,code.co_names)) + ')') + contents.append(b',(' + b','.join(map(_object_contents,code.co_names)) + b')') # The code contents depends on its actual code!!! - contents.append(',(' + str(remove_set_lineno_codes(code.co_code)) + ')') + contents.append(b',(' + remove_set_lineno_codes(code.co_code) + b')') - return ''.join(contents) + return b''.join(contents) def _function_contents(func): @@ -274,9 +274,9 @@ def _function_contents(func): # The function contents depends on the value of defaults arguments if func.__defaults__: - contents.append(',(' + ','.join(map(_object_contents,func.__defaults__)) + ')') + contents.append(b',(' + b','.join(map(_object_contents,func.__defaults__)) + b')') else: - contents.append(',()') + contents.append(b',()') # The function contents depends on the closure captured cell values. try: @@ -290,9 +290,9 @@ def _function_contents(func): xxx = [_object_contents(x.cell_contents) for x in closure] except AttributeError: xxx = [] - contents.append(',(' + ','.join(xxx) + ')') + contents.append(b',(' + b','.join(xxx) + b')') - return ''.join(contents) + return b''.join(contents) def _actionAppend(act1, act2): @@ -434,14 +434,20 @@ class ActionBase(object): def get_contents(self, target, source, env): result = [ self.get_presig(target, source, env) ] + def clean (u): + if isinstance (u, bytes): + return u + elif isinstance (u, str): + return bytes (u, 'utf-8') + result = [ clean(r) for r in result ] # This should never happen, as the Action() factory should wrap # the varlist, but just in case an action is created directly, # we duplicate this check here. vl = self.get_varlist(target, source, env) if is_String(vl): vl = (vl,) for v in vl: - result.append(env.subst('${'+v+'}')) - return ''.join(result) + result.append(bytes(env.subst('${'+v+'}'), 'utf-8')) + return b''.join(result) def __add__(self, other): return _actionAppend(self, other) @@ -1135,7 +1141,7 @@ class ListAction(ActionBase): Simple concatenation of the signatures of the elements. """ - return "".join([x.get_contents(target, source, env) for x in self.list]) + return b"".join([x.get_contents(target, source, env) for x in self.list]) def __call__(self, target, source, env, exitstatfunc=_null, presub=_null, show=_null, execute=_null, chdir=_null, executor=None): diff --git a/src/engine/SCons/Conftest.py b/src/engine/SCons/Conftest.py index d466278..4e2a3e8 100644 --- a/src/engine/SCons/Conftest.py +++ b/src/engine/SCons/Conftest.py @@ -101,7 +101,6 @@ Autoconf-like configuration support; low level implementation of tests. # import re -from types import IntType # # PUBLIC VARIABLES diff --git a/src/engine/SCons/Errors.py b/src/engine/SCons/Errors.py index 3b8c3f9..54e888c 100644 --- a/src/engine/SCons/Errors.py +++ b/src/engine/SCons/Errors.py @@ -32,8 +32,6 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" import SCons.Util -import exceptions - class BuildError(Exception): """ Errors occuring while building. @@ -163,7 +161,7 @@ def convert_to_BuildError(status, exc_info=None): status=2, exitstatus=2, exc_info=exc_info) - elif isinstance(status, exceptions.EnvironmentError): + elif isinstance(status, EnvironmentError): # If an IOError/OSError happens, raise a BuildError. # Report the name of the file or directory that caused the # error, which might be different from the target being built diff --git a/src/engine/SCons/Executor.py b/src/engine/SCons/Executor.py index 6f2489b..68419b8 100644 --- a/src/engine/SCons/Executor.py +++ b/src/engine/SCons/Executor.py @@ -427,7 +427,7 @@ class Executor(object): except KeyError: pass env = self.get_build_env() - result = "".join([action.get_contents(self.get_all_targets(), + result = b"".join([action.get_contents(self.get_all_targets(), self.get_all_sources(), env) for action in self.get_action_list()]) diff --git a/src/engine/SCons/SConf.py b/src/engine/SCons/SConf.py index 987f88d..e14c5e0 100644 --- a/src/engine/SCons/SConf.py +++ b/src/engine/SCons/SConf.py @@ -175,13 +175,19 @@ class Streamer(object): """ def __init__(self, orig): self.orig = orig - self.s = io.StringIO() + try: + import StringIO + self.s = StringIO.StringIO() + except: + self.s = io.StringIO() def write(self, str): - if self.orig: - self.orig.write(str) - self.s.write(str) - + try: + if self.orig: + self.orig.write(str) + self.s.write(str) + except: + print ('oops') def writelines(self, lines): for l in lines: self.write(l + '\n') diff --git a/src/engine/SCons/Scanner/__init__.py b/src/engine/SCons/Scanner/__init__.py index 6ec8df9..8801094 100644 --- a/src/engine/SCons/Scanner/__init__.py +++ b/src/engine/SCons/Scanner/__init__.py @@ -325,7 +325,7 @@ class Classic(Current): def __init__(self, name, suffixes, path_variable, regex, *args, **kw): - self.cre = re.compile(regex, re.M) + self.cre = re.compile(SCons.Util.to_bytes(regex), re.M) def _scan(node, env, path=(), self=self): node = node.rfile() diff --git a/src/engine/SCons/Script/SConscript.py b/src/engine/SCons/Script/SConscript.py index fefffef..05cb6a6 100644 --- a/src/engine/SCons/Script/SConscript.py +++ b/src/engine/SCons/Script/SConscript.py @@ -257,7 +257,7 @@ def _SConscript(fs, *files, **kw): pass try: try: - exec(_file_, call_stack[-1].globals) + exec(_file_.read(), call_stack[-1].globals) except SConscriptReturn: pass finally: diff --git a/src/engine/SCons/Script/__init__.py b/src/engine/SCons/Script/__init__.py index 9f2837c..e9e8b71 100644 --- a/src/engine/SCons/Script/__init__.py +++ b/src/engine/SCons/Script/__init__.py @@ -364,7 +364,7 @@ GlobalDefaultBuilders = [ ] for name in GlobalDefaultEnvironmentFunctions + GlobalDefaultBuilders: - exec("%s = _SConscript.DefaultEnvironmentCall(%s)" % (name, repr(name))) + exec ("%s = _SConscript.DefaultEnvironmentCall(%s)" % (name, repr(name))) del name # There are a handful of variables that used to live in the diff --git a/src/engine/SCons/Taskmaster.py b/src/engine/SCons/Taskmaster.py index 54d04a8..14ffe8c 100644 --- a/src/engine/SCons/Taskmaster.py +++ b/src/engine/SCons/Taskmaster.py @@ -518,13 +518,9 @@ class Task(object): Raises a pending exception that was recorded while getting a Task ready for execution. """ - exc = self.exc_info()[:] - try: - exc_type, exc_value, exc_traceback = exc - except ValueError: - exc_type, exc_value = exc - exc_traceback = None - raise exc_type(exc_value).with_traceback(exc_traceback) + + import six + six.reraise(*self.exc_info()) class AlwaysTask(Task): def needs_execute(self): diff --git a/src/engine/SCons/Tool/__init__.py b/src/engine/SCons/Tool/__init__.py index ac180a9..1d5b504 100644 --- a/src/engine/SCons/Tool/__init__.py +++ b/src/engine/SCons/Tool/__init__.py @@ -114,7 +114,7 @@ class Tool(object): if file: file.close() except ImportError as e: - if str(e)!="No module named %s"%self.name: + if not str(e).startswith ("No module"): raise SCons.Errors.EnvironmentError(e) try: import zipimport @@ -144,7 +144,7 @@ class Tool(object): file.close() return module except ImportError as e: - if str(e)!="No module named %s"%self.name: + if not str(e).startswith("No module"): raise SCons.Errors.EnvironmentError(e) try: import zipimport diff --git a/src/engine/SCons/Tool/g++.py b/src/engine/SCons/Tool/g++.py index e4da5fe..0e1c181 100644 --- a/src/engine/SCons/Tool/g++.py +++ b/src/engine/SCons/Tool/g++.py @@ -40,8 +40,7 @@ import subprocess import SCons.Tool import SCons.Util -cplusplus = __import__('c++', globals(), locals(), []) - +cplusplus = __import__(__package__+'.c++', globals(), locals(), ['*']) compilers = ['g++'] def generate(env): @@ -75,7 +74,7 @@ def generate(env): #line = pipe.stdout.read().strip() #if line: # env['CXXVERSION'] = line - line = pipe.stdout.readline() + line = SCons.Util.to_str (pipe.stdout.readline()) match = re.search(r'[0-9]+(\.[0-9]+)+', line) if match: env['CXXVERSION'] = match.group(0) diff --git a/src/engine/SCons/Tool/gas.py b/src/engine/SCons/Tool/gas.py index 28f84db..d01bd60 100644 --- a/src/engine/SCons/Tool/gas.py +++ b/src/engine/SCons/Tool/gas.py @@ -33,7 +33,10 @@ selection method. __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" -as_module = __import__('as', globals(), locals(), []) +try: + as_module = __import__('as', globals(), locals(), []) +except: + as_module = __import__(__package__+'.as', globals(), locals(), ['*']) assemblers = ['as', 'gas'] diff --git a/src/engine/SCons/Tool/gcc.py b/src/engine/SCons/Tool/gcc.py index 4f87b24..72f9bfd 100644 --- a/src/engine/SCons/Tool/gcc.py +++ b/src/engine/SCons/Tool/gcc.py @@ -65,7 +65,7 @@ def generate(env): #line = pipe.stdout.read().strip() #if line: # env['CCVERSION'] = line - line = pipe.stdout.readline() + line = SCons.Util.to_str (pipe.stdout.readline()) match = re.search(r'[0-9]+(\.[0-9]+)+', line) if match: env['CCVERSION'] = match.group(0) diff --git a/src/engine/SCons/Tool/link.py b/src/engine/SCons/Tool/link.py index 5539f62..864a018 100644 --- a/src/engine/SCons/Tool/link.py +++ b/src/engine/SCons/Tool/link.py @@ -42,7 +42,7 @@ import SCons.Warnings from SCons.Tool.FortranCommon import isfortran -cplusplus = __import__('c++', globals(), locals(), []) +cplusplus = __import__(__package__+'.c++', globals(), locals(), ['*']) issued_mixed_link_warning = False diff --git a/src/engine/SCons/Tool/swig.py b/src/engine/SCons/Tool/swig.py index d51a386..5d2264c 100644 --- a/src/engine/SCons/Tool/swig.py +++ b/src/engine/SCons/Tool/swig.py @@ -131,7 +131,7 @@ def _get_swig_version(env): stdout = subprocess.PIPE) if pipe.wait() != 0: return - out = pipe.stdout.read() + out = SCons.Util.to_str (pipe.stdout.read()) match = re.search(r'SWIG Version\s+(\S+)$', out, re.MULTILINE) if match: return match.group(1) diff --git a/src/engine/SCons/Util.py b/src/engine/SCons/Util.py index f2e5325..00fde6c 100644 --- a/src/engine/SCons/Util.py +++ b/src/engine/SCons/Util.py @@ -37,7 +37,6 @@ import collections # Don't "from types import ..." these because we need to get at the # types module later to look for UnicodeType. -InstanceType = types.InstanceType MethodType = types.MethodType FunctionType = types.FunctionType try: str @@ -1370,7 +1369,7 @@ def AddMethod(obj, function, name=None): setattr(obj, name, MethodType(function, obj, obj.__class__)) else: # "obj" is a class, so it gets an unbound method. - setattr(obj, name, MethodType(function, None, obj)) + setattr(obj, name, function) def RenameFunction(function, name): """ @@ -1402,7 +1401,7 @@ else: md5 = True def MD5signature(s): m = hashlib.md5() - m.update(str(s)) + m.update(to_bytes(str(s))) return m.hexdigest() def MD5filesignature(fname, chunksize=65536): @@ -1412,7 +1411,7 @@ else: blck = f.read(chunksize) if not blck: break - m.update(str(blck)) + m.update(to_bytes (str(blck))) f.close() return m.hexdigest() @@ -1486,6 +1485,18 @@ class NullSeq(Null): del __revision__ +def to_bytes (s): + if bytes is str: + return s + else: + return bytes (s, 'utf-8') + +def to_str (s): + if bytes is str: + return s + else: + return str (s, 'utf-8') + # Local Variables: # tab-width:4 # indent-tabs-mode:nil diff --git a/src/engine/SCons/dblite.py b/src/engine/SCons/dblite.py index 89b9856..99af54a 100644 --- a/src/engine/SCons/dblite.py +++ b/src/engine/SCons/dblite.py @@ -16,14 +16,10 @@ ignore_corrupt_dbfiles = 0 def corruption_warning(filename): print("Warning: Discarding corrupt database:", filename) -try: str -except NameError: - def is_string(s): - return isinstance(s, str) -else: - def is_string(s): - return type(s) in (str, str) - +def is_string(s): + return isinstance(s, str) +def is_bytes(s): + return isinstance (s, bytes) try: str('a') except NameError: @@ -148,8 +144,8 @@ class dblite(object): self._check_writable() if (not is_string(key)): raise TypeError("key `%s' must be a string but is %s" % (key, type(key))) - if (not is_string(value)): - raise TypeError("value `%s' must be a string but is %s" % (value, type(value))) + if (not is_bytes(value)): + raise TypeError("value `%s' must be a bytes but is %s" % (value, type(value))) self._dict[key] = value self._needs_sync = 0o001 |