diff options
author | Greg Noel <GregNoel@tigris.org> | 2010-04-15 19:21:08 (GMT) |
---|---|---|
committer | Greg Noel <GregNoel@tigris.org> | 2010-04-15 19:21:08 (GMT) |
commit | c06950cad4c02ba6b759c1cbd65cfb52ab6868c3 (patch) | |
tree | a3e265178b5b9c6d717d657133c3085747287751 /src/engine | |
parent | d58dff5877e75c3c7813045a075e50b23ecb1dfd (diff) | |
download | SCons-c06950cad4c02ba6b759c1cbd65cfb52ab6868c3.zip SCons-c06950cad4c02ba6b759c1cbd65cfb52ab6868c3.tar.gz SCons-c06950cad4c02ba6b759c1cbd65cfb52ab6868c3.tar.bz2 |
http://scons.tigris.org/issues/show_bug.cgi?id=2345
Fixes due to running the regression tests with the '-3' option to Python2.6,
which causes the run-time to look for potential compatibility problems with
Python 3.x. In some cases, all we can do is quiet the warning since we still
support Python versions that can't use the newer idiom. In other cases, we
fix the problem. This patch contains a mix of quieting and fixing, plus a
little lint.
Diffstat (limited to 'src/engine')
-rw-r--r-- | src/engine/SCons/Builder.py | 2 | ||||
-rw-r--r-- | src/engine/SCons/EnvironmentTests.py | 20 | ||||
-rw-r--r-- | src/engine/SCons/Node/FS.py | 3 | ||||
-rw-r--r-- | src/engine/SCons/Node/FSTests.py | 2 | ||||
-rw-r--r-- | src/engine/SCons/Script/Main.py | 2 | ||||
-rw-r--r-- | src/engine/SCons/Taskmaster.py | 3 | ||||
-rw-r--r-- | src/engine/SCons/Variables/__init__.py | 2 | ||||
-rw-r--r-- | src/engine/SCons/compat/__init__.py | 47 | ||||
-rw-r--r-- | src/engine/SCons/compat/_scons_builtins.py | 4 | ||||
-rw-r--r-- | src/engine/SCons/cpp.py | 2 |
10 files changed, 49 insertions, 38 deletions
diff --git a/src/engine/SCons/Builder.py b/src/engine/SCons/Builder.py index bbf503c..1d20a4f 100644 --- a/src/engine/SCons/Builder.py +++ b/src/engine/SCons/Builder.py @@ -122,7 +122,7 @@ def match_splitext(path, suffixes = []): if suffixes: matchsuf = [S for S in suffixes if path[-len(S):] == S] if matchsuf: - suf = max(list(map(None, list(map(len, matchsuf)), matchsuf)))[1] + suf = max([(len(_f),_f) for _f in matchsuf])[1] return [path[:-len(suf)], path[-len(suf):]] return SCons.Util.splitext(path) diff --git a/src/engine/SCons/EnvironmentTests.py b/src/engine/SCons/EnvironmentTests.py index 9f0e167..99b3d93 100644 --- a/src/engine/SCons/EnvironmentTests.py +++ b/src/engine/SCons/EnvironmentTests.py @@ -25,13 +25,13 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" import SCons.compat -import collections import copy import io import os import sys import TestCmd import unittest +from collections import UserDict as UD, UserList as UL from SCons.Environment import * import SCons.Warnings @@ -126,15 +126,15 @@ class Scanner: -class CLVar(collections.UserList): +class CLVar(UL): def __init__(self, seq): if isinstance(seq, str): seq = seq.split() - collections.UserList.__init__(self, seq) + UL.__init__(self, seq) def __add__(self, other): - return collections.UserList.__add__(self, CLVar(other)) + return UL.__add__(self, CLVar(other)) def __radd__(self, other): - return collections.UserList.__radd__(self, CLVar(other)) + return UL.__radd__(self, CLVar(other)) def __coerce__(self, other): return (self, CLVar(other)) @@ -1479,11 +1479,6 @@ def exists(env): b2 = Environment()['BUILDERS'] assert b1 == b2, diff_dict(b1, b2) - import UserDict - UD = collections.UserDict - import UserList - UL = collections.UserList - cases = [ 'a1', 'A1', 'a1A1', 'a2', ['A2'], ['a2', 'A2'], @@ -2151,11 +2146,6 @@ f5: \ def test_Prepend(self): """Test prepending to construction variables in an Environment """ - import UserDict - UD = collections.UserDict - import UserList - UL = collections.UserList - cases = [ 'a1', 'A1', 'A1a1', 'a2', ['A2'], ['A2', 'a2'], diff --git a/src/engine/SCons/Node/FS.py b/src/engine/SCons/Node/FS.py index 6dd5b0b..c8b900f 100644 --- a/src/engine/SCons/Node/FS.py +++ b/src/engine/SCons/Node/FS.py @@ -1960,8 +1960,7 @@ class Dir(Base): if strings: r = [os.path.join(str(dir), x) for x in r] result.extend(r) - result.sort(lambda a, b: cmp(str(a), str(b))) - return result + return sorted(result, key=lambda a: str(a)) def _glob1(self, pattern, ondisk=True, source=False, strings=False): """ diff --git a/src/engine/SCons/Node/FSTests.py b/src/engine/SCons/Node/FSTests.py index 8ced548..339d124 100644 --- a/src/engine/SCons/Node/FSTests.py +++ b/src/engine/SCons/Node/FSTests.py @@ -2251,7 +2251,7 @@ class GlobTestCase(_tempdirTestCase): for input, string_expect, node_expect in cases: r = self.fs.Glob(input, **kwargs) if node_expect: - r.sort(lambda a,b: cmp(a.path, b.path)) + r = sorted(r, key=lambda a: a.path) result = [] for n in node_expect: if isinstance(n, str): diff --git a/src/engine/SCons/Script/Main.py b/src/engine/SCons/Script/Main.py index 96fc4b7..7a8f698 100644 --- a/src/engine/SCons/Script/Main.py +++ b/src/engine/SCons/Script/Main.py @@ -528,7 +528,7 @@ class MemStats(Stats): self.stats.append(SCons.Debug.memory()) def do_print(self): fmt = 'Memory %-32s %12d\n' - for label, stats in map(None, self.labels, self.stats): + for label, stats in zip(self.labels, self.stats): self.outfp.write(fmt % (label, stats)) memory_stats = MemStats() diff --git a/src/engine/SCons/Taskmaster.py b/src/engine/SCons/Taskmaster.py index f60b2e2..e55757a 100644 --- a/src/engine/SCons/Taskmaster.py +++ b/src/engine/SCons/Taskmaster.py @@ -107,8 +107,7 @@ fmt = "%(considered)3d "\ "%(build)3d " def dump_stats(): - StatsNodes.sort(lambda a, b: cmp(str(a), str(b))) - for n in StatsNodes: + for n in sorted(StatsNodes, key=lambda a: str(a)): print (fmt % n.stats.__dict__) + str(n) diff --git a/src/engine/SCons/Variables/__init__.py b/src/engine/SCons/Variables/__init__.py index 171c098..750d4b3 100644 --- a/src/engine/SCons/Variables/__init__.py +++ b/src/engine/SCons/Variables/__init__.py @@ -284,7 +284,7 @@ class Variables: """ if sort: - options = sorted(self.options, cmp=lambda x,y: sort(x.key,y.key)) + options = sorted(self.options, key=lambda x: x.key) else: options = self.options diff --git a/src/engine/SCons/compat/__init__.py b/src/engine/SCons/compat/__init__.py index a68ef72..62c6467 100644 --- a/src/engine/SCons/compat/__init__.py +++ b/src/engine/SCons/compat/__init__.py @@ -227,18 +227,23 @@ except AttributeError: os.path.lexists = lexists -try: - # Use the "imp" module to protect the import from fixers. - import imp - _cPickle = imp.load_module('cPickle', *imp.find_module('cPickle')) -except ImportError, e: - # The "cPickle" module has already been eliminated in favor of - # having "import pickle" import the fast version when available. - pass -else: - import sys - sys.modules['pickle'] = _cPickle - del _cPickle +# When we're using the '-3' option during regression tests, importing +# cPickle gives a warning no matter how it's done, so always use the +# real profile module, whether it's fast or not. +if os.environ.get('SCONS_HORRIBLE_REGRESSION_TEST_HACK') is None: + # Not a regression test with '-3', so try to use faster version. + try: + # Use the "imp" module to protect the import from fixers. + import imp + _cPickle = imp.load_module('cPickle', *imp.find_module('cPickle')) + except ImportError, e: + # The "cPickle" module has already been eliminated in favor of + # having "import pickle" import the fast version when available. + pass + else: + import sys + sys.modules['pickle'] = _cPickle + del _cPickle try: @@ -387,6 +392,24 @@ except AttributeError: del mkstemp +if os.environ.get('SCONS_HORRIBLE_REGRESSION_TEST_HACK') is not None: + # We can't apply the 'callable' fixer until the floor is 2.6, but the + # '-3' option to Python 2.6 and 2.7 generates almost ten thousand + # warnings. This hack allows us to run regression tests with the '-3' + # option by replacing the callable() built-in function with a hack + # that performs the same function but doesn't generate the warning. + # Note that this hack is ONLY intended to be used for regression + # testing, and should NEVER be used for real runs. + from types import ClassType + def callable(obj): + if hasattr(obj, '__call__'): return True + if isinstance(obj, (ClassType, type)): return True + return False + import builtins + builtins.callable = callable + del callable + + # Local Variables: # tab-width:4 # indent-tabs-mode:nil diff --git a/src/engine/SCons/compat/_scons_builtins.py b/src/engine/SCons/compat/_scons_builtins.py index 6a725c1..012d6c2 100644 --- a/src/engine/SCons/compat/_scons_builtins.py +++ b/src/engine/SCons/compat/_scons_builtins.py @@ -127,7 +127,7 @@ except NameError: # Pre-2.2 Python has no False keyword. builtins.False = not 1 # Assign to False in this module namespace so it shows up in pydoc output. - False = False + #False = False try: True @@ -135,7 +135,7 @@ except NameError: # Pre-2.2 Python has no True keyword. builtins.True = not 0 # Assign to True in this module namespace so it shows up in pydoc output. - True = True + #True = True try: file diff --git a/src/engine/SCons/cpp.py b/src/engine/SCons/cpp.py index 80b1c8b..9442942 100644 --- a/src/engine/SCons/cpp.py +++ b/src/engine/SCons/cpp.py @@ -133,7 +133,7 @@ CPP_to_Python_Ops_Sub = lambda m: CPP_to_Python_Ops_Dict[m.group(0)] # re module, as late as version 2.2.2, empirically matches the # "!" in "!=" first, instead of finding the longest match. # What's up with that? -l = sorted(CPP_to_Python_Ops_Dict.keys(), cmp=lambda a, b: cmp(len(b), len(a))) +l = sorted(CPP_to_Python_Ops_Dict.keys(), key=lambda a: len(a), reverse=True) # Turn the list of keys into one regular expression that will allow us # to substitute all of the operators at once. |