1#!/usr/bin/env python3 2 3import os 4import sys 5import argparse 6import sysconfig 7import distutils.sysconfig 8 9 10def relpath_nodots(path, base): 11 rel = os.path.normpath(os.path.relpath(path, base)) 12 assert not os.path.isabs(rel) 13 parts = rel.split(os.path.sep) 14 if parts and parts[0] == '..': 15 raise ValueError(f"{path} is not under {base}") 16 return rel 17 18def main(): 19 parser = argparse.ArgumentParser(description="extract cmake variables from python") 20 parser.add_argument("variable_name") 21 args = parser.parse_args() 22 if args.variable_name == "LLDB_PYTHON_RELATIVE_PATH": 23 print(distutils.sysconfig.get_python_lib(True, False, '')) 24 elif args.variable_name == "LLDB_PYTHON_EXE_RELATIVE_PATH": 25 tried = list() 26 exe = sys.executable 27 prefix = os.path.realpath(sys.prefix) 28 while True: 29 try: 30 print(relpath_nodots(exe, prefix)) 31 break 32 except ValueError: 33 tried.append(exe) 34 if os.path.islink(exe): 35 exe = os.path.join(os.path.realpath(os.path.dirname(exe)), os.readlink(exe)) 36 continue 37 else: 38 print("Could not find a relative path to sys.executable under sys.prefix", file=sys.stderr) 39 for e in tried: 40 print("tried:", e, file=sys.stderr) 41 print("realpath(sys.prefix):", prefix, file=sys.stderr) 42 print("sys.prefix:", sys.prefix, file=sys.stderr) 43 sys.exit(1) 44 elif args.variable_name == "LLDB_PYTHON_EXT_SUFFIX": 45 print(sysconfig.get_config_var('EXT_SUFFIX')) 46 else: 47 parser.error(f"unknown variable {args.variable_name}") 48 49if __name__ == '__main__': 50 main()