##// END OF EJS Templates
setup: support executing with python3 including 2to3...
Simon Heimberg -
r15494:7a7a1c59 default
parent child Browse files
Show More
@@ -68,6 +68,18 b' from distutils.errors import CCompilerEr'
68 68 from distutils.sysconfig import get_python_inc
69 69 from distutils.version import StrictVersion
70 70
71 convert2to3 = '--c2to3' in sys.argv
72 if convert2to3:
73 try:
74 from distutils.command.build_py import build_py_2to3 as build_py
75 from lib2to3.refactor import get_fixers_from_package as getfixers
76 except ImportError:
77 if sys.version_info[0] < 3:
78 raise SystemExit("--c2to3 is only compatible with python3.")
79 raise
80 sys.path.append('contrib')
81
82
71 83 scripts = ['hg']
72 84 if os.name == 'nt':
73 85 scripts.append('contrib/win32/hg.bat')
@@ -190,6 +202,11 b' class hgbuild(build):'
190 202 # Insert hgbuildmo first so that files in mercurial/locale/ are found
191 203 # when build_py is run next.
192 204 sub_commands = [('build_mo', None),
205 # We also need build_ext before build_py. Otherwise, when 2to3 is called (in
206 # build_py), it will not find osutil & friends, thinking that those modules are
207 # global and, consequently, making a mess, now that all module imports are
208 # global.
209 ('build_ext', build.has_ext_modules),
193 210 ] + build.sub_commands
194 211
195 212 class hgbuildmo(Command):
@@ -235,6 +252,8 b' class hgdist(Distribution):'
235 252 global_options = Distribution.global_options + \
236 253 [('pure', None, "use pure (slow) Python "
237 254 "code instead of C extensions"),
255 ('c2to3', None, "(experimental!) convert "
256 "code with 2to3"),
238 257 ]
239 258
240 259 def has_ext_modules(self):
@@ -254,6 +273,9 b' class hgbuildext(build_ext):'
254 273 ext.name)
255 274
256 275 class hgbuildpy(build_py):
276 if convert2to3:
277 fixer_names = sorted(set(getfixers("lib2to3.fixes") +
278 getfixers("hgfixes")))
257 279
258 280 def finalize_options(self):
259 281 build_py.finalize_options(self)
@@ -344,7 +366,7 b' class hginstallscripts(install_scripts):'
344 366 fp.close()
345 367
346 368 # skip binary files
347 if '\0' in data:
369 if b('\0') in data:
348 370 continue
349 371
350 372 data = data.replace('@LIBDIR@', libdir.encode('string_escape'))
General Comments 0
You need to be logged in to leave comments. Login now