summaryrefslogtreecommitdiffstats
path: root/lldb/scripts/get_relative_lib_dir.py
blob: f7020d653fddccea65982e36062192b1b90e0f46 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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)
OpenPOWER on IntegriCloud