|  | #!/usr/bin/env python | 
|  |  | 
|  | """ | 
|  | SWIG generation top-level script.  Supports both local and remote generation | 
|  | of SWIG bindings for multiple languages. | 
|  | """ | 
|  |  | 
|  | # Python modules | 
|  | import argparse | 
|  | import logging | 
|  | import sys | 
|  | import traceback | 
|  |  | 
|  | # LLDB modules | 
|  | import use_lldb_suite | 
|  |  | 
|  | # swig_bot modules | 
|  | from swig_bot_lib import client | 
|  | from swig_bot_lib import server | 
|  |  | 
|  |  | 
|  | def process_args(args): | 
|  | parser = argparse.ArgumentParser( | 
|  | description='Run swig-bot client or server.') | 
|  |  | 
|  | # Create and populate subparser arguments for when swig_bot is | 
|  | # run in client or server mode | 
|  | subparsers = parser.add_subparsers( | 
|  | help="Pass --help to a sub-command to print detailed usage") | 
|  | client_parser = subparsers.add_parser("client", | 
|  | help="Run SWIG generation client") | 
|  | client.add_subparser_args(client_parser) | 
|  | client_parser.set_defaults(func=run_client) | 
|  |  | 
|  | server_parser = subparsers.add_parser("server", | 
|  | help="Run SWIG generation server") | 
|  | server.add_subparser_args(server_parser) | 
|  | server_parser.set_defaults(func=run_server) | 
|  |  | 
|  | # Arguments to control logging verbosity. | 
|  | parser.add_argument( | 
|  | "--verbose", "-v", | 
|  | action="store_true", | 
|  | default=False, | 
|  | help="Increase logging verbosity level.") | 
|  |  | 
|  | options = parser.parse_args(args) | 
|  | # Set logging level. | 
|  | if options.verbose: | 
|  | log_level = logging.DEBUG | 
|  | else: | 
|  | log_level = logging.NOTSET | 
|  | logging.basicConfig(level=log_level) | 
|  | logging.info("logging is using level: %d", log_level) | 
|  |  | 
|  | return options | 
|  |  | 
|  |  | 
|  | def run_client(options): | 
|  | logging.info("Running swig_bot in client mode") | 
|  | client.finalize_subparser_options(options) | 
|  | client.run(options) | 
|  |  | 
|  |  | 
|  | def run_server(options): | 
|  | logging.info("Running swig_bot in server mode") | 
|  | server.finalize_subparser_options(options) | 
|  | server.run(options) | 
|  |  | 
|  | if __name__ == "__main__": | 
|  | options = process_args(sys.argv[1:]) | 
|  | try: | 
|  | if options.func is None: | 
|  | logging.error( | 
|  | "Unknown mode specified.  Expected client or server.") | 
|  | sys.exit(-1) | 
|  | else: | 
|  | options.func(options) | 
|  | except KeyboardInterrupt as e: | 
|  | logging.info("Ctrl+C received.  Shutting down...") | 
|  | sys.exit(-1) | 
|  | except Exception as e: | 
|  | error = traceback.format_exc() | 
|  | logging.error("An error occurred running swig-bot.") | 
|  | logging.error(error) |