395c043e12832eb67c676c94c5751e9e174992de
[WebKit.git] / Tools / Scripts / webkitpy / minibrowser / run_webkit_app.py
1 # pylint: disable=E1103
2 # Copyright (C) 2020 Igalia S.L.
3 #
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this program; if not, write to the
16 # Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
17 # Boston, MA 02110-1301, USA.
18
19 from __future__ import print_function
20 import argparse
21 import os
22 import sys
23 import traceback
24
25 from webkitpy.common.host import Host
26 from webkitpy.port import configuration_options, platform_options, factory
27
28
29 def main(argv):
30     option_parser = argparse.ArgumentParser(usage="%(prog)s [options] [url]", add_help=False)
31     groups = [("Platform options", platform_options()), ("Configuration options", configuration_options())]
32
33     # Convert options to argparse, so that we can use parse_known_args() which is not supported in optparse.
34     # FIXME: Globally migrate to argparse. https://bugs.webkit.org/show_bug.cgi?id=213463
35     for group_name, group_options in groups:
36         option_group = option_parser.add_argument_group(group_name)
37
38         for option in group_options:
39             # Skip deprecated option
40             if option.dest == "configuration":
41                 continue
42             default = None
43             if option.default != ("NO", "DEFAULT"):
44                 default = option.default
45             option_group.add_argument(option.get_opt_string(), action=option.action, dest=option.dest,
46                                       help=option.help, const=option.const, default=default)
47
48     options, args = option_parser.parse_known_args(argv)
49
50     if set(args).issubset(["-h", "--help"]) and not options.platform:
51         option_parser.print_help()
52         print("\nTo see the available options on a specific platform, supply it on the command-line, for example --gtk --help")
53         return 0
54
55     try:
56         port = factory.PortFactory(Host()).get(options.platform, options=options)
57         return port.run_minibrowser(args)
58     except BaseException as e:
59         if isinstance(e, Exception):
60             print('\n%s raised: %s' % (e.__class__.__name__, str(e)), file=sys.stderr)
61             traceback.print_exc(file=sys.stderr)
62         return 1
63
64
65 if __name__ == '__main__':
66     sys.exit(main(sys.argv[1:]))