Patchwork [3,of,6,v3] setup-rust: add a --no-rust flag

login
register
mail settings
Submitter Pierre-Yves David
Date March 9, 2020, 5:34 p.m.
Message ID <4094a983cfe6f59ddbec.1583775294@nodosa.octobus.net>
Download mbox | patch
Permalink /patch/45641/
State Accepted
Headers show

Comments

Pierre-Yves David - March 9, 2020, 5:34 p.m.
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david@octobus.net>
# Date 1583507190 -3600
#      Fri Mar 06 16:06:30 2020 +0100
# Node ID 4094a983cfe6f59ddbec04c34a0070137911d6fa
# Parent  bbfdc8c2f3a2ac0f3c4921351614f4e134b0d46d
# EXP-Topic rust-test-option
# Available At https://dev.heptapod.net/octobus/mercurial-devel/
#              hg pull https://dev.heptapod.net/octobus/mercurial-devel/ -r 4094a983cfe6
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.

Patch

diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -136,14 +136,6 @@  else:
 
 ispypy = "PyPy" in sys.version
 
-hgrustext = os.environ.get('HGWITHRUSTEXT')
-# TODO record it for proper rebuild upon changes
-# (see mercurial/__modulepolicy__.py)
-if hgrustext != 'cpython' and hgrustext is not None:
-    if hgrustext:
-        printf('unkown HGWITHRUSTEXT value: %s' % hgrustext, file=sys.stderr)
-    hgrustext = None
-
 import ctypes
 import errno
 import stat, subprocess, time
@@ -478,14 +470,45 @@  class hgbuildmo(build):
 
 class hgdist(Distribution):
     pure = False
-    rust = hgrustext is not None
+    rust = False
+    no_rust = False
     cffi = ispypy
 
     global_options = Distribution.global_options + [
         ('pure', None, "use pure (slow) Python code instead of C extensions"),
         ('rust', None, "use Rust extensions additionally to C extensions"),
+        (
+            'no-rust',
+            None,
+            "do not use Rust extensions additionally to C extensions",
+        ),
     ]
 
+    negative_opt = Distribution.negative_opt.copy()
+    boolean_options = ['pure', 'rust', 'no-rust']
+    negative_opt['no-rust'] = 'rust'
+
+    def _set_command_options(self, command_obj, option_dict=None):
+        command_obj.boolean_options += self.boolean_options
+        return Distribution._set_command_options(
+            self, command_obj, option_dict=option_dict
+        )
+
+    def parse_command_line(self):
+        ret = Distribution.parse_command_line(self)
+        if not (self.rust or self.no_rust):
+            hgrustext = os.environ.get('HGWITHRUSTEXT')
+            # TODO record it for proper rebuild upon changes
+            # (see mercurial/__modulepolicy__.py)
+            if hgrustext != 'cpython' and hgrustext is not None:
+                if hgrustext:
+                    msg = 'unkown HGWITHRUSTEXT value: %s' % hgrustext
+                    printf(msg, file=sys.stderr)
+                hgrustext = None
+            self.rust = hgrustext is not None
+            self.no_rust = not self.rust
+        return ret
+
     def has_ext_modules(self):
         # self.ext_modules is emptied in hgbuildpy.finalize_options which is
         # too late for some cases