aboutsummaryrefslogtreecommitdiffstats
path: root/waflib/fixpy2.py
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2018-09-11 20:54:08 +0200
committerDavid Robillard <d@drobilla.net>2018-09-11 20:54:08 +0200
commit62dcd3f33c7f8ba0f5694cc88b36f685463dac5b (patch)
tree5bb277b47d04635c5a38fb4da83e69c2242afef6 /waflib/fixpy2.py
parentc4dcd9609a4e0a968c58830301cfb49e2beffd4b (diff)
parentb6e9de2de9725e2f5a3170b8171ad1a1e95e8339 (diff)
downloadpugl-62dcd3f33c7f8ba0f5694cc88b36f685463dac5b.tar.gz
pugl-62dcd3f33c7f8ba0f5694cc88b36f685463dac5b.tar.bz2
pugl-62dcd3f33c7f8ba0f5694cc88b36f685463dac5b.zip
Merge commit 'b6e9de2de9725e2f5a3170b8171ad1a1e95e8339' as 'waflib'
Diffstat (limited to 'waflib/fixpy2.py')
-rw-r--r--waflib/fixpy2.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/waflib/fixpy2.py b/waflib/fixpy2.py
new file mode 100644
index 0000000..24176e0
--- /dev/null
+++ b/waflib/fixpy2.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python
+# encoding: utf-8
+# Thomas Nagy, 2010-2018 (ita)
+
+from __future__ import with_statement
+
+import os
+
+all_modifs = {}
+
+def fixdir(dir):
+ """Call all substitution functions on Waf folders"""
+ for k in all_modifs:
+ for v in all_modifs[k]:
+ modif(os.path.join(dir, 'waflib'), k, v)
+
+def modif(dir, name, fun):
+ """Call a substitution function"""
+ if name == '*':
+ lst = []
+ for y in '. Tools extras'.split():
+ for x in os.listdir(os.path.join(dir, y)):
+ if x.endswith('.py'):
+ lst.append(y + os.sep + x)
+ for x in lst:
+ modif(dir, x, fun)
+ return
+
+ filename = os.path.join(dir, name)
+ with open(filename, 'r') as f:
+ txt = f.read()
+
+ txt = fun(txt)
+
+ with open(filename, 'w') as f:
+ f.write(txt)
+
+def subst(*k):
+ """register a substitution function"""
+ def do_subst(fun):
+ for x in k:
+ try:
+ all_modifs[x].append(fun)
+ except KeyError:
+ all_modifs[x] = [fun]
+ return fun
+ return do_subst
+
+@subst('*')
+def r1(code):
+ "utf-8 fixes for python < 2.6"
+ code = code.replace('as e:', ',e:')
+ code = code.replace(".decode(sys.stdout.encoding or'latin-1',errors='replace')", '')
+ return code.replace('.encode()', '')
+
+@subst('Runner.py')
+def r4(code):
+ "generator syntax"
+ return code.replace('next(self.biter)', 'self.biter.next()')
+
+@subst('Context.py')
+def r5(code):
+ return code.replace("('Execution failure: %s'%str(e),ex=e)", "('Execution failure: %s'%str(e),ex=e),None,sys.exc_info()[2]")
+