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