|  | import distutils.sysconfig | 
|  | import os | 
|  | import platform | 
|  | import re | 
|  | import sys | 
|  |  | 
|  |  | 
|  | def get_python_relative_libdir(): | 
|  | """Returns the appropropriate python libdir relative to the build directory. | 
|  |  | 
|  | @param exe_path the path to the lldb executable | 
|  |  | 
|  | @return the python path that needs to be added to sys.path (PYTHONPATH) | 
|  | in order to find the lldb python module. | 
|  | """ | 
|  | if platform.system() != 'Linux': | 
|  | return None | 
|  |  | 
|  | # We currently have a bug in lldb -P that does not account for | 
|  | # architecture variants in python paths for | 
|  | # architecture-specific modules.  Handle the lookup here. | 
|  | # When that bug is fixed, we should just ask lldb for the | 
|  | # right answer always. | 
|  | arch_specific_libdir = distutils.sysconfig.get_python_lib(True, False) | 
|  | split_libdir = arch_specific_libdir.split(os.sep) | 
|  | lib_re = re.compile(r"^lib.+$") | 
|  |  | 
|  | for i in range(len(split_libdir)): | 
|  | match = lib_re.match(split_libdir[i]) | 
|  | if match is not None: | 
|  | # We'll call this the relative root of the lib dir. | 
|  | # Things like RHEL will have an arch-specific python | 
|  | # lib dir, which isn't 'lib' on x86_64. | 
|  | return os.sep.join(split_libdir[i:]) | 
|  | # Didn't resolve it. | 
|  | return None | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | lib_dir = get_python_relative_libdir() | 
|  | if lib_dir is not None: | 
|  | sys.stdout.write(lib_dir) | 
|  | sys.exit(0) | 
|  | else: | 
|  | sys.exit(1) |