Hi Neal,
thanks for all your efforts, trying to get SCons running with Python3. I
created a diff of the (current trunk + 2to3) against your repo, please
find the patch file attached.
Looking at the changes, I think it might be worth a try, and compile the
patch into a little fixer script of its own. Then we could continue with
our basic development on Python v2.6 or v2.7, but easily create a
Python3 version by applying our personal "fixer" and 2to3 on top of it.
Just as an idea...
Best regards,
Dirk
On 09.09.2013 16:50, Neal Becker wrote:
Gary Oberbrunner wrote:
[...]
The bulk of those changes are the result of running 2to3-3.3 script. If you
want to see my manual changes, run 2to3 on the previous hg version, and then
diff that to mine.
diff -r orig/QMTest/TestCmd.py scons-p3/QMTest/TestCmd.py
0a1
> from __future__ import print_function
953c954
< print(str("Preserved directory " + dir + "\n"), end=' ')
---
> print("Preserved directory " + dir + "\n", end=' ')
diff -r orig/review.py scons-p3/review.py
1630c1630
< >>> print FormatSubversionPropertyChanges('foo.cc', [('svn:eol-style', 'LF')])
---
> >>> print(FormatSubversionPropertyChanges('foo.cc', [('svn:eol-style', 'LF')]))
diff -r orig/src/engine/SCons/Action.py scons-p3/src/engine/SCons/Action.py
240c240
< contents.append("%s,%s" % (code.co_argcount, len(code.co_varnames)))
---
> contents.append(str.encode("%s,%s" % (code.co_argcount, len(code.co_varnames))))
242c242
< 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))))
255c255
< contents.append(',(' + ','.join(map(_object_contents,code.co_consts[1:])) + ')')
---
> contents.append(b',(' + b','.join(map(_object_contents,code.co_consts[1:])) + b')')
261c261
< contents.append(',(' + ','.join(map(_object_contents,code.co_names)) + ')')
---
> contents.append(b',(' + b','.join(map(_object_contents,code.co_names)) + b')')
265c265
< contents.append(',(' + str(remove_set_lineno_codes(code.co_code)) + ')')
---
> contents.append(b',(' + remove_set_lineno_codes(code.co_code) + b')')
267c267
< return ''.join(contents)
---
> return b''.join(contents)
277c277
< contents.append(',(' + ','.join(map(_object_contents,func.__defaults__)) + ')')
---
> contents.append(b',(' + b','.join(map(_object_contents,func.__defaults__)) + b')')
279c279
< contents.append(',()')
---
> contents.append(b',()')
293c293
< contents.append(',(' + ','.join(xxx) + ')')
---
> contents.append(b',(' + b','.join(xxx) + b')')
295c295
< return ''.join(contents)
---
> return b''.join(contents)
436a437
> result = [ SCons.Util.to_bytes(r) for r in result ]
443,444c444,445
< result.append(env.subst('${'+v+'}'))
< return ''.join(result)
---
> result.append(SCons.Util.to_bytes(env.subst('${'+v+'}')))
> return b''.join(result)
1138c1139
< 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])
diff -r orig/src/engine/SCons/Conftest.py scons-p3/src/engine/SCons/Conftest.py
104d103
< from types import IntType
diff -r orig/src/engine/SCons/dblite.py scons-p3/src/engine/SCons/dblite.py
19,26c19,22
< 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)
32a29,30
> if bytes is not str:
> dblite_suffix += '.p3'
151,152c149,150
< 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)))
245d242
< print("OK")
diff -r orig/src/engine/SCons/Errors.py scons-p3/src/engine/SCons/Errors.py
35,36d34
< import exceptions
<
166c164
< elif isinstance(status, exceptions.EnvironmentError):
---
> elif isinstance(status, EnvironmentError):
diff -r orig/src/engine/SCons/Executor.py scons-p3/src/engine/SCons/Executor.py
430c430
< result = "".join([action.get_contents(self.get_all_targets(),
---
> result = b"".join([action.get_contents(self.get_all_targets(),
diff -r orig/src/engine/SCons/Scanner/__init__.py scons-p3/src/engine/SCons/Scanner/__init__.py
328c328
< self.cre = re.compile(regex, re.M)
---
> self.cre = re.compile(SCons.Util.to_bytes(regex), re.M)
396a397
> include = list (map (SCons.Util.to_str, include))
408c409
< return SCons.Node.FS._my_normcase(' '.join(include))
---
> return SCons.Node.FS._my_normcase(b' '.join(include))
diff -r orig/src/engine/SCons/SConf.py scons-p3/src/engine/SCons/SConf.py
178c178,182
< self.s = io.StringIO()
---
> try:
> import StringIO
> self.s = StringIO.StringIO()
> except:
> self.s = io.StringIO()
181,184c185,190
< 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')
diff -r orig/src/engine/SCons/Script/__init__.py scons-p3/src/engine/SCons/Script/__init__.py
367c367
< exec("%s = _SConscript.DefaultEnvironmentCall(%s)" % (name, repr(name)))
---
> exec ("%s = _SConscript.DefaultEnvironmentCall(%s)" % (name, repr(name)))
diff -r orig/src/engine/SCons/Script/SConscript.py scons-p3/src/engine/SCons/Script/SConscript.py
260c260
< exec(_file_, call_stack[-1].globals)
---
> exec(_file_.read(), call_stack[-1].globals)
diff -r orig/src/engine/SCons/Taskmaster.py scons-p3/src/engine/SCons/Taskmaster.py
521,527c521,523
< 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())
diff -r orig/src/engine/SCons/Tool/gas.py scons-p3/src/engine/SCons/Tool/gas.py
36c36,39
< as_module = __import__('as', globals(), locals(), [])
---
> try:
> as_module = __import__('as', globals(), locals(), [])
> except:
> as_module = __import__(__package__+'.as', globals(), locals(), ['*'])
diff -r orig/src/engine/SCons/Tool/gcc.py scons-p3/src/engine/SCons/Tool/gcc.py
68c68
< line = pipe.stdout.readline()
---
> line = SCons.Util.to_str (pipe.stdout.readline())
diff -r orig/src/engine/SCons/Tool/g++.py scons-p3/src/engine/SCons/Tool/g++.py
43,44c43
< cplusplus = __import__('c++', globals(), locals(), [])
<
---
> cplusplus = __import__(__package__+'.c++', globals(), locals(), ['*'])
78c77
< line = pipe.stdout.readline()
---
> line = SCons.Util.to_str (pipe.stdout.readline())
diff -r orig/src/engine/SCons/Tool/__init__.py scons-p3/src/engine/SCons/Tool/__init__.py
117c117
< if str(e)!="No module named %s"%self.name:
---
> if not str(e).startswith ("No module"):
147c147
< if str(e)!="No module named %s"%self.name:
---
> if not str(e).startswith("No module"):
diff -r orig/src/engine/SCons/Tool/link.py scons-p3/src/engine/SCons/Tool/link.py
45c45
< cplusplus = __import__('c++', globals(), locals(), [])
---
> cplusplus = __import__(__package__+'.c++', globals(), locals(), ['*'])
diff -r orig/src/engine/SCons/Tool/swig.py scons-p3/src/engine/SCons/Tool/swig.py
134c134
< out = pipe.stdout.read()
---
> out = SCons.Util.to_str (pipe.stdout.read())
diff -r orig/src/engine/SCons/Util.py scons-p3/src/engine/SCons/Util.py
40d39
< InstanceType = types.InstanceType
1373c1372
< setattr(obj, name, MethodType(function, None, obj))
---
> setattr(obj, name, function)
1405c1404
< m.update(str(s))
---
> m.update(to_bytes(str(s)))
1415c1414
< m.update(str(blck))
---
> m.update(to_bytes (str(blck)))
1487a1487,1498
>
> def to_bytes (s):
> if isinstance (s, bytes) or 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')
diff -r orig/src/script/scons.py scons-p3/src/script/scons.py
58,62c58,62
< if sys.version_info >= (3,0,0):
< msg = "scons: *** SCons version %s does not run under Python version %s.\n\
< Python 3 is not yet supported.\n"
< sys.stderr.write(msg % (__version__, sys.version.split()[0]))
< sys.exit(1)
---
> ## if sys.version_info >= (3,0,0):
> ## msg = "scons: *** SCons version %s does not run under Python version %s.\n\
> ## Python 3 is not yet supported.\n"
> ## sys.stderr.write(msg % (__version__, sys.version.split()[0]))
> ## sys.exit(1)
diff -r orig/src/setup.py scons-p3/src/setup.py
49,56d48
< # Exit with error if trying to install with Python >= 3.0
< if sys.version_info >= (3,0,0):
< msg = "scons: *** SCons does not run under Python version %s.\n\
< Python 3 and above are not yet supported.\n"
< sys.stderr.write(msg % (sys.version.split()[0]))
< sys.exit(1)
<
<
_______________________________________________
Scons-dev mailing list
[email protected]
http://two.pairlist.net/mailman/listinfo/scons-dev