third_party: Update waf to verison 2.0.23
[samba.git] / third_party / waf / waflib / fixpy2.py
1 #!/usr/bin/env python
2 # encoding: utf-8
3 # Thomas Nagy, 2010-2018 (ita)
4
5 from __future__ import with_statement
6
7 import os
8
9 all_modifs = {}
10
11 def fixdir(dir):
12         """Call all substitution functions on Waf folders"""
13         for k in all_modifs:
14                 for v in all_modifs[k]:
15                         modif(os.path.join(dir, 'waflib'), k, v)
16
17 def modif(dir, name, fun):
18         """Call a substitution function"""
19         if name == '*':
20                 lst = []
21                 for y in '. Tools extras'.split():
22                         for x in os.listdir(os.path.join(dir, y)):
23                                 if x.endswith('.py'):
24                                         lst.append(y + os.sep + x)
25                 for x in lst:
26                         modif(dir, x, fun)
27                 return
28
29         filename = os.path.join(dir, name)
30         with open(filename, 'r') as f:
31                 txt = f.read()
32
33         txt = fun(txt)
34
35         with open(filename, 'w') as f:
36                 f.write(txt)
37
38 def subst(*k):
39         """register a substitution function"""
40         def do_subst(fun):
41                 for x in k:
42                         try:
43                                 all_modifs[x].append(fun)
44                         except KeyError:
45                                 all_modifs[x] = [fun]
46                 return fun
47         return do_subst
48
49 @subst('*')
50 def r1(code):
51         "utf-8 fixes for python < 2.6"
52         code = code.replace('as e:', ',e:')
53         code = code.replace(".decode(sys.stdout.encoding or'latin-1',errors='replace')", '')
54         return code.replace('.encode()', '')
55
56 @subst('Runner.py')
57 def r4(code):
58         "generator syntax"
59         return code.replace('next(self.biter)', 'self.biter.next()').replace('self.daemon = True', 'self.setDaemon(1)')
60
61 @subst('Context.py')
62 def r5(code):
63         return code.replace("('Execution failure: %s'%str(e),ex=e)", "('Execution failure: %s'%str(e),ex=e),None,sys.exc_info()[2]")
64