14c2cf3a3SLawrence D'Anna#!/usr/bin/env python3
24c2cf3a3SLawrence D'Anna
34c2cf3a3SLawrence D'Annaimport os
44c2cf3a3SLawrence D'Annaimport sys
54c2cf3a3SLawrence D'Annaimport argparse
64c2cf3a3SLawrence D'Annaimport sysconfig
74c2cf3a3SLawrence D'Annaimport distutils.sysconfig
84c2cf3a3SLawrence D'Anna
94c2cf3a3SLawrence D'Anna
104c2cf3a3SLawrence D'Annadef relpath_nodots(path, base):
114c2cf3a3SLawrence D'Anna    rel = os.path.normpath(os.path.relpath(path, base))
124c2cf3a3SLawrence D'Anna    assert not os.path.isabs(rel)
134c2cf3a3SLawrence D'Anna    parts = rel.split(os.path.sep)
144c2cf3a3SLawrence D'Anna    if parts and parts[0] == '..':
154c2cf3a3SLawrence D'Anna        raise ValueError(f"{path} is not under {base}")
164c2cf3a3SLawrence D'Anna    return rel
174c2cf3a3SLawrence D'Anna
184c2cf3a3SLawrence D'Annadef main():
194c2cf3a3SLawrence D'Anna    parser = argparse.ArgumentParser(description="extract cmake variables from python")
204c2cf3a3SLawrence D'Anna    parser.add_argument("variable_name")
214c2cf3a3SLawrence D'Anna    args = parser.parse_args()
224c2cf3a3SLawrence D'Anna    if args.variable_name == "LLDB_PYTHON_RELATIVE_PATH":
234c2cf3a3SLawrence D'Anna        print(distutils.sysconfig.get_python_lib(True, False, ''))
244c2cf3a3SLawrence D'Anna    elif args.variable_name == "LLDB_PYTHON_EXE_RELATIVE_PATH":
254c2cf3a3SLawrence D'Anna        tried = list()
264c2cf3a3SLawrence D'Anna        exe = sys.executable
27*f07ddbc6SLawrence D'Anna        prefix = os.path.realpath(sys.prefix)
284c2cf3a3SLawrence D'Anna        while True:
294c2cf3a3SLawrence D'Anna            try:
30*f07ddbc6SLawrence D'Anna                print(relpath_nodots(exe, prefix))
314c2cf3a3SLawrence D'Anna                break
324c2cf3a3SLawrence D'Anna            except ValueError:
334c2cf3a3SLawrence D'Anna                tried.append(exe)
344c2cf3a3SLawrence D'Anna                if os.path.islink(exe):
35*f07ddbc6SLawrence D'Anna                    exe = os.path.join(os.path.realpath(os.path.dirname(exe)), os.readlink(exe))
364c2cf3a3SLawrence D'Anna                    continue
374c2cf3a3SLawrence D'Anna                else:
384c2cf3a3SLawrence D'Anna                    print("Could not find a relative path to sys.executable under sys.prefix", file=sys.stderr)
394c2cf3a3SLawrence D'Anna                    for e in tried:
404c2cf3a3SLawrence D'Anna                        print("tried:", e, file=sys.stderr)
41*f07ddbc6SLawrence D'Anna                    print("realpath(sys.prefix):", prefix, file=sys.stderr)
424c2cf3a3SLawrence D'Anna                    print("sys.prefix:", sys.prefix, file=sys.stderr)
434c2cf3a3SLawrence D'Anna                    sys.exit(1)
44ae389b24SLawrence D'Anna    elif args.variable_name == "LLDB_PYTHON_EXT_SUFFIX":
45ae389b24SLawrence D'Anna        print(sysconfig.get_config_var('EXT_SUFFIX'))
464c2cf3a3SLawrence D'Anna    else:
474c2cf3a3SLawrence D'Anna        parser.error(f"unknown variable {args.variable_name}")
484c2cf3a3SLawrence D'Anna
494c2cf3a3SLawrence D'Annaif __name__ == '__main__':
504c2cf3a3SLawrence D'Anna    main()