Author: zturner Date: Mon Nov 30 16:31:13 2015 New Revision: 254340 URL: http://llvm.org/viewvc/llvm-project?rev=254340&view=rev Log: Have swig_bot actually run swig, and send back the output.
Added: lldb/trunk/scripts/swig_bot_lib/remote.py - copied, changed from r254338, lldb/trunk/scripts/swig_bot_lib/config.py Removed: lldb/trunk/scripts/swig_bot_lib/config.py Modified: lldb/trunk/scripts/swig_bot_lib/client.py lldb/trunk/scripts/swig_bot_lib/local.py lldb/trunk/scripts/swig_bot_lib/server.py Modified: lldb/trunk/scripts/swig_bot_lib/client.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/swig_bot_lib/client.py?rev=254340&r1=254339&r2=254340&view=diff ============================================================================== --- lldb/trunk/scripts/swig_bot_lib/client.py (original) +++ lldb/trunk/scripts/swig_bot_lib/client.py Mon Nov 30 16:31:13 2015 @@ -11,6 +11,7 @@ from __future__ import print_function # Python modules import argparse +import io import logging import os import socket @@ -23,8 +24,8 @@ from lldbsuite.support import fs from lldbsuite.support import sockutil # package imports -from . import config from . import local +from . import remote default_ip = "127.0.0.1" default_port = 8537 @@ -152,21 +153,32 @@ def run(args): if not os.path.isfile(options.swig_executable): logging.error("Swig executable '{}' does not exist." .format(options.swig_executable)) - gen_options = local.GenOptions() - gen_options.languages = options.languages - gen_options.src_root = options.src_root - gen_options.target_dir = options.target_dir - gen_options.swig_executable = options.swig_executable - local.generate(gen_options) + config = local.LocalConfig() + config.languages = options.languages + config.src_root = options.src_root + config.target_dir = options.target_dir + config.swig_executable = options.swig_executable + local.generate(config) else: logging.info("swig bot client using remote generation with server '{}'" .format(options.remote)) connection = None try: - config_json = config.generate_config_json(options) - packed_input = local.pack_archive(config_json, options) + config = remote.generate_config(options.languages) + logging.debug("Generated config json {}".format(config)) + inputs = [("include/lldb", ".h"), + ("include/lldb/API", ".h"), + ("scripts", ".swig"), + ("scripts/Python", ".swig"), + ("scripts/interface", ".i")] + zip_data = io.BytesIO() + packed_input = local.pack_archive(zip_data, options.src_root, inputs) + logging.info("(null) -> config.json") + packed_input.writestr("config.json", config) + packed_input.close() + connection = establish_remote_connection(options.remote) - response = transmit_data(connection, packed_input) + response = transmit_data(connection, zip_data.getvalue()) logging.debug("Received {} byte response.".format(len(response))) finally: if connection is not None: Removed: lldb/trunk/scripts/swig_bot_lib/config.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/swig_bot_lib/config.py?rev=254339&view=auto ============================================================================== --- lldb/trunk/scripts/swig_bot_lib/config.py (original) +++ lldb/trunk/scripts/swig_bot_lib/config.py (removed) @@ -1,31 +0,0 @@ -#!/usr/bin/env python - -""" -Shared functionality used by `client` and `server` when dealing with -configuration data -""" - -# Future imports -from __future__ import absolute_import -from __future__ import print_function - -# Python modules -import json -import logging -import os -import socket -import struct -import sys - -# LLDB modules -import use_lldb_suite - -# package imports -from . import local - -def generate_config_json(options): - config = {"languages": options.languages} - return json.dumps(config) - -def parse_config_json(option_json): - return json.loads(option_json) Modified: lldb/trunk/scripts/swig_bot_lib/local.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/swig_bot_lib/local.py?rev=254340&r1=254339&r2=254340&view=diff ============================================================================== --- lldb/trunk/scripts/swig_bot_lib/local.py (original) +++ lldb/trunk/scripts/swig_bot_lib/local.py Mon Nov 30 16:31:13 2015 @@ -23,34 +23,32 @@ import zipfile # LLDB modules import use_lldb_suite -class GenOptions(object): +# Package imports +from lldbsuite.support import fs + +class LocalConfig(object): src_root = None target_dir = None languages = None swig_executable = None -def pack_archive(config_json, options): +def pack_archive(bytes_io, src_root, filters): logging.info("Creating input file package...") - zip_data = io.BytesIO() zip_file = None try: # It's possible that a custom-built interpreter will not have the # standard zlib module. If so, we can only store, not compress. By # try to compress since we usually have a standard Python distribution. - zip_file = zipfile.ZipFile(zip_data, mode='w', + zip_file = zipfile.ZipFile(bytes_io, mode='w', compression=zipfile.ZIP_DEFLATED) except RuntimeError: - zip_file = zipfile.ZipFile(zip_data, mode='w', + zip_file = zipfile.ZipFile(bytes_io, mode='w', compression=zipfile.ZIP_STORED) - filters = [("include/lldb", ".h"), - ("scripts", ".swig"), - ("scripts/Python", ".swig"), - ("scripts/interface", ".i")] def filter_func(t): subfolder = t[0] ext = t[1] - full_path = os.path.normpath(os.path.join(options.src_root, subfolder)) + full_path = os.path.normpath(os.path.join(src_root, subfolder)) candidates = [os.path.normpath(os.path.join(full_path, f)) for f in os.listdir(full_path)] actual = filter( @@ -65,14 +63,11 @@ def pack_archive(config_json, options): for file in files: relative_path = os.path.normpath(os.path.join(subfolder, file)) full_path = os.path.normpath( - os.path.join(options.src_root, relative_path)) + os.path.join(src_root, relative_path)) logging.info("{} -> {}".format(full_path, relative_path)) zip_file.write(full_path, relative_path) - logging.info("(null) -> config.json") - zip_file.writestr("config.json", config_json) - zip_file.close() - return zip_data.getvalue() + return zip_file def unpack_archive(subfolder, archive_bytes): tempfolder = os.path.join(tempfile.gettempdir(), subfolder) Copied: lldb/trunk/scripts/swig_bot_lib/remote.py (from r254338, lldb/trunk/scripts/swig_bot_lib/config.py) URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/swig_bot_lib/remote.py?p2=lldb/trunk/scripts/swig_bot_lib/remote.py&p1=lldb/trunk/scripts/swig_bot_lib/config.py&r1=254338&r2=254340&rev=254340&view=diff ============================================================================== --- lldb/trunk/scripts/swig_bot_lib/config.py (original) +++ lldb/trunk/scripts/swig_bot_lib/remote.py Mon Nov 30 16:31:13 2015 @@ -2,7 +2,7 @@ """ Shared functionality used by `client` and `server` when dealing with -configuration data +remote transmission """ # Future imports @@ -20,12 +20,11 @@ import sys # LLDB modules import use_lldb_suite -# package imports -from . import local - -def generate_config_json(options): - config = {"languages": options.languages} +def generate_config(languages): + config = {"languages": languages} return json.dumps(config) -def parse_config_json(option_json): - return json.loads(option_json) +def parse_config(json_reader): + json_data = json_reader.read() + options_dict = json.loads(json_data) + return options_dict Modified: lldb/trunk/scripts/swig_bot_lib/server.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/swig_bot_lib/server.py?rev=254340&r1=254339&r2=254340&view=diff ============================================================================== --- lldb/trunk/scripts/swig_bot_lib/server.py (original) +++ lldb/trunk/scripts/swig_bot_lib/server.py Mon Nov 30 16:31:13 2015 @@ -11,6 +11,7 @@ from __future__ import print_function # Python modules import argparse +import io import logging import os import select @@ -23,10 +24,12 @@ import traceback # LLDB modules import use_lldb_suite +from lldbsuite.support import fs from lldbsuite.support import sockutil # package imports from . import local +from . import remote default_port = 8537 @@ -40,6 +43,12 @@ def process_args(args): default=default_port, help=("The local port to bind to")) + parser.add_argument( + "--swig-executable", + action="store", + default=fs.find_executable("swig"), + dest="swig_executable") + # Process args. return parser.parse_args(args) @@ -75,9 +84,31 @@ def accept_once(sock, options): pack_location = local.unpack_archive("swig-bot", data) logging.debug("Successfully unpacked archive...") - logging.info("Sending {} byte response".format(len(data))) - client.sendall(struct.pack("!I", len(data))) - client.sendall(data) + config_file = os.path.normpath(os.path.join(pack_location, + "config.json")) + parsed_config = remote.parse_config(io.open(config_file)) + config = local.LocalConfig() + config.languages = parsed_config["languages"] + config.swig_executable = options.swig_executable + config.src_root = pack_location + config.target_dir = os.path.normpath( + os.path.join(config.src_root, "output")) + logging.info( + "Running swig. languages={}, swig={}, src_root={}, target={}" + .format(config.languages, config.swig_executable, + config.src_root, config.target_dir)) + + local.generate(config) + logging.debug("Finished running swig. Packaging up output") + zip_data = io.BytesIO() + zip_file = local.pack_archive(zip_data, + config.target_dir, + [(".", None)]) + zip_file.close() + response_data = zip_data.getvalue() + logging.info("Sending {} byte response".format(len(response_data))) + client.sendall(struct.pack("!I", len(response_data))) + client.sendall(response_data) finally: if pack_location is not None: logging.debug("Removing temporary folder {}" @@ -95,6 +126,7 @@ def accept_loop(sock, options): def run(args): options = process_args(args) + print(options) sock = initialize_listening_socket(options) accept_loop(sock, options) return options _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits