Mercurial > public > mercurial-scm > hg
comparison setup.py @ 44487:06b0aa048007
setup-rust: add a --no-rust flag
This new flag will make sure the rust extension will not be build. If neither
`--rust` nor `--no-rust` is specified the `HGWITHRUSTEXT` is used.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 06 Mar 2020 16:06:30 +0100 |
parents | 5cbe2c0ebc53 |
children | 2a98b0cd4995 |
comparison
equal
deleted
inserted
replaced
44486:b55bec1ea972 | 44487:06b0aa048007 |
---|---|
133 raise SystemExit( | 133 raise SystemExit( |
134 "Couldn't import standard bz2 (incomplete Python install)." | 134 "Couldn't import standard bz2 (incomplete Python install)." |
135 ) | 135 ) |
136 | 136 |
137 ispypy = "PyPy" in sys.version | 137 ispypy = "PyPy" in sys.version |
138 | |
139 hgrustext = os.environ.get('HGWITHRUSTEXT') | |
140 # TODO record it for proper rebuild upon changes | |
141 # (see mercurial/__modulepolicy__.py) | |
142 if hgrustext != 'cpython' and hgrustext is not None: | |
143 if hgrustext: | |
144 printf('unkown HGWITHRUSTEXT value: %s' % hgrustext, file=sys.stderr) | |
145 hgrustext = None | |
146 | 138 |
147 import ctypes | 139 import ctypes |
148 import errno | 140 import errno |
149 import stat, subprocess, time | 141 import stat, subprocess, time |
150 import re | 142 import re |
476 self.make_file([pofile], mobuildfile, spawn, (cmd,)) | 468 self.make_file([pofile], mobuildfile, spawn, (cmd,)) |
477 | 469 |
478 | 470 |
479 class hgdist(Distribution): | 471 class hgdist(Distribution): |
480 pure = False | 472 pure = False |
481 rust = hgrustext is not None | 473 rust = False |
474 no_rust = False | |
482 cffi = ispypy | 475 cffi = ispypy |
483 | 476 |
484 global_options = Distribution.global_options + [ | 477 global_options = Distribution.global_options + [ |
485 ('pure', None, "use pure (slow) Python code instead of C extensions"), | 478 ('pure', None, "use pure (slow) Python code instead of C extensions"), |
486 ('rust', None, "use Rust extensions additionally to C extensions"), | 479 ('rust', None, "use Rust extensions additionally to C extensions"), |
480 ( | |
481 'no-rust', | |
482 None, | |
483 "do not use Rust extensions additionally to C extensions", | |
484 ), | |
487 ] | 485 ] |
486 | |
487 negative_opt = Distribution.negative_opt.copy() | |
488 boolean_options = ['pure', 'rust', 'no-rust'] | |
489 negative_opt['no-rust'] = 'rust' | |
490 | |
491 def _set_command_options(self, command_obj, option_dict=None): | |
492 command_obj.boolean_options += self.boolean_options | |
493 return Distribution._set_command_options( | |
494 self, command_obj, option_dict=option_dict | |
495 ) | |
496 | |
497 def parse_command_line(self): | |
498 ret = Distribution.parse_command_line(self) | |
499 if not (self.rust or self.no_rust): | |
500 hgrustext = os.environ.get('HGWITHRUSTEXT') | |
501 # TODO record it for proper rebuild upon changes | |
502 # (see mercurial/__modulepolicy__.py) | |
503 if hgrustext != 'cpython' and hgrustext is not None: | |
504 if hgrustext: | |
505 msg = 'unkown HGWITHRUSTEXT value: %s' % hgrustext | |
506 printf(msg, file=sys.stderr) | |
507 hgrustext = None | |
508 self.rust = hgrustext is not None | |
509 self.no_rust = not self.rust | |
510 return ret | |
488 | 511 |
489 def has_ext_modules(self): | 512 def has_ext_modules(self): |
490 # self.ext_modules is emptied in hgbuildpy.finalize_options which is | 513 # self.ext_modules is emptied in hgbuildpy.finalize_options which is |
491 # too late for some cases | 514 # too late for some cases |
492 return not self.pure and Distribution.has_ext_modules(self) | 515 return not self.pure and Distribution.has_ext_modules(self) |