aboutsummaryrefslogtreecommitdiffstats
path: root/mach
diff options
context:
space:
mode:
authorDavid Heidelberg <david@ixit.cz>2021-05-11 11:54:36 +0200
committerDavid Heidelberg <david@ixit.cz>2021-07-19 14:24:29 +0200
commitaa0484d76b76112a1d395fb81897b31cb7113cdb (patch)
tree95a2ecf4d4ef4c20bebb277a5b91641e930d2baf /mach
parente8cb9f56e3fd0273d8984bc89639723c4f1d5482 (diff)
downloadservo-aa0484d76b76112a1d395fb81897b31cb7113cdb.tar.gz
servo-aa0484d76b76112a1d395fb81897b31cb7113cdb.zip
mach: cleanup after dropping Python 2 support
Signed-off-by: David Heidelberg <david@ixit.cz>
Diffstat (limited to 'mach')
-rwxr-xr-xmach75
1 files changed, 1 insertions, 74 deletions
diff --git a/mach b/mach
index c6efe1a9411..c521eaf9231 100755
--- a/mach
+++ b/mach
@@ -11,15 +11,11 @@
from __future__ import print_function, unicode_literals
-
import os
import sys
-# Check for the current python version as some users (especially on archlinux)
-# may not have python 2 installed and their /bin/python binary symlinked to
-# python 3.
if sys.version_info < (3, 5):
- print("mach does not support python 3 (< 3.5), please install python 3 (>= 3.5)")
+ print("mach does not support python < 3.5, please install python 3 >= 3.5")
sys.exit(1)
@@ -36,75 +32,6 @@ def main(args):
if __name__ == '__main__':
sys.dont_write_bytecode = True
- if sys.platform == 'win32' and sys.version_info < (3, 4):
- # This is a complete hack to work around the fact that Windows
- # multiprocessing needs to import the original module (ie: this
- # file), but only works if it has a .py extension.
- #
- # We do this by a sort of two-level function interposing. The first
- # level interposes forking.get_command_line() with our version defined
- # in my_get_command_line(). Our version of get_command_line will
- # replace the command string with the contents of the fork_interpose()
- # function to be used in the subprocess.
- #
- # The subprocess then gets an interposed imp.find_module(), which we
- # hack up to find 'mach' without the .py extension, since we already
- # know where it is (it's us!). If we're not looking for 'mach', then
- # the original find_module will suffice.
- #
- # See also: http://bugs.python.org/issue19946
- # And: https://bugzilla.mozilla.org/show_bug.cgi?id=914563
- # XXX In Python 3.4 the multiprocessing module was re-written and the
- # below code is no longer valid. The Python issue19946 also claims to
- # be fixed in this version. It's not clear whether this hack is still
- # needed in 3.4+ or not, but at least some basic mach commands appear
- # to work without it. So skip it in 3.4+ until we determine it's still
- # needed.
- import inspect
- from multiprocessing import forking
- global orig_command_line
-
- def fork_interpose():
- import imp
- import os
- import sys
- orig_find_module = imp.find_module
- def my_find_module(name, dirs):
- if name == 'mach':
- path = os.path.join(dirs[0], 'mach')
- f = open(path)
- return (f, path, ('', 'r', imp.PY_SOURCE))
- return orig_find_module(name, dirs)
-
- # Don't allow writing bytecode file for mach module.
- orig_load_module = imp.load_module
- def my_load_module(name, file, path, description):
- # multiprocess.forking invokes imp.load_module manually and
- # hard-codes the name __parents_main__ as the module name.
- if name == '__parents_main__':
- old_bytecode = sys.dont_write_bytecode
- sys.dont_write_bytecode = True
- try:
- return orig_load_module(name, file, path, description)
- finally:
- sys.dont_write_bytecode = old_bytecode
-
- return orig_load_module(name, file, path, description)
-
- imp.find_module = my_find_module
- imp.load_module = my_load_module
- from multiprocessing.forking import main; main()
-
- def my_get_command_line():
- fork_code, lineno = inspect.getsourcelines(fork_interpose)
- # Remove the first line (for 'def fork_interpose():') and the three
- # levels of indentation (12 spaces).
- fork_string = ''.join(x[12:] for x in fork_code[1:])
- cmdline = orig_command_line()
- cmdline[2] = fork_string
- return cmdline
- orig_command_line = forking.get_command_line
- forking.get_command_line = my_get_command_line
if os.path.exists('/etc/NIXOS') and not 'IN_NIX_SHELL' in os.environ: # we're on a nixOS system, need to run mach in nix-shell
import subprocess