def run(self, params, debug=False, debugger=None): env = self.build_env() env["RUST_BACKTRACE"] = "1" args = [path.join("components", "servo", "target", "servo")] # Borrowed and modified from: # http://hg.mozilla.org/mozilla-central/file/c9cfa9b91dea/python/mozbuild/mozbuild/mach_commands.py#l883 if debug: import mozdebug if not debugger: # No debugger name was provided. Look for the default ones on # current OS. debugger = mozdebug.get_default_debugger_name( mozdebug.DebuggerSearch.KeepLooking) self.debuggerInfo = mozdebug.get_debugger_info(debugger) if not self.debuggerInfo: print("Could not find a suitable debugger in your PATH.") return 1 # Prepend the debugger args. args = ([self.debuggerInfo.path] + self.debuggerInfo.args + args + params) else: args = args + params subprocess.check_call(args, env=env)
def run(self, params, release=False, dev=False, debug=False, debugger=None): env = self.build_env() env["RUST_BACKTRACE"] = "1" args = [self.get_binary_path(release, dev)] # Borrowed and modified from: # http://hg.mozilla.org/mozilla-central/file/c9cfa9b91dea/python/mozbuild/mozbuild/mach_commands.py#l883 if debug: import mozdebug if not debugger: # No debugger name was provided. Look for the default ones on # current OS. debugger = mozdebug.get_default_debugger_name(mozdebug.DebuggerSearch.KeepLooking) self.debuggerInfo = mozdebug.get_debugger_info(debugger) if not self.debuggerInfo: print("Could not find a suitable debugger in your PATH.") return 1 # Prepend the debugger args. args = [self.debuggerInfo.path] + self.debuggerInfo.args + args + params else: args = args + params try: subprocess.check_call(args, env=env) except subprocess.CalledProcessError as e: print("Servo exited with return value %d" % e.returncode) return e.returncode except OSError as e: if e.errno == 2: print("Servo Binary can't be found! Run './mach build'" " and try again!") else: raise e
def run(self, params, release=False, debug=False, debugger=None): env = self.build_env() env["RUST_BACKTRACE"] = "1" args = [self.get_binary_path(release)] # Borrowed and modified from: # http://hg.mozilla.org/mozilla-central/file/c9cfa9b91dea/python/mozbuild/mozbuild/mach_commands.py#l883 if debug: import mozdebug if not debugger: # No debugger name was provided. Look for the default ones on # current OS. debugger = mozdebug.get_default_debugger_name( mozdebug.DebuggerSearch.KeepLooking) self.debuggerInfo = mozdebug.get_debugger_info(debugger) if not self.debuggerInfo: print("Could not find a suitable debugger in your PATH.") return 1 # Prepend the debugger args. args = ([self.debuggerInfo.path] + self.debuggerInfo.args + args + params) else: args = args + params try: subprocess.check_call(args, env=env) except OSError as e: if e.errno == 2: print("Servo Binary can't be found! Run './mach build'" " and try again!") else: raise e
def run(self, params, debug=False, debugger=None): env = self.build_env() env["RUST_BACKTRACE"] = "1" args = [path.join("target", "servo")] # Borrowed and modified from: # http://hg.mozilla.org/mozilla-central/file/c9cfa9b91dea/python/mozbuild/mozbuild/mach_commands.py#l883 if debug: import mozdebug if not debugger: # No debugger name was provided. Look for the default ones on # current OS. debugger = mozdebug.get_default_debugger_name( mozdebug.DebuggerSearch.KeepLooking) self.debuggerInfo = mozdebug.get_debugger_info(debugger) if not self.debuggerInfo: print("Could not find a suitable debugger in your PATH.") return 1 # Prepend the debugger args. args = ([self.debuggerInfo.path] + self.debuggerInfo.args + args + params) else: args = args + params subprocess.check_call(args, env=env)
def run(self, params, release=False, dev=False, android=False, debug=False, debugger=None): env = self.build_env() env["RUST_BACKTRACE"] = "1" if android: if debug: print("Android on-device debugging is not supported by mach yet. See") print("https://github.com/servo/servo/wiki/Building-for-Android#debugging-on-device") return script = [ "am force-stop com.mozilla.servo", "echo servo >/sdcard/servo/android_params" ] for param in params: script += [ "echo '%s' >>/sdcard/servo/android_params" % param.replace("'", "\\'") ] script += [ "am start com.mozilla.servo/com.mozilla.servo.MainActivity", "exit" ] shell = subprocess.Popen(["adb", "shell"], stdin=subprocess.PIPE) shell.communicate("\n".join(script) + "\n") return shell.wait() args = [self.get_binary_path(release, dev)] # Borrowed and modified from: # http://hg.mozilla.org/mozilla-central/file/c9cfa9b91dea/python/mozbuild/mozbuild/mach_commands.py#l883 if debug: import mozdebug if not debugger: # No debugger name was provided. Look for the default ones on # current OS. debugger = mozdebug.get_default_debugger_name( mozdebug.DebuggerSearch.KeepLooking) self.debuggerInfo = mozdebug.get_debugger_info(debugger) if not self.debuggerInfo: print("Could not find a suitable debugger in your PATH.") return 1 # Prepend the debugger args. args = ([self.debuggerInfo.path] + self.debuggerInfo.args + args + params) else: args = args + params try: subprocess.check_call(args, env=env) except subprocess.CalledProcessError as e: print("Servo exited with return value %d" % e.returncode) return e.returncode except OSError as e: if e.errno == 2: print("Servo Binary can't be found! Run './mach build'" " and try again!") else: raise e
def run(self, binary, params, debug, debugger, debugger_args): try: binpath = self.get_binary_path("geckodriver") except Exception as e: print( "It looks like geckodriver isn't built. " "Add ac_add_options --enable-geckodrver to your mozconfig ", "and run |mach build| to build it.") print(e) return 1 args = [binpath] if params: args.extend(params) if binary is None: binary = self.get_binary_path("app") args.extend(["--binary", binary]) if debug or debugger or debugger_args: if "INSIDE_EMACS" in os.environ: self.log_manager.terminal_handler.setLevel(logging.WARNING) import mozdebug if not debugger: # No debugger name was provided. Look for the default ones on # current OS. debugger = mozdebug.get_default_debugger_name( mozdebug.DebuggerSearch.KeepLooking) if debugger: self.debuggerInfo = mozdebug.get_debugger_info( debugger, debugger_args) if not self.debuggerInfo: print("Could not find a suitable debugger in your PATH.") return 1 # Parameters come from the CLI. We need to convert them before # their use. if debugger_args: from mozbuild import shellutil try: debugger_args = shellutil.split(debugger_args) except shellutil.MetaCharacterException as e: print( "The --debugger-args you passed require a real shell to parse them." ) print("(We can't handle the %r character.)" % e.char) return 1 # Prepend the debugger args. args = [self.debuggerInfo.path] + self.debuggerInfo.args + args return self.run_process(args=args, ensure_exit_code=False, pass_thru=True)
def debug(self, params, remote, background, debugger, debugparams, slowscript): # Parameters come from the CLI. We need to convert them before their use. if debugparams: import pymake.process argv, badchar = pymake.process.clinetoargv(debugparams, os.getcwd()) if badchar: print("The +debugparams you passed require a real shell to parse them.") print("(We can't handle the %r character.)" % (badchar,)) return 1 debugparams = argv; import mozdebug if not debugger: # No debugger name was provided. Look for the default ones on current OS. debugger = mozdebug.get_default_debugger_name(mozdebug.DebuggerSearch.KeepLooking) self.debuggerInfo = mozdebug.get_debugger_info(debugger, debugparams) # We could not find the information about the desired debugger. if not self.debuggerInfo: print("Could not find a suitable debugger in your PATH.") return 1 extra_env = { 'MOZ_CRASHREPORTER_DISABLE' : '1' } binpath = None try: binpath = self.get_binary_path('app') except Exception as e: print("It looks like your program isn't built.", "You can run |mach build| to build it.") print(e) return 1 # Build the list of arguments to pass to run_process args = [self.debuggerInfo.path] + self.debuggerInfo.args args.append(binpath) if not remote: args.append('-no-remote') if not background and sys.platform == 'darwin': args.append('-foreground') if params: args.extend(params) if '-profile' not in params and '-P' not in params: path = os.path.join(self.topobjdir, 'tmp', 'scratch_user') if not os.path.isdir(path): os.makedirs(path) args.append('-profile') args.append(path) if not slowscript: extra_env['JS_DISABLE_SLOW_SCRIPT_SIGNALS'] = '1' return self.run_process(args=args, append_env=extra_env, ensure_exit_code=False, pass_thru=True)
def run(self, params, release=False, dev=False, android=False, debug=False, debugger=None): env = self.build_env() env["RUST_BACKTRACE"] = "1" if android: if debug: print("Android on-device debugging is not supported by mach yet. See") print("https://github.com/servo/servo/wiki/Building-for-Android#debugging-on-device") return if params: url = params[0] else: url = 'http://mozilla.org/' subprocess.Popen(["adb", "shell"], stdin=subprocess.PIPE).communicate(''' am force-stop com.mozilla.servo export SERVO_URL='%s' am start com.mozilla.servo/com.mozilla.servo.MainActivity exit ''' % url.replace('\'', '\\\'')) return args = [self.get_binary_path(release, dev)] # Borrowed and modified from: # http://hg.mozilla.org/mozilla-central/file/c9cfa9b91dea/python/mozbuild/mozbuild/mach_commands.py#l883 if debug: import mozdebug if not debugger: # No debugger name was provided. Look for the default ones on # current OS. debugger = mozdebug.get_default_debugger_name( mozdebug.DebuggerSearch.KeepLooking) self.debuggerInfo = mozdebug.get_debugger_info(debugger) if not self.debuggerInfo: print("Could not find a suitable debugger in your PATH.") return 1 # Prepend the debugger args. args = ([self.debuggerInfo.path] + self.debuggerInfo.args + args + params) else: args = args + params try: subprocess.check_call(args, env=env) except subprocess.CalledProcessError as e: print("Servo exited with return value %d" % e.returncode) return e.returncode except OSError as e: if e.errno == 2: print("Servo Binary can't be found! Run './mach build'" " and try again!") else: raise e
def run(self, binary, params, debug, debugger, debugger_args): try: binpath = self.get_binary_path("geckodriver") except Exception as e: print("It looks like geckodriver isn't built. " "Add ac_add_options --enable-geckodrver to your mozconfig ", "and run |mach build| to build it.") print(e) return 1 args = [binpath] if params: args.extend(params) if binary is None: binary = self.get_binary_path("app") args.extend(["--binary", binary]) if debug or debugger or debugger_args: if "INSIDE_EMACS" in os.environ: self.log_manager.terminal_handler.setLevel(logging.WARNING) import mozdebug if not debugger: # No debugger name was provided. Look for the default ones on # current OS. debugger = mozdebug.get_default_debugger_name(mozdebug.DebuggerSearch.KeepLooking) if debugger: self.debuggerInfo = mozdebug.get_debugger_info(debugger, debugger_args) if not self.debuggerInfo: print("Could not find a suitable debugger in your PATH.") return 1 # Parameters come from the CLI. We need to convert them before # their use. if debugger_args: from mozbuild import shellutil try: debugger_args = shellutil.split(debugger_args) except shellutil.MetaCharacterException as e: print("The --debugger-args you passed require a real shell to parse them.") print("(We can't handle the %r character.)" % e.char) return 1 # Prepend the debugger args. args = [self.debuggerInfo.path] + self.debuggerInfo.args + args return self.run_process(args=args, ensure_exit_code=False, pass_thru=True)
def find_debugger_info(debug, debugger, debugger_args): debuggerInfo = None if debug or debugger or debugger_args: import mozdebug if not debugger: # No debugger name was provided. Look for the default ones on # current OS. debugger = mozdebug.get_default_debugger_name(mozdebug.DebuggerSearch.KeepLooking) debuggerInfo = None if debugger: debuggerInfo = mozdebug.get_debugger_info(debugger, debugger_args) if debuggerInfo is None: raise TalosError('Could not find a suitable debugger in your PATH.') return debuggerInfo
def prepend_debugger_args(self, args, debugger, debugger_args): """ Given an array with program arguments, prepend arguments to run it under a debugger. :param args: The executable and arguments used to run the process normally. :param debugger: The debugger to use, or empty to use the default debugger. :param debugger_args: Any additional parameters to pass to the debugger. """ import mozdebug if not debugger: # No debugger name was provided. Look for the default ones on # current OS. debugger = mozdebug.get_default_debugger_name(mozdebug.DebuggerSearch.KeepLooking) if debugger: debuggerInfo = mozdebug.get_debugger_info(debugger, debugger_args) if not debuggerInfo: print("Could not find a suitable debugger in your PATH.") return 1 # Parameters come from the CLI. We need to convert them before # their use. if debugger_args: import pymake.process argv, badchar = pymake.process.clinetoargv(debugger_args, os.getcwd()) if badchar: print("The --debugger_args you passed require a real shell to parse them.") print("(We can't handle the %r character.)" % (badchar,)) return 1 debugger_args = argv # Prepend the debugger args. args = [debuggerInfo.path] + debuggerInfo.args + args return args
def prepend_debugger_args(self, args, debugger, debugger_args): ''' Given an array with program arguments, prepend arguments to run it under a debugger. :param args: The executable and arguments used to run the process normally. :param debugger: The debugger to use, or empty to use the default debugger. :param debugger_args: Any additional parameters to pass to the debugger. ''' import mozdebug if not debugger: # No debugger name was provided. Look for the default ones on # current OS. debugger = mozdebug.get_default_debugger_name(mozdebug.DebuggerSearch.KeepLooking) if debugger: debuggerInfo = mozdebug.get_debugger_info(debugger, debugger_args) if not debuggerInfo: print("Could not find a suitable debugger in your PATH.") return 1 # Parameters come from the CLI. We need to convert them before # their use. if debugger_args: import pymake.process argv, badchar = pymake.process.clinetoargv(debugger_args, os.getcwd()) if badchar: print("The --debugger_args you passed require a real shell to parse them.") print("(We can't handle the %r character.)" % (badchar,)) return 1 debugger_args = argv; # Prepend the debugger args. args = [debuggerInfo.path] + debuggerInfo.args + args return args
def check_args(kwargs): set_from_config(kwargs) for test_paths in kwargs["test_paths"].itervalues(): if not ("tests_path" in test_paths and "metadata_path" in test_paths): print "Fatal: must specify both a test path and metadata path" sys.exit(1) for key, path in test_paths.iteritems(): name = key.split("_", 1)[0] if not os.path.exists(path): print "Fatal: %s path %s does not exist" % (name, path) sys.exit(1) if not os.path.isdir(path): print "Fatal: %s path %s is not a directory" % (name, path) sys.exit(1) if kwargs["product"] is None: kwargs["product"] = "firefox" if "sauce" in kwargs["product"]: kwargs["pause_after_test"] = False if kwargs["test_list"]: if kwargs["include"] is not None: kwargs["include"].extend(kwargs["test_list"]) else: kwargs["include"] = kwargs["test_list"] if kwargs["run_info"] is None: kwargs["run_info"] = kwargs["config_path"] if kwargs["this_chunk"] > 1: require_arg(kwargs, "total_chunks", lambda x: x >= kwargs["this_chunk"]) if kwargs["chunk_type"] is None: if kwargs["total_chunks"] > 1: kwargs["chunk_type"] = "dir_hash" else: kwargs["chunk_type"] = "none" if kwargs["processes"] is None: kwargs["processes"] = 1 if kwargs["debugger"] is not None: import mozdebug if kwargs["debugger"] == "__default__": kwargs["debugger"] = mozdebug.get_default_debugger_name() debug_info = mozdebug.get_debugger_info(kwargs["debugger"], kwargs["debugger_args"]) if debug_info and debug_info.interactive: if kwargs["processes"] != 1: kwargs["processes"] = 1 kwargs["no_capture_stdio"] = True kwargs["debug_info"] = debug_info else: kwargs["debug_info"] = None if kwargs["binary"] is not None: if not os.path.exists(kwargs["binary"]): print >> sys.stderr, "Binary path %s does not exist" % kwargs[ "binary"] sys.exit(1) if kwargs["ssl_type"] is None: if None not in (kwargs["ca_cert_path"], kwargs["host_cert_path"], kwargs["host_key_path"]): kwargs["ssl_type"] = "pregenerated" elif exe_path(kwargs["openssl_binary"]) is not None: kwargs["ssl_type"] = "openssl" else: kwargs["ssl_type"] = "none" if kwargs["ssl_type"] == "pregenerated": require_arg(kwargs, "ca_cert_path", lambda x: os.path.exists(x)) require_arg(kwargs, "host_cert_path", lambda x: os.path.exists(x)) require_arg(kwargs, "host_key_path", lambda x: os.path.exists(x)) elif kwargs["ssl_type"] == "openssl": path = exe_path(kwargs["openssl_binary"]) if path is None: print >> sys.stderr, "openssl-binary argument missing or not a valid executable" sys.exit(1) kwargs["openssl_binary"] = path if kwargs["ssl_type"] != "none" and kwargs["product"] == "firefox": path = exe_path(kwargs["certutil_binary"]) if path is None: print >> sys.stderr, "certutil-binary argument missing or not a valid executable" sys.exit(1) kwargs["certutil_binary"] = path if kwargs['extra_prefs']: missing = any('=' not in prefarg for prefarg in kwargs['extra_prefs']) if missing: print >> sys.stderr, "Preferences via --setpref must be in key=value format" sys.exit(1) kwargs['extra_prefs'] = [ tuple(prefarg.split('=', 1)) for prefarg in kwargs['extra_prefs'] ] return kwargs
def run(self, params, release=False, dev=False, android=None, debug=False, debugger=None, headless=False, software=False, bin=None, emulator=False, usb=False, nightly=None): env = self.build_env() env["RUST_BACKTRACE"] = "1" # Make --debugger imply --debug if debugger: debug = True if android is None: android = self.config["build"]["android"] if android: if debug: print("Android on-device debugging is not supported by mach yet. See") print("https://github.com/servo/servo/wiki/Building-for-Android#debugging-on-device") return script = [ "am force-stop org.mozilla.servo", ] json_params = shell_quote(json.dumps(params)) extra = "-e servoargs " + json_params rust_log = env.get("RUST_LOG", None) if rust_log: extra += " -e servolog " + rust_log script += [ "am start " + extra + " org.mozilla.servo/org.mozilla.servo.MainActivity", "sleep 0.5", "echo Servo PID: $(pidof org.mozilla.servo)", "exit" ] args = [self.android_adb_path(env)] if emulator and usb: print("Cannot run in both emulator and USB at the same time.") return 1 if emulator: args += ["-e"] if usb: args += ["-d"] shell = subprocess.Popen(args + ["shell"], stdin=subprocess.PIPE) shell.communicate("\n".join(script) + "\n") return shell.wait() args = [bin or self.get_nightly_binary_path(nightly) or self.get_binary_path(release, dev)] if headless: set_osmesa_env(args[0], env) args.append('-z') if software: if not is_linux(): print("Software rendering is only supported on Linux at the moment.") return env['LIBGL_ALWAYS_SOFTWARE'] = "1" # Borrowed and modified from: # http://hg.mozilla.org/mozilla-central/file/c9cfa9b91dea/python/mozbuild/mozbuild/mach_commands.py#l883 if debug: import mozdebug if not debugger: # No debugger name was provided. Look for the default ones on # current OS. debugger = mozdebug.get_default_debugger_name( mozdebug.DebuggerSearch.KeepLooking) self.debuggerInfo = mozdebug.get_debugger_info(debugger) if not self.debuggerInfo: print("Could not find a suitable debugger in your PATH.") return 1 command = self.debuggerInfo.path if debugger == 'gdb' or debugger == 'lldb': rustCommand = 'rust-' + debugger try: subprocess.check_call([rustCommand, '--version'], env=env, stdout=open(os.devnull, 'w')) except (OSError, subprocess.CalledProcessError): pass else: command = rustCommand # Prepend the debugger args. args = ([command] + self.debuggerInfo.args + args + params) else: args = args + params try: check_call(args, env=env) except subprocess.CalledProcessError as e: print("Servo exited with return value %d" % e.returncode) return e.returncode except OSError as e: if e.errno == 2: print("Servo Binary can't be found! Run './mach build'" " and try again!") else: raise e
def check_args(kwargs): set_from_config(kwargs) if kwargs["product"] is None: kwargs["product"] = "firefox" if "sauce" in kwargs["product"]: kwargs["pause_after_test"] = False if kwargs["test_list"]: if kwargs["include"] is not None: kwargs["include"].extend(kwargs["test_list"]) else: kwargs["include"] = kwargs["test_list"] if kwargs["run_info"] is None: kwargs["run_info"] = kwargs["config_path"] if kwargs["this_chunk"] > 1: require_arg(kwargs, "total_chunks", lambda x: x >= kwargs["this_chunk"]) if kwargs["chunk_type"] is None: if kwargs["total_chunks"] > 1: kwargs["chunk_type"] = "dir_hash" else: kwargs["chunk_type"] = "none" if kwargs["processes"] is None: kwargs["processes"] = 1 if kwargs["debugger"] is not None: import mozdebug if kwargs["debugger"] == "__default__": kwargs["debugger"] = mozdebug.get_default_debugger_name() debug_info = mozdebug.get_debugger_info(kwargs["debugger"], kwargs["debugger_args"]) if debug_info and debug_info.interactive: if kwargs["processes"] != 1: kwargs["processes"] = 1 kwargs["no_capture_stdio"] = True kwargs["debug_info"] = debug_info else: kwargs["debug_info"] = None if kwargs["binary"] is not None: if not os.path.exists(kwargs["binary"]): print >> sys.stderr, "Binary path %s does not exist" % kwargs["binary"] sys.exit(1) if kwargs["ssl_type"] is None: if None not in (kwargs["ca_cert_path"], kwargs["host_cert_path"], kwargs["host_key_path"]): kwargs["ssl_type"] = "pregenerated" elif exe_path(kwargs["openssl_binary"]) is not None: kwargs["ssl_type"] = "openssl" else: kwargs["ssl_type"] = "none" if kwargs["ssl_type"] == "pregenerated": require_arg(kwargs, "ca_cert_path", lambda x:os.path.exists(x)) require_arg(kwargs, "host_cert_path", lambda x:os.path.exists(x)) require_arg(kwargs, "host_key_path", lambda x:os.path.exists(x)) elif kwargs["ssl_type"] == "openssl": path = exe_path(kwargs["openssl_binary"]) if path is None: print >> sys.stderr, "openssl-binary argument missing or not a valid executable" sys.exit(1) kwargs["openssl_binary"] = path if kwargs["ssl_type"] != "none" and kwargs["product"] == "firefox" and kwargs["certutil_binary"]: path = exe_path(kwargs["certutil_binary"]) if path is None: print >> sys.stderr, "certutil-binary argument missing or not a valid executable" sys.exit(1) kwargs["certutil_binary"] = path if kwargs['extra_prefs']: missing = any('=' not in prefarg for prefarg in kwargs['extra_prefs']) if missing: print >> sys.stderr, "Preferences via --setpref must be in key=value format" sys.exit(1) kwargs['extra_prefs'] = [tuple(prefarg.split('=', 1)) for prefarg in kwargs['extra_prefs']] if kwargs["reftest_internal"] is None: # Default to the internal reftest implementation on Linux and OSX kwargs["reftest_internal"] = sys.platform.startswith("linux") or sys.platform.startswith("darwin") return kwargs
def run(self, params, release=False, dev=False, android=None, debug=False, debugger=None, browserhtml=False, headless=False, software=False): env = self.build_env() env["RUST_BACKTRACE"] = "1" # Make --debugger imply --debug if debugger: debug = True if android is None: android = self.config["build"]["android"] if android: if debug: print("Android on-device debugging is not supported by mach yet. See") print("https://github.com/servo/servo/wiki/Building-for-Android#debugging-on-device") return script = [ "am force-stop com.mozilla.servo", "echo servo >/sdcard/servo/android_params" ] for param in params: script += [ "echo '%s' >>/sdcard/servo/android_params" % param.replace("'", "\\'") ] script += [ "am start com.mozilla.servo/com.mozilla.servo.MainActivity", "exit" ] shell = subprocess.Popen(["adb", "shell"], stdin=subprocess.PIPE) shell.communicate("\n".join(script) + "\n") return shell.wait() args = [self.get_binary_path(release, dev)] if browserhtml: browserhtml_path = get_browserhtml_path(args[0]) if is_macosx(): # Enable borderless on OSX args = args + ['-b'] elif is_windows(): # Convert to a relative path to avoid mingw -> Windows path conversions browserhtml_path = path.relpath(browserhtml_path, os.getcwd()) args = args + ['--pref', 'dom.mozbrowser.enabled', '--pref', 'dom.forcetouch.enabled', '--pref', 'shell.builtin-key-shortcuts.enabled=false', path.join(browserhtml_path, 'index.html')] if headless: set_osmesa_env(args[0], env) args.append('-z') if software: if not is_linux(): print("Software rendering is only supported on Linux at the moment.") return env['LIBGL_ALWAYS_SOFTWARE'] = "1" # Borrowed and modified from: # http://hg.mozilla.org/mozilla-central/file/c9cfa9b91dea/python/mozbuild/mozbuild/mach_commands.py#l883 if debug: import mozdebug if not debugger: # No debugger name was provided. Look for the default ones on # current OS. debugger = mozdebug.get_default_debugger_name( mozdebug.DebuggerSearch.KeepLooking) self.debuggerInfo = mozdebug.get_debugger_info(debugger) if not self.debuggerInfo: print("Could not find a suitable debugger in your PATH.") return 1 command = self.debuggerInfo.path if debugger == 'gdb' or debugger == 'lldb': rustCommand = 'rust-' + debugger try: subprocess.check_call([rustCommand, '--version'], env=env, stdout=open(os.devnull, 'w')) except (OSError, subprocess.CalledProcessError): pass else: command = rustCommand # Prepend the debugger args. args = ([command] + self.debuggerInfo.args + args + params) else: args = args + params try: check_call(args, env=env) except subprocess.CalledProcessError as e: print("Servo exited with return value %d" % e.returncode) return e.returncode except OSError as e: if e.errno == 2: print("Servo Binary can't be found! Run './mach build'" " and try again!") else: raise e
def run(self, params, release=False, dev=False, android=None, debug=False, debugger=None, browserhtml=False): env = self.build_env() env["RUST_BACKTRACE"] = "1" if android is None: android = self.config["build"]["android"] if android: if debug: print("Android on-device debugging is not supported by mach yet. See") print("https://github.com/servo/servo/wiki/Building-for-Android#debugging-on-device") return script = [ "am force-stop com.mozilla.servo", "echo servo >/sdcard/servo/android_params" ] for param in params: script += [ "echo '%s' >>/sdcard/servo/android_params" % param.replace("'", "\\'") ] script += [ "am start com.mozilla.servo/com.mozilla.servo.MainActivity", "exit" ] shell = subprocess.Popen(["adb", "shell"], stdin=subprocess.PIPE) shell.communicate("\n".join(script) + "\n") return shell.wait() args = [self.get_binary_path(release, dev)] # Borrowed and modified from: # http://hg.mozilla.org/mozilla-central/file/c9cfa9b91dea/python/mozbuild/mozbuild/mach_commands.py#l883 if debug: import mozdebug if not debugger: # No debugger name was provided. Look for the default ones on # current OS. debugger = mozdebug.get_default_debugger_name( mozdebug.DebuggerSearch.KeepLooking) self.debuggerInfo = mozdebug.get_debugger_info(debugger) if not self.debuggerInfo: print("Could not find a suitable debugger in your PATH.") return 1 command = self.debuggerInfo.path if debugger == 'gdb' or debugger == 'lldb': rustCommand = 'rust-' + debugger try: subprocess.check_call([rustCommand, '--version'], env=env, stdout=open(os.devnull, 'w')) except (OSError, subprocess.CalledProcessError): pass else: command = rustCommand # Prepend the debugger args. args = ([command] + self.debuggerInfo.args + args + params) elif browserhtml: browserhtml_path = find_dep_path_newest('browserhtml', args[0]) if browserhtml_path is None: print("Could not find browserhtml package; perhaps you haven't built Servo.") return 1 args = args + ['-w', '-b', '--pref', 'dom.mozbrowser.enabled', path.join(browserhtml_path, 'out', 'index.html')] args = args + params else: args = args + params try: check_call(args, env=env) except subprocess.CalledProcessError as e: print("Servo exited with return value %d" % e.returncode) return e.returncode except OSError as e: if e.errno == 2: print("Servo Binary can't be found! Run './mach build'" " and try again!") else: raise e
def check_args(kwargs): set_from_config(kwargs) if kwargs["product"] is None: kwargs["product"] = "firefox" if kwargs["manifest_update"] is None: kwargs["manifest_update"] = True if "sauce" in kwargs["product"]: kwargs["pause_after_test"] = False if kwargs["test_list"]: if kwargs["include"] is not None: kwargs["include"].extend(kwargs["test_list"]) else: kwargs["include"] = kwargs["test_list"] if kwargs["run_info"] is None: kwargs["run_info"] = kwargs["config_path"] if kwargs["this_chunk"] > 1: require_arg(kwargs, "total_chunks", lambda x: x >= kwargs["this_chunk"]) if kwargs["chunk_type"] is None: if kwargs["total_chunks"] > 1: kwargs["chunk_type"] = "dir_hash" else: kwargs["chunk_type"] = "none" if kwargs["test_groups_file"] is not None: if kwargs["run_by_dir"] is not False: print("Can't pass --test-groups and --run-by-dir") sys.exit(1) if not os.path.exists(kwargs["test_groups_file"]): print("--test-groups file %s not found" % kwargs["test_groups_file"]) sys.exit(1) if kwargs["processes"] is None: kwargs["processes"] = 1 if kwargs["debugger"] is not None: import mozdebug if kwargs["debugger"] == "__default__": kwargs["debugger"] = mozdebug.get_default_debugger_name() debug_info = mozdebug.get_debugger_info(kwargs["debugger"], kwargs["debugger_args"]) if debug_info and debug_info.interactive: if kwargs["processes"] != 1: kwargs["processes"] = 1 kwargs["no_capture_stdio"] = True kwargs["debug_info"] = debug_info else: kwargs["debug_info"] = None if kwargs["binary"] is not None: if not os.path.exists(kwargs["binary"]): print("Binary path %s does not exist" % kwargs["binary"], file=sys.stderr) sys.exit(1) if kwargs["ssl_type"] is None: if None not in (kwargs["ca_cert_path"], kwargs["host_cert_path"], kwargs["host_key_path"]): kwargs["ssl_type"] = "pregenerated" elif exe_path(kwargs["openssl_binary"]) is not None: kwargs["ssl_type"] = "openssl" else: kwargs["ssl_type"] = "none" if kwargs["ssl_type"] == "pregenerated": require_arg(kwargs, "ca_cert_path", lambda x: os.path.exists(x)) require_arg(kwargs, "host_cert_path", lambda x: os.path.exists(x)) require_arg(kwargs, "host_key_path", lambda x: os.path.exists(x)) elif kwargs["ssl_type"] == "openssl": path = exe_path(kwargs["openssl_binary"]) if path is None: print("openssl-binary argument missing or not a valid executable", file=sys.stderr) sys.exit(1) kwargs["openssl_binary"] = path if kwargs["ssl_type"] != "none" and kwargs[ "product"] == "firefox" and kwargs["certutil_binary"]: path = exe_path(kwargs["certutil_binary"]) if path is None: print("certutil-binary argument missing or not a valid executable", file=sys.stderr) sys.exit(1) kwargs["certutil_binary"] = path if kwargs['extra_prefs']: missing = any('=' not in prefarg for prefarg in kwargs['extra_prefs']) if missing: print("Preferences via --setpref must be in key=value format", file=sys.stderr) sys.exit(1) kwargs['extra_prefs'] = [ tuple(prefarg.split('=', 1)) for prefarg in kwargs['extra_prefs'] ] if kwargs["reftest_internal"] is None: kwargs["reftest_internal"] = True if kwargs["reftest_screenshot"] is None: kwargs["reftest_screenshot"] = "unexpected" if not kwargs[ "debug_test"] else "always" if kwargs["enable_webrender"] is None: kwargs["enable_webrender"] = False if kwargs["preload_browser"] is None: # Default to preloading a gecko instance if we're only running a single process kwargs["preload_browser"] = kwargs["processes"] == 1 return kwargs
def run(self, params, release=False, dev=False, android=None, debug=False, debugger=None, headless=False, software=False, bin=None, emulator=False, usb=False, nightly=None): env = self.build_env() env["RUST_BACKTRACE"] = "1" # Make --debugger imply --debug if debugger: debug = True if android is None: android = self.config["build"]["android"] if android: if debug: print( "Android on-device debugging is not supported by mach yet. See" ) print( "https://github.com/servo/servo/wiki/Building-for-Android#debugging-on-device" ) return script = [ "am force-stop org.mozilla.servo", ] json_params = shell_quote(json.dumps(params)) extra = "-e servoargs " + json_params rust_log = env.get("RUST_LOG", None) if rust_log: extra += " -e servolog " + rust_log script += [ "am start " + extra + " org.mozilla.servo/org.mozilla.servo.MainActivity", "sleep 0.5", "echo Servo PID: $(pidof org.mozilla.servo)", "exit" ] args = [self.android_adb_path(env)] if emulator and usb: print("Cannot run in both emulator and USB at the same time.") return 1 if emulator: args += ["-e"] if usb: args += ["-d"] shell = subprocess.Popen(args + ["shell"], stdin=subprocess.PIPE) shell.communicate("\n".join(script) + "\n") return shell.wait() args = [ bin or self.get_nightly_binary_path(nightly) or self.get_binary_path(release, dev) ] if headless: set_osmesa_env(args[0], env) args.append('-z') if software: if not is_linux(): print( "Software rendering is only supported on Linux at the moment." ) return env['LIBGL_ALWAYS_SOFTWARE'] = "1" # Borrowed and modified from: # http://hg.mozilla.org/mozilla-central/file/c9cfa9b91dea/python/mozbuild/mozbuild/mach_commands.py#l883 if debug: import mozdebug if not debugger: # No debugger name was provided. Look for the default ones on # current OS. debugger = mozdebug.get_default_debugger_name( mozdebug.DebuggerSearch.KeepLooking) self.debuggerInfo = mozdebug.get_debugger_info(debugger) if not self.debuggerInfo: print("Could not find a suitable debugger in your PATH.") return 1 command = self.debuggerInfo.path if debugger == 'gdb' or debugger == 'lldb': rustCommand = 'rust-' + debugger try: subprocess.check_call([rustCommand, '--version'], env=env, stdout=open(os.devnull, 'w')) except (OSError, subprocess.CalledProcessError): pass else: command = rustCommand # Prepend the debugger args. args = ([command] + self.debuggerInfo.args + args + params) else: args = args + params try: check_call(args, env=env) except subprocess.CalledProcessError as e: print("Servo exited with return value %d" % e.returncode) return e.returncode except OSError as e: if e.errno == 2: print("Servo Binary can't be found! Run './mach build'" " and try again!") else: raise e
def run(self, params, remote, background, noprofile, debug, debugger, debugparams, slowscript, dmd, mode, sample_below, max_frames, show_dump_stats): try: binpath = self.get_binary_path('app') except Exception as e: print("It looks like your program isn't built.", "You can run |mach build| to build it.") print(e) return 1 args = [binpath] if params: args.extend(params) if not remote: args.append('-no-remote') if not background and sys.platform == 'darwin': args.append('-foreground') no_profile_option_given = \ all(p not in params for p in ['-profile', '--profile', '-P']) if no_profile_option_given and not noprofile: path = os.path.join(self.topobjdir, 'tmp', 'scratch_user') if not os.path.isdir(path): os.makedirs(path) args.append('-profile') args.append(path) extra_env = {} if debug or debugger or debugparams: import mozdebug if not debugger: # No debugger name was provided. Look for the default ones on # current OS. debugger = mozdebug.get_default_debugger_name(mozdebug.DebuggerSearch.KeepLooking) if debugger: self.debuggerInfo = mozdebug.get_debugger_info(debugger, debugparams) if not self.debuggerInfo: print("Could not find a suitable debugger in your PATH.") return 1 # Parameters come from the CLI. We need to convert them before # their use. if debugparams: import pymake.process argv, badchar = pymake.process.clinetoargv(debugparams, os.getcwd()) if badchar: print("The --debugparams you passed require a real shell to parse them.") print("(We can't handle the %r character.)" % (badchar,)) return 1 debugparams = argv; if not slowscript: extra_env['JS_DISABLE_SLOW_SCRIPT_SIGNALS'] = '1' extra_env['MOZ_CRASHREPORTER_DISABLE'] = '1' # Prepend the debugger args. args = [self.debuggerInfo.path] + self.debuggerInfo.args + args if dmd: dmd_params = [] if mode: dmd_params.append('--mode=' + mode) if sample_below: dmd_params.append('--sample-below=' + sample_below) if max_frames: dmd_params.append('--max-frames=' + max_frames) if show_dump_stats: dmd_params.append('--show-dump-stats=yes') bin_dir = os.path.dirname(binpath) lib_name = self.substs['DLL_PREFIX'] + 'dmd' + self.substs['DLL_SUFFIX'] dmd_lib = os.path.join(bin_dir, lib_name) if not os.path.exists(dmd_lib): print("Please build with |--enable-dmd| to use DMD.") return 1 env_vars = { "Darwin": { "DYLD_INSERT_LIBRARIES": dmd_lib, "LD_LIBRARY_PATH": bin_dir, }, "Linux": { "LD_PRELOAD": dmd_lib, "LD_LIBRARY_PATH": bin_dir, }, "WINNT": { "MOZ_REPLACE_MALLOC_LIB": dmd_lib, }, } arch = self.substs['OS_ARCH'] if dmd_params: env_vars[arch]["DMD"] = " ".join(dmd_params) extra_env.update(env_vars.get(arch, {})) return self.run_process(args=args, ensure_exit_code=False, pass_thru=True, append_env=extra_env)
def check_args(kwargs): set_from_config(kwargs) if kwargs["product"] is None: kwargs["product"] = "firefox" if kwargs["manifest_update"] is None: kwargs["manifest_update"] = True if "sauce" in kwargs["product"]: kwargs["pause_after_test"] = False if kwargs["test_list"]: if kwargs["include"] is not None: kwargs["include"].extend(kwargs["test_list"]) else: kwargs["include"] = kwargs["test_list"] if kwargs["run_info"] is None: kwargs["run_info"] = kwargs["config_path"] if kwargs["this_chunk"] > 1: require_arg(kwargs, "total_chunks", lambda x: x >= kwargs["this_chunk"]) if kwargs["chunk_type"] is None: if kwargs["total_chunks"] > 1: kwargs["chunk_type"] = "dir_hash" else: kwargs["chunk_type"] = "none" if kwargs["processes"] is None: kwargs["processes"] = 1 if kwargs["debugger"] is not None: import mozdebug if kwargs["debugger"] == "__default__": kwargs["debugger"] = mozdebug.get_default_debugger_name() debug_info = mozdebug.get_debugger_info(kwargs["debugger"], kwargs["debugger_args"]) if debug_info and debug_info.interactive: if kwargs["processes"] != 1: kwargs["processes"] = 1 kwargs["no_capture_stdio"] = True kwargs["debug_info"] = debug_info else: kwargs["debug_info"] = None if kwargs["binary"] is not None: if not os.path.exists(kwargs["binary"]): print >> sys.stderr, "Binary path %s does not exist" % kwargs[ "binary"] sys.exit(1) if kwargs["ssl_type"] is None: if None not in (kwargs["ca_cert_path"], kwargs["host_cert_path"], kwargs["host_key_path"]): kwargs["ssl_type"] = "pregenerated" elif exe_path(kwargs["openssl_binary"]) is not None: kwargs["ssl_type"] = "openssl" else: kwargs["ssl_type"] = "none" if kwargs["ssl_type"] == "pregenerated": require_arg(kwargs, "ca_cert_path", lambda x: os.path.exists(x)) require_arg(kwargs, "host_cert_path", lambda x: os.path.exists(x)) require_arg(kwargs, "host_key_path", lambda x: os.path.exists(x)) elif kwargs["ssl_type"] == "openssl": path = exe_path(kwargs["openssl_binary"]) if path is None: print >> sys.stderr, "openssl-binary argument missing or not a valid executable" sys.exit(1) kwargs["openssl_binary"] = path if kwargs["ssl_type"] != "none" and kwargs[ "product"] == "firefox" and kwargs["certutil_binary"]: path = exe_path(kwargs["certutil_binary"]) if path is None: print >> sys.stderr, "certutil-binary argument missing or not a valid executable" sys.exit(1) kwargs["certutil_binary"] = path if kwargs['extra_prefs']: # If a single pref is passed in as a string, make it a list if type(kwargs['extra_prefs']) in (str, unicode): kwargs['extra_prefs'] = [kwargs['extra_prefs']] missing = any('=' not in prefarg for prefarg in kwargs['extra_prefs']) if missing: print >> sys.stderr, "Preferences via --setpref must be in key=value format" sys.exit(1) kwargs['extra_prefs'] = [ tuple(prefarg.split('=', 1)) for prefarg in kwargs['extra_prefs'] ] if kwargs["reftest_internal"] is None: kwargs["reftest_internal"] = True if kwargs["lsan_dir"] is None: kwargs["lsan_dir"] = kwargs["prefs_root"] if kwargs["reftest_screenshot"] is None: kwargs["reftest_screenshot"] = "unexpected" return kwargs
def run(self, params, release=False, dev=False, android=None, debug=False, debugger=None, browserhtml=False, headless=False): env = self.build_env() env["RUST_BACKTRACE"] = "1" # Make --debugger imply --debug if debugger: debug = True if android is None: android = self.config["build"]["android"] if android: if debug: print( "Android on-device debugging is not supported by mach yet. See" ) print( "https://github.com/servo/servo/wiki/Building-for-Android#debugging-on-device" ) return script = [ "am force-stop com.mozilla.servo", "echo servo >/sdcard/servo/android_params" ] for param in params: script += [ "echo '%s' >>/sdcard/servo/android_params" % param.replace("'", "\\'") ] script += [ "am start com.mozilla.servo/com.mozilla.servo.MainActivity", "exit" ] shell = subprocess.Popen(["adb", "shell"], stdin=subprocess.PIPE) shell.communicate("\n".join(script) + "\n") return shell.wait() args = [self.get_binary_path(release, dev)] if browserhtml: browserhtml_path = get_browserhtml_path('browserhtml', args[0]) if is_macosx(): # Enable borderless on OSX args = args + ['-b'] elif is_windows(): # Convert to a relative path to avoid mingw -> Windows path conversions browserhtml_path = path.relpath(browserhtml_path, os.getcwd()) args = args + [ '--pref', 'dom.mozbrowser.enabled', '--pref', 'dom.forcetouch.enabled', '--pref', 'shell.builtin-key-shortcuts.enabled=false', path.join(browserhtml_path, 'out', 'index.html') ] if headless: set_osmesa_env(args[0], env) args.append('-z') # Borrowed and modified from: # http://hg.mozilla.org/mozilla-central/file/c9cfa9b91dea/python/mozbuild/mozbuild/mach_commands.py#l883 if debug: import mozdebug if not debugger: # No debugger name was provided. Look for the default ones on # current OS. debugger = mozdebug.get_default_debugger_name( mozdebug.DebuggerSearch.KeepLooking) self.debuggerInfo = mozdebug.get_debugger_info(debugger) if not self.debuggerInfo: print("Could not find a suitable debugger in your PATH.") return 1 command = self.debuggerInfo.path if debugger == 'gdb' or debugger == 'lldb': rustCommand = 'rust-' + debugger try: subprocess.check_call([rustCommand, '--version'], env=env, stdout=open(os.devnull, 'w')) except (OSError, subprocess.CalledProcessError): pass else: command = rustCommand # Prepend the debugger args. args = ([command] + self.debuggerInfo.args + args + params) else: args = args + params try: check_call(args, env=env) except subprocess.CalledProcessError as e: print("Servo exited with return value %d" % e.returncode) return e.returncode except OSError as e: if e.errno == 2: print("Servo Binary can't be found! Run './mach build'" " and try again!") else: raise e
def check_args(kwargs): set_from_config(kwargs) if kwargs["product"] is None: kwargs["product"] = "firefox" if kwargs["manifest_update"] is None: kwargs["manifest_update"] = True if "sauce" in kwargs["product"]: kwargs["pause_after_test"] = False if kwargs["test_list"]: if kwargs["include"] is not None: kwargs["include"].extend(kwargs["test_list"]) else: kwargs["include"] = kwargs["test_list"] if kwargs["run_info"] is None: kwargs["run_info"] = kwargs["config_path"] if kwargs["this_chunk"] > 1: require_arg(kwargs, "total_chunks", lambda x: x >= kwargs["this_chunk"]) if kwargs["chunk_type"] is None: if kwargs["total_chunks"] > 1: kwargs["chunk_type"] = "dir_hash" else: kwargs["chunk_type"] = "none" if kwargs["processes"] is None: kwargs["processes"] = 1 if kwargs["debugger"] is not None: import mozdebug if kwargs["debugger"] == "__default__": kwargs["debugger"] = mozdebug.get_default_debugger_name() debug_info = mozdebug.get_debugger_info(kwargs["debugger"], kwargs["debugger_args"]) if debug_info and debug_info.interactive: if kwargs["processes"] != 1: kwargs["processes"] = 1 kwargs["no_capture_stdio"] = True kwargs["debug_info"] = debug_info else: kwargs["debug_info"] = None if kwargs["binary"] is not None: if not os.path.exists(kwargs["binary"]): print("Binary path %s does not exist" % kwargs["binary"], file=sys.stderr) sys.exit(1) if kwargs["ssl_type"] is None: if None not in (kwargs["ca_cert_path"], kwargs["host_cert_path"], kwargs["host_key_path"]): kwargs["ssl_type"] = "pregenerated" elif exe_path(kwargs["openssl_binary"]) is not None: kwargs["ssl_type"] = "openssl" else: kwargs["ssl_type"] = "none" if kwargs["ssl_type"] == "pregenerated": require_arg(kwargs, "ca_cert_path", lambda x:os.path.exists(x)) require_arg(kwargs, "host_cert_path", lambda x:os.path.exists(x)) require_arg(kwargs, "host_key_path", lambda x:os.path.exists(x)) elif kwargs["ssl_type"] == "openssl": path = exe_path(kwargs["openssl_binary"]) if path is None: print("openssl-binary argument missing or not a valid executable", file=sys.stderr) sys.exit(1) kwargs["openssl_binary"] = path if kwargs["ssl_type"] != "none" and kwargs["product"] == "firefox" and kwargs["certutil_binary"]: path = exe_path(kwargs["certutil_binary"]) if path is None: print("certutil-binary argument missing or not a valid executable", file=sys.stderr) sys.exit(1) kwargs["certutil_binary"] = path if kwargs['extra_prefs']: # If a single pref is passed in as a string, make it a list if type(kwargs['extra_prefs']) in (str, unicode): kwargs['extra_prefs'] = [kwargs['extra_prefs']] missing = any('=' not in prefarg for prefarg in kwargs['extra_prefs']) if missing: print("Preferences via --setpref must be in key=value format", file=sys.stderr) sys.exit(1) kwargs['extra_prefs'] = [tuple(prefarg.split('=', 1)) for prefarg in kwargs['extra_prefs']] if kwargs["reftest_internal"] is None: kwargs["reftest_internal"] = True if kwargs["lsan_dir"] is None: kwargs["lsan_dir"] = kwargs["prefs_root"] if kwargs["reftest_screenshot"] is None: kwargs["reftest_screenshot"] = "unexpected" return kwargs
def check_args(kwargs): set_from_config(kwargs) for test_paths in kwargs["test_paths"].itervalues(): if not ("tests_path" in test_paths and "metadata_path" in test_paths): print "Fatal: must specify both a test path and metadata path" sys.exit(1) for key, path in test_paths.iteritems(): name = key.split("_", 1)[0] if not os.path.exists(path): print "Fatal: %s path %s does not exist" % (name, path) sys.exit(1) if not os.path.isdir(path): print "Fatal: %s path %s is not a directory" % (name, path) sys.exit(1) if kwargs["product"] is None: kwargs["product"] = "firefox" if kwargs["test_list"]: if kwargs["include"] is not None: kwargs["include"].extend(kwargs["test_list"]) else: kwargs["include"] = kwargs["test_list"] if kwargs["run_info"] is None: kwargs["run_info"] = kwargs["config_path"] if kwargs["this_chunk"] > 1: require_arg(kwargs, "total_chunks", lambda x: x >= kwargs["this_chunk"]) if kwargs["chunk_type"] is None: if kwargs["total_chunks"] > 1: kwargs["chunk_type"] = "equal_time" else: kwargs["chunk_type"] = "none" if kwargs["processes"] is None: kwargs["processes"] = 1 if kwargs["debugger"] is not None: import mozdebug if kwargs["debugger"] == "__default__": kwargs["debugger"] = mozdebug.get_default_debugger_name() debug_info = mozdebug.get_debugger_info(kwargs["debugger"], kwargs["debugger_args"]) if debug_info and debug_info.interactive: if kwargs["processes"] != 1: kwargs["processes"] = 1 kwargs["no_capture_stdio"] = True kwargs["debug_info"] = debug_info else: kwargs["debug_info"] = None if kwargs["binary"] is not None: if not os.path.exists(kwargs["binary"]): print >> sys.stderr, "Binary path %s does not exist" % kwargs["binary"] sys.exit(1) if kwargs["ssl_type"] is None: if None not in (kwargs["ca_cert_path"], kwargs["host_cert_path"], kwargs["host_key_path"]): kwargs["ssl_type"] = "pregenerated" elif exe_path(kwargs["openssl_binary"]) is not None: kwargs["ssl_type"] = "openssl" else: kwargs["ssl_type"] = "none" if kwargs["ssl_type"] == "pregenerated": require_arg(kwargs, "ca_cert_path", lambda x:os.path.exists(x)) require_arg(kwargs, "host_cert_path", lambda x:os.path.exists(x)) require_arg(kwargs, "host_key_path", lambda x:os.path.exists(x)) elif kwargs["ssl_type"] == "openssl": path = exe_path(kwargs["openssl_binary"]) if path is None: print >> sys.stderr, "openssl-binary argument missing or not a valid executable" sys.exit(1) kwargs["openssl_binary"] = path if kwargs["ssl_type"] != "none" and kwargs["product"] == "firefox": path = exe_path(kwargs["certutil_binary"]) if path is None: print >> sys.stderr, "certutil-binary argument missing or not a valid executable" sys.exit(1) kwargs["certutil_binary"] = path return kwargs
def run(self, params, release=False, dev=False, android=False, debug=False, debugger=None): env = self.build_env() env["RUST_BACKTRACE"] = "1" if android: if debug: print("Android on-device debugging is not supported by mach yet. See") print("https://github.com/servo/servo/wiki/Building-for-Android#debugging-on-device") return script = [ "am force-stop com.mozilla.servo", "echo servo >/sdcard/servo/android_params" ] for param in params: script += [ "echo '%s' >>/sdcard/servo/android_params" % param.replace("'", "\\'") ] script += [ "am start com.mozilla.servo/com.mozilla.servo.MainActivity", "exit" ] shell = subprocess.Popen(["adb", "shell"], stdin=subprocess.PIPE) shell.communicate("\n".join(script) + "\n") return shell.wait() args = [self.get_binary_path(release, dev)] # Borrowed and modified from: # http://hg.mozilla.org/mozilla-central/file/c9cfa9b91dea/python/mozbuild/mozbuild/mach_commands.py#l883 if debug: import mozdebug if not debugger: # No debugger name was provided. Look for the default ones on # current OS. debugger = mozdebug.get_default_debugger_name( mozdebug.DebuggerSearch.KeepLooking) self.debuggerInfo = mozdebug.get_debugger_info(debugger) if not self.debuggerInfo: print("Could not find a suitable debugger in your PATH.") return 1 command = self.debuggerInfo.path if debugger == 'gdb' or debugger == 'lldb': rustCommand = 'rust-' + debugger try: subprocess.check_call([rustCommand, '--version'], env=env, stdout=open(os.devnull, 'w')) command = rustCommand except (OSError, subprocess.CalledProcessError): pass # Prepend the debugger args. args = ([command] + self.debuggerInfo.args + args + params) else: args = args + params try: subprocess.check_call(args, env=env) except subprocess.CalledProcessError as e: print("Servo exited with return value %d" % e.returncode) return e.returncode except OSError as e: if e.errno == 2: print("Servo Binary can't be found! Run './mach build'" " and try again!") else: raise e