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
274c2cf3a3SLawrence D'Anna        while True:
284c2cf3a3SLawrence D'Anna            try:
294c2cf3a3SLawrence D'Anna                print(relpath_nodots(exe, sys.prefix))
304c2cf3a3SLawrence D'Anna                break
314c2cf3a3SLawrence D'Anna            except ValueError:
324c2cf3a3SLawrence D'Anna                tried.append(exe)
334c2cf3a3SLawrence D'Anna                if os.path.islink(exe):
344c2cf3a3SLawrence D'Anna                    exe = os.path.join(os.path.dirname(exe), os.readlink(exe))
354c2cf3a3SLawrence D'Anna                    continue
364c2cf3a3SLawrence D'Anna                else:
374c2cf3a3SLawrence D'Anna                    print("Could not find a relative path to sys.executable under sys.prefix", file=sys.stderr)
384c2cf3a3SLawrence D'Anna                    for e in tried:
394c2cf3a3SLawrence D'Anna                        print("tried:", e, file=sys.stderr)
404c2cf3a3SLawrence D'Anna                    print("sys.prefix:", sys.prefix, file=sys.stderr)
414c2cf3a3SLawrence D'Anna                    sys.exit(1)
42*ae389b24SLawrence D'Anna    elif args.variable_name == "LLDB_PYTHON_EXT_SUFFIX":
43*ae389b24SLawrence D'Anna        print(sysconfig.get_config_var('EXT_SUFFIX'))
444c2cf3a3SLawrence D'Anna    else:
454c2cf3a3SLawrence D'Anna        parser.error(f"unknown variable {args.variable_name}")
464c2cf3a3SLawrence D'Anna
474c2cf3a3SLawrence D'Annaif __name__ == '__main__':
484c2cf3a3SLawrence D'Anna    main()