1cf60ccc3SAkihiko Odaki#!/usr/bin/env python3 2cf60ccc3SAkihiko Odaki 3cf60ccc3SAkihiko Odakifrom pathlib import PurePath 4cf60ccc3SAkihiko Odakiimport errno 5cf60ccc3SAkihiko Odakiimport json 6cf60ccc3SAkihiko Odakiimport os 7cf60ccc3SAkihiko Odakiimport subprocess 8cf60ccc3SAkihiko Odakiimport sys 9cf60ccc3SAkihiko Odaki 10cf60ccc3SAkihiko Odakidef destdir_join(d1: str, d2: str) -> str: 11cf60ccc3SAkihiko Odaki if not d1: 12cf60ccc3SAkihiko Odaki return d2 13cf60ccc3SAkihiko Odaki # c:\destdir + c:\prefix must produce c:\destdir\prefix 14cf60ccc3SAkihiko Odaki return str(PurePath(d1, *PurePath(d2).parts[1:])) 15cf60ccc3SAkihiko Odaki 16cf60ccc3SAkihiko Odakiintrospect = os.environ.get('MESONINTROSPECT') 17cf60ccc3SAkihiko Odakiout = subprocess.run([*introspect.split(' '), '--installed'], 18cf60ccc3SAkihiko Odaki stdout=subprocess.PIPE, check=True).stdout 19cf60ccc3SAkihiko Odakifor source, dest in json.loads(out).items(): 20cf60ccc3SAkihiko Odaki bundle_dest = destdir_join('qemu-bundle', dest) 21cf60ccc3SAkihiko Odaki path = os.path.dirname(bundle_dest) 22cf60ccc3SAkihiko Odaki try: 23cf60ccc3SAkihiko Odaki os.makedirs(path, exist_ok=True) 24cf60ccc3SAkihiko Odaki except BaseException as e: 25cf60ccc3SAkihiko Odaki print(f'error making directory {path}', file=sys.stderr) 26cf60ccc3SAkihiko Odaki raise e 27cf60ccc3SAkihiko Odaki try: 28cf60ccc3SAkihiko Odaki os.symlink(source, bundle_dest) 29cf60ccc3SAkihiko Odaki except BaseException as e: 30cf60ccc3SAkihiko Odaki if not isinstance(e, OSError) or e.errno != errno.EEXIST: 31*1f8da027SMateusz Krawczuk if os.name == 'nt': 32*1f8da027SMateusz Krawczuk print('Please enable Developer Mode to support soft link ' 33*1f8da027SMateusz Krawczuk 'without Administrator permission') 34cf60ccc3SAkihiko Odaki print(f'error making symbolic link {dest}', file=sys.stderr) 35cf60ccc3SAkihiko Odaki raise e 36