]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - scripts/swig_bot.py
Vendor import of lldb trunk r290819:
[FreeBSD/FreeBSD.git] / scripts / swig_bot.py
1 #!/usr/bin/env python
2
3 """
4 SWIG generation top-level script.  Supports both local and remote generation
5 of SWIG bindings for multiple languages.
6 """
7
8 # Python modules
9 import argparse
10 import logging
11 import sys
12 import traceback
13
14 # LLDB modules
15 import use_lldb_suite
16
17 # swig_bot modules
18 from swig_bot_lib import client
19 from swig_bot_lib import server
20
21
22 def 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
59 def run_client(options):
60     logging.info("Running swig_bot in client mode")
61     client.finalize_subparser_options(options)
62     client.run(options)
63
64
65 def run_server(options):
66     logging.info("Running swig_bot in server mode")
67     server.finalize_subparser_options(options)
68     server.run(options)
69
70 if __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)