blob: 95f4eb8d71b104d5261b47af45bb1ea9dabf6042 [file] [log] [blame]
Zachary Turner2db36092015-11-24 21:35:17 +00001#!/usr/bin/env python
2
Zachary Turner0a2899c2015-11-24 21:35:32 +00003"""
4SWIG generation top-level script. Supports both local and remote generation
5of SWIG bindings for multiple languages.
6"""
7
Zachary Turner2db36092015-11-24 21:35:17 +00008# Python modules
Zachary Turner0a2899c2015-11-24 21:35:32 +00009import argparse
10import logging
Zachary Turner2db36092015-11-24 21:35:17 +000011import sys
Zachary Turner0a2899c2015-11-24 21:35:32 +000012import traceback
Zachary Turner2db36092015-11-24 21:35:17 +000013
14# LLDB modules
15import use_lldb_suite
16
Zachary Turner7cc44772015-12-02 19:00:52 +000017# swig_bot modules
18from swig_bot_lib import client
19from swig_bot_lib import server
20
Zachary Turner0a2899c2015-11-24 21:35:32 +000021def process_args(args):
22 parser = argparse.ArgumentParser(
23 description='Run swig-bot client or server.')
24
Zachary Turner7cc44772015-12-02 19:00:52 +000025 # Create and populate subparser arguments for when swig_bot is
26 # run in client or server mode
27 subparsers = parser.add_subparsers(
28 help="Pass --help to a sub-command to print detailed usage")
29 client_parser = subparsers.add_parser("client",
30 help="Run SWIG generation client")
31 client.add_subparser_args(client_parser)
32 client_parser.set_defaults(func=run_client)
33
34 server_parser = subparsers.add_parser("server",
35 help="Run SWIG generation server")
36 server.add_subparser_args(server_parser)
37 server_parser.set_defaults(func=run_server)
Zachary Turner0a2899c2015-11-24 21:35:32 +000038
39 # Arguments to control logging verbosity.
40 parser.add_argument(
41 "--verbose", "-v",
42 action="store_true",
43 default=False,
44 help="Increase logging verbosity level.")
45
Zachary Turner7cc44772015-12-02 19:00:52 +000046 options = parser.parse_args(args)
Zachary Turner0a2899c2015-11-24 21:35:32 +000047 # Set logging level.
48 if options.verbose:
49 log_level = logging.DEBUG
50 else:
51 log_level = logging.NOTSET
52 logging.basicConfig(level=log_level)
53 logging.info("logging is using level: %d", log_level)
54
Zachary Turner7cc44772015-12-02 19:00:52 +000055 return options
56
57def run_client(options):
58 logging.info("Running swig_bot in client mode")
59 client.finalize_subparser_options(options)
60 client.run(options)
61
62def run_server(options):
63 logging.info("Running swig_bot in server mode")
64 server.finalize_subparser_options(options)
65 server.run(options)
Zachary Turner0a2899c2015-11-24 21:35:32 +000066
Zachary Turner2db36092015-11-24 21:35:17 +000067if __name__ == "__main__":
Zachary Turner7cc44772015-12-02 19:00:52 +000068 options = process_args(sys.argv[1:])
Zachary Turner0a2899c2015-11-24 21:35:32 +000069 try:
Zachary Turner7cc44772015-12-02 19:00:52 +000070 if options.func is None:
Zachary Turner0a2899c2015-11-24 21:35:32 +000071 logging.error("Unknown mode specified. Expected client or server.")
72 sys.exit(-1)
Zachary Turner7cc44772015-12-02 19:00:52 +000073 else:
74 options.func(options)
Zachary Turnercc3609362015-11-24 21:35:40 +000075 except KeyboardInterrupt as e:
76 logging.info("Ctrl+C received. Shutting down...")
77 sys.exit(-1)
Zachary Turner0a2899c2015-11-24 21:35:32 +000078 except Exception as e:
79 error = traceback.format_exc()
80 logging.error("An error occurred running swig-bot.")
81 logging.error(error)