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()