1
2# Locate and load the lldb python module
3
4import os, sys
5
6def import_lldb():
7  """ Find and import the lldb modules. This function tries to find the lldb module by:
8      1. Simply by doing "import lldb" in case the system python installation is aware of lldb. If that fails,
9      2. Executes the lldb executable pointed to by the LLDB environment variable (or if unset, the first lldb
10         on PATH") with the -P flag to determine the PYTHONPATH to set. If the lldb executable returns a valid
11         path, it is added to sys.path and the import is attempted again. If that fails, 3. On Mac OS X the
12         default Xcode 4.5 installation path.
13  """
14
15  # Try simple 'import lldb', in case of a system-wide install or a pre-configured PYTHONPATH
16  try:
17    import lldb
18    return True
19  except ImportError:
20    pass
21
22  # Allow overriding default path to lldb executable with the LLDB environment variable
23  lldb_executable = 'lldb'
24  if 'LLDB' in os.environ and os.path.exists(os.environ['LLDB']):
25    lldb_executable = os.environ['LLDB']
26
27  # Try using builtin module location support ('lldb -P')
28  from subprocess import check_output, CalledProcessError
29  try:
30    with open(os.devnull, 'w') as fnull:
31      lldb_minus_p_path = check_output("%s -P" % lldb_executable, shell=True, stderr=fnull).strip()
32    if not os.path.exists(lldb_minus_p_path):
33      #lldb -P returned invalid path, probably too old
34      pass
35    else:
36      sys.path.append(lldb_minus_p_path)
37      import lldb
38      return True
39  except CalledProcessError:
40    # Cannot run 'lldb -P' to determine location of lldb python module
41    pass
42  except ImportError:
43    # Unable to import lldb module from path returned by `lldb -P`
44    pass
45
46  # On Mac OS X, use the try the default path to XCode lldb module
47  if "darwin" in sys.platform:
48    xcode_python_path = "/Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/Versions/Current/Resources/Python/"
49    sys.path.append(xcode_python_path)
50    try:
51      import lldb
52      return True
53    except ImportError:
54      # Unable to import lldb module from default Xcode python path
55      pass
56
57  return False
58
59if not import_lldb():
60  import vim
61  vim.command('redraw | echo "%s"' % " Error loading lldb module; vim-lldb will be disabled. Check LLDB installation or set LLDB environment variable.")
62