From ff853e0d4add97b78515c58d80c7c9b2f69056b8 Mon Sep 17 00:00:00 2001 From: Brandon Fairchild Date: Wed, 2 Dec 2015 23:40:31 -0500 Subject: [PATCH 1/2] Allow `./mach build` to enable Servo's headless mode As mentioned in #7512 and #7637, the environment variable SERVO_HEADLESS enables building the OSMesa version of Servo when it is set to 1. Instead, this should be a command line option to mach's build command. Fixes #7637. --- python/servo/build_commands.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/python/servo/build_commands.py b/python/servo/build_commands.py index c2f7381e7ac..3e4237a52da 100644 --- a/python/servo/build_commands.py +++ b/python/servo/build_commands.py @@ -134,6 +134,10 @@ class MachCommands(CommandBase): @CommandArgument('--dev', '-d', action='store_true', help='Build in development mode') + @CommandArgument('--headless', + default=None, + action='store_true', + help='Enable headless mode (OSMesa)') @CommandArgument('--jobs', '-j', default=None, help='Number of jobs to run in parallel') @@ -155,7 +159,7 @@ class MachCommands(CommandBase): @CommandArgument('params', nargs='...', help="Command-line arguments to be passed through to Cargo") def build(self, target=None, release=False, dev=False, jobs=None, - features=None, android=None, verbose=False, debug_mozjs=False, params=None): + features=None, headless=False, android=None, verbose=False, debug_mozjs=False, params=None): if android is None: android = self.config["build"]["android"] features = features or [] @@ -203,9 +207,13 @@ class MachCommands(CommandBase): if debug_mozjs or self.config["build"]["debug-mozjs"]: features += ["script/debugmozjs"] - if is_headless_build(): - opts += ["--no-default-features"] - features += ["headless"] + if headless or is_headless_build(): + if sys.platform.startswith("linux"): + opts += ["--no-default-features"] + features += ["headless"] + else: + print("Headless mode (OSMesa) is not supported on your platform.") + print("Building without headless mode.") if android: features += ["android_glue"] From 2342b1bc6f068cc70302c26a7c06d72a31ca0f91 Mon Sep 17 00:00:00 2001 From: Brandon Fairchild Date: Thu, 3 Dec 2015 00:39:33 -0500 Subject: [PATCH 2/2] Allow `./mach build-tests` to enable Servo's headless mode This allows mach's build-tests command to use the option --headless instead of checking for the value of SERVO_HEADLESS. --- python/servo/build_commands.py | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/python/servo/build_commands.py b/python/servo/build_commands.py index 3e4237a52da..145b2eb8a1c 100644 --- a/python/servo/build_commands.py +++ b/python/servo/build_commands.py @@ -29,6 +29,16 @@ def is_headless_build(): return int(os.getenv('SERVO_HEADLESS', 0)) == 1 +def headless_supported(): + supported = sys.platform.startswith("linux") + + if not supported: + print("Headless mode (OSMesa) is not supported on your platform.") + print("Building without headless mode.") + + return supported + + def notify_linux(title, text): try: import dbus @@ -207,13 +217,9 @@ class MachCommands(CommandBase): if debug_mozjs or self.config["build"]["debug-mozjs"]: features += ["script/debugmozjs"] - if headless or is_headless_build(): - if sys.platform.startswith("linux"): - opts += ["--no-default-features"] - features += ["headless"] - else: - print("Headless mode (OSMesa) is not supported on your platform.") - print("Building without headless mode.") + if (headless or is_headless_build()) and headless_supported(): + opts += ["--no-default-features"] + features += ["headless"] if android: features += ["android_glue"] @@ -332,15 +338,19 @@ class MachCommands(CommandBase): @Command('build-tests', description='Build the Servo test suites', category='build') + @CommandArgument('--headless', + default=None, + action='store_true', + help='Enable headless mode (OSMesa)') @CommandArgument('--jobs', '-j', default=None, help='Number of jobs to run in parallel') @CommandArgument('--release', default=False, action="store_true", help="Build tests with release mode") - def build_tests(self, jobs=None, verbose=False, release=False): + def build_tests(self, headless=False, jobs=None, verbose=False, release=False): self.ensure_bootstrapped() args = ["cargo", "test", "--no-run"] - if is_headless_build(): + if (headless or is_headless_build()) and headless_supported(): args += ["--no-default-features", "--features", "headless"] if release: args += ["--release"]