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