From d434a1d3e05eeda059ae82ad80fa6eb938bbff1a Mon Sep 17 00:00:00 2001 From: Todd Fiala Date: Wed, 18 Nov 2015 08:52:33 +0000 Subject: prepare_bindings.py: enable static bindings Added a new flag, --allow-static-binding. When specified, if (and only if) the swig binary cannot be found, then the LLDBWrapPython.cpp and lldb.py from the scripts/Python/{static-binding-dir} are copied into the place where swig would have generated them. {static-binding-dir} defaults to static-binding, and can be overridden with the --static-binding-dir command line argument. The static bindings checked in are from r253424. llvm-svn: 253448 --- lldb/scripts/prepare_bindings.py | 51 ++++++++++++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 12 deletions(-) (limited to 'lldb/scripts/prepare_bindings.py') diff --git a/lldb/scripts/prepare_bindings.py b/lldb/scripts/prepare_bindings.py index 287f2007e7f..e9142348245 100755 --- a/lldb/scripts/prepare_bindings.py +++ b/lldb/scripts/prepare_bindings.py @@ -158,6 +158,19 @@ def process_args(args): "Specifies the build dir where the language binding " "should be placed")) + group = parser.add_argument_group("static binding usage") + group.add_argument( + "--allow-static-binding", + action="store_true", + help=( + "Specify the pre-baked binding can be used if " + "swig cannot be found.")) + group.add_argument( + "--static-binding-dir", + default="static-binding", + help="script-relative directory for appropriate static bindings" + ) + # Process args. options = parser.parse_args(args) @@ -196,9 +209,14 @@ def find_file_in_paths(paths, exe_basename): return None -def find_swig_executable(options): +def find_swig_executable(options, must_exist): """Finds the swig executable in the PATH or known good locations. + :param options the command line options returned by argparse. + + :param must_exist if True, this method exits the program if + swig is not found; otherwise, always returns whether swig is found. + Replaces options.swig_executable with the full swig executable path. """ # Figure out what we're looking for. @@ -219,20 +237,28 @@ def find_swig_executable(options): # Add in the extra dirs paths_to_check.extend(extra_dirs) if len(paths_to_check) < 1: - logging.error( - "swig executable was not specified, PATH has no " - "contents, and there are no extra directories to search") - sys.exit(-6) + if must_exist: + logging.error( + "swig executable was not specified, PATH has no " + "contents, and there are no extra directories to search") + sys.exit(-6) + else: + logging.info("failed to find swig: no paths available") + return # Find the swig executable options.swig_executable = find_file_in_paths(paths_to_check, exe_basename) if not options.swig_executable or len(options.swig_executable) < 1: - logging.error( - "failed to find exe='%s' in paths='%s'", - exe_basename, - paths_to_check) - sys.exit(-6) - logging.info("found swig executable: %s", options.swig_executable) + if must_exist: + logging.error( + "failed to find exe='%s' in paths='%s'", + exe_basename, + paths_to_check) + sys.exit(-6) + else: + logging.info("%s not found in paths %s", exe_basename, paths_to_check) + else: + logging.info("found swig executable: %s", options.swig_executable) def main(args): @@ -247,7 +273,8 @@ def main(args): # Ensure we have a swig executable. if not options.swig_executable or len(options.swig_executable) == 0: if options.find_swig: - find_swig_executable(options) + must_exist = not options.allow_static_binding + find_swig_executable(options, must_exist) else: logging.error( "The --find-swig option must be specified " -- cgit v1.2.3