зеркало из https://github.com/mozilla/gecko-dev.git
87 строки
3.2 KiB
Python
87 строки
3.2 KiB
Python
|
import argparse
|
||
|
import os
|
||
|
|
||
|
from mozbuild.base import (
|
||
|
MachCommandBase
|
||
|
)
|
||
|
|
||
|
from mach.decorators import (
|
||
|
CommandArgument,
|
||
|
CommandArgumentGroup,
|
||
|
CommandProvider,
|
||
|
Command,
|
||
|
)
|
||
|
|
||
|
|
||
|
@CommandProvider
|
||
|
class RunGeckodriver(MachCommandBase):
|
||
|
"""Run the compiled program."""
|
||
|
|
||
|
@Command('geckodriver', category='post-build',
|
||
|
description='Run the geckodriver WebDriver implementation')
|
||
|
@CommandArgument('--binary', type=str,
|
||
|
help='Firefox binary (defaults to the local build).')
|
||
|
@CommandArgument('params', nargs='...',
|
||
|
help='Command-line arguments to be passed through to the program.')
|
||
|
|
||
|
@CommandArgumentGroup('debugging')
|
||
|
@CommandArgument('--debug', action='store_true', group='debugging',
|
||
|
help='Enable the debugger. Not specifying a --debugger option will result in the default debugger being used.')
|
||
|
@CommandArgument('--debugger', default=None, type=str, group='debugging',
|
||
|
help='Name of debugger to use.')
|
||
|
@CommandArgument('--debugger-args', default=None, metavar='params', type=str,
|
||
|
group='debugging',
|
||
|
help='Command-line arguments to pass to the debugger itself; split as the Bourne shell would.')
|
||
|
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)
|