Files
clang-p2996/lldb/scripts/swig_bot_lib/local.py
Kate Stone b9c1b51e45 *** This commit represents a complete reformatting of the LLDB source code
*** to conform to clang-format’s LLVM style.  This kind of mass change has
*** two obvious implications:

Firstly, merging this particular commit into a downstream fork may be a huge
effort.  Alternatively, it may be worth merging all changes up to this commit,
performing the same reformatting operation locally, and then discarding the
merge for this particular commit.  The commands used to accomplish this
reformatting were as follows (with current working directory as the root of
the repository):

    find . \( -iname "*.c" -or -iname "*.cpp" -or -iname "*.h" -or -iname "*.mm" \) -exec clang-format -i {} +
    find . -iname "*.py" -exec autopep8 --in-place --aggressive --aggressive {} + ;

The version of clang-format used was 3.9.0, and autopep8 was 1.2.4.

Secondly, “blame” style tools will generally point to this commit instead of
a meaningful prior commit.  There are alternatives available that will attempt
to look through this change and find the appropriate prior commit.  YMMV.

llvm-svn: 280751
2016-09-06 20:57:50 +00:00

136 lines
4.5 KiB
Python

#!/usr/bin/env python
"""
Shared functionality used by `client` and `server` when generating or preparing
to generate SWIG on the local machine.
"""
# Future imports
from __future__ import absolute_import
from __future__ import print_function
# Python modules
import argparse
import imp
import io
import logging
import os
import subprocess
import sys
import tempfile
import zipfile
# LLDB modules
import use_lldb_suite
# Package imports
from lldbsuite.support import fs
class LocalConfig(object):
src_root = None
target_dir = None
languages = None
swig_executable = None
def pack_archive(bytes_io, src_root, filters):
logging.info("Creating input file package...")
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(bytes_io, mode='w',
compression=zipfile.ZIP_DEFLATED)
except RuntimeError:
zip_file = zipfile.ZipFile(bytes_io, mode='w',
compression=zipfile.ZIP_STORED)
archive_entries = []
if filters is not None:
def filter_func(t):
subfolder = t[0]
ext = t[1]
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(
lambda f: os.path.isfile(f) and os.path.splitext(f)[1] == ext,
candidates)
return (subfolder, map(lambda f: os.path.basename(f), actual))
archive_entries = map(filter_func, filters)
else:
for (root, dirs, files) in os.walk(src_root):
logging.debug("Adding files {} from directory {} to output package"
.format(files, root))
if len(files) > 0:
rel_root = os.path.relpath(root, src_root)
archive_entries.append((rel_root, files))
archive_entries = list(archive_entries)
for entry in archive_entries:
subfolder = entry[0]
files = list(entry[1])
for file in files:
rel_path = os.path.normpath(os.path.join(subfolder, file))
full_path = os.path.join(src_root, rel_path)
logging.info("{} -> {}".format(full_path, rel_path))
zip_file.write(full_path, rel_path)
return zip_file
def unpack_archive(folder, archive_bytes):
zip_data = io.BytesIO(archive_bytes)
logging.debug("Opening zip archive...")
zip_file = zipfile.ZipFile(zip_data, mode='r')
zip_file.extractall(folder)
zip_file.close()
def generate(options):
include_folder = os.path.join(options.src_root, "include")
in_file = os.path.join(options.src_root, "scripts", "lldb.swig")
include_folder = os.path.normcase(include_folder)
for lang in options.languages:
lang = lang.lower()
out_dir = os.path.join(options.target_dir, lang.title())
if not os.path.exists(out_dir):
os.makedirs(out_dir)
out_file = os.path.join(out_dir, "LLDBWrap{}.cpp".format(lang.title()))
swig_command = [
options.swig_executable,
"-c++",
]
swig_command.append("-" + lang)
if lang == "python":
swig_command.append("-threads")
swig_command.extend([
"-I" + include_folder,
"-D__STDC_LIMIT_MACROS",
"-D__STDC_CONSTANT_MACROS",
"-outdir", out_dir,
"-o", out_file,
in_file
])
logging.info("generating swig {} bindings into {}"
.format(lang, out_dir))
logging.debug("swig command line: {}".format(swig_command))
try:
# Execute swig
swig_output = subprocess.check_output(
swig_command, stderr=subprocess.STDOUT, universal_newlines=True)
logging.info("swig generation succeeded")
if swig_output is not None and len(swig_output) > 0:
logging.info("swig output: %s", swig_output)
return (0, swig_output)
except subprocess.CalledProcessError as e:
logging.error("An error occurred executing swig. returncode={}"
.format(e.returncode))
logging.error(e.output)
return (e.returncode, e.output)