aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaciej Krüger <mkg20001@gmail.com>2021-05-31 17:57:43 +0200
committerMaciej Krüger <mkg20001@gmail.com>2021-06-04 10:56:41 +0200
commit8e48b6fd744bdfb50b9c315191ccb409d673ebf4 (patch)
treee48d251c0ddadf6df24a0fcae296b2de98433750
parent2cade89ede734d088c511e76b0c12b0162bb333a (diff)
downloadservo-8e48b6fd744bdfb50b9c315191ccb409d673ebf4.tar.gz
servo-8e48b6fd744bdfb50b9c315191ccb409d673ebf4.zip
add NixOS support to mach and automatically re-launch mach in nix-shell
-rwxr-xr-xmach12
-rw-r--r--python/servo/bootstrap.py6
2 files changed, 17 insertions, 1 deletions
diff --git a/mach b/mach
index bfee69d7326..e0073fc7ae7 100755
--- a/mach
+++ b/mach
@@ -106,4 +106,14 @@ if __name__ == '__main__':
orig_command_line = forking.get_command_line
forking.get_command_line = my_get_command_line
- main(sys.argv)
+ 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
+ from shlex import quote
+ mach_dir = os.path.abspath(os.path.dirname(__file__))
+ try:
+ # sys argv already contains the ./mach part, so we just need to pass it as-is
+ subprocess.Popen(['nix-shell', mach_dir + '/etc/shell.nix', '--run', ' '.join(map(quote, sys.argv))]).wait()
+ except KeyboardInterrupt:
+ sys.exit(0)
+ else:
+ main(sys.argv)
diff --git a/python/servo/bootstrap.py b/python/servo/bootstrap.py
index 9c94d7cfae9..21fcd967693 100644
--- a/python/servo/bootstrap.py
+++ b/python/servo/bootstrap.py
@@ -383,6 +383,7 @@ def get_linux_distribution():
'debian gnu/linux',
'fedora',
'void',
+ 'nixos',
]:
raise Exception('mach bootstrap does not support %s, please file a bug' % distrib)
@@ -398,6 +399,11 @@ def bootstrap(context, force=False, specific=None):
elif "linux-gnu" in host_triple():
distrib, version = get_linux_distribution()
+ if distrib.lower() == 'nixos':
+ print('NixOS does not need bootstrap')
+ print('just run ./mach build')
+ return
+
context.distro = distrib
context.distro_version = version
bootstrapper = LINUX_SPECIFIC_BOOTSTRAPPERS.get(specific, linux)