diff -r 6a372f943e49 -r 4277e20cfec4 setup.py --- a/setup.py Tue Dec 18 00:54:32 2018 -0500 +++ b/setup.py Mon Dec 17 15:05:52 2018 +0100 @@ -922,11 +922,13 @@ rusttargetdir = os.path.join('rust', 'target', 'release') - def __init__(self, mpath, sources, rustlibname, subcrate, **kw): + def __init__(self, mpath, sources, rustlibname, subcrate, + py3_features=None, **kw): Extension.__init__(self, mpath, sources, **kw) if hgrustext is None: return srcdir = self.rustsrcdir = os.path.join('rust', subcrate) + self.py3_features = py3_features # adding Rust source and control files to depends so that the extension # gets rebuilt if they've changed @@ -957,6 +959,9 @@ env['HOME'] = pwd.getpwuid(os.getuid()).pw_dir cargocmd = ['cargo', 'build', '-vv', '--release'] + if sys.version_info[0] == 3 and self.py3_features is not None: + cargocmd.extend(('--features', self.py3_features, + '--no-default-features')) try: subprocess.check_call(cargocmd, env=env, cwd=self.rustsrcdir) except OSError as exc: @@ -1047,7 +1052,8 @@ if hgrustext == 'cpython': extmodules.append( - RustStandaloneExtension('mercurial.rustext', 'hg-cpython', 'librusthg') + RustStandaloneExtension('mercurial.rustext', 'hg-cpython', 'librusthg', + py3_features='python3') )