blob: 888fc10116b8960be03776c639295c19b0a875ca [file] [log] [blame]
Andrew Top61a84952019-04-30 15:07:33 -07001#!/usr/bin/env python
2
3"""
4SWIG generation top-level script. Supports both local and remote generation
5of SWIG bindings for multiple languages.
6"""
7
8# Python modules
9import argparse
10import logging
11import sys
12import traceback
13
14# LLDB modules
15import use_lldb_suite
16
17# swig_bot modules
18from swig_bot_lib import client
19from swig_bot_lib import server
20
21
22def process_args(args):
23 parser = argparse.ArgumentParser(
24 description='Run swig-bot client or server.')
25
26 # Create and populate subparser arguments for when swig_bot is
27 # run in client or server mode
28 subparsers = parser.add_subparsers(
29 help="Pass --help to a sub-command to print detailed usage")
30 client_parser = subparsers.add_parser("client",
31 help="Run SWIG generation client")
32 client.add_subparser_args(client_parser)
33 client_parser.set_defaults(func=run_client)
34
35 server_parser = subparsers.add_parser("server",
36 help="Run SWIG generation server")
37 server.add_subparser_args(server_parser)
38 server_parser.set_defaults(func=run_server)
39
40 # Arguments to control logging verbosity.
41 parser.add_argument(
42 "--verbose", "-v",
43 action="store_true",
44 default=False,
45 help="Increase logging verbosity level.")
46
47 options = parser.parse_args(args)
48 # Set logging level.
49 if options.verbose:
50 log_level = logging.DEBUG
51 else:
52 log_level = logging.NOTSET
53 logging.basicConfig(level=log_level)
54 logging.info("logging is using level: %d", log_level)
55
56 return options
57
58
59def run_client(options):
60 logging.info("Running swig_bot in client mode")
61 client.finalize_subparser_options(options)
62 client.run(options)
63
64
65def run_server(options):
66 logging.info("Running swig_bot in server mode")
67 server.finalize_subparser_options(options)
68 server.run(options)
69
70if __name__ == "__main__":
71 options = process_args(sys.argv[1:])
72 try:
73 if options.func is None:
74 logging.error(
75 "Unknown mode specified. Expected client or server.")
76 sys.exit(-1)
77 else:
78 options.func(options)
79 except KeyboardInterrupt as e:
80 logging.info("Ctrl+C received. Shutting down...")
81 sys.exit(-1)
82 except Exception as e:
83 error = traceback.format_exc()
84 logging.error("An error occurred running swig-bot.")
85 logging.error(error)