blob: b72563895c5668d5947a31f36d6105463c943ac7 [file] [log] [blame]
Akihiko Odakicf60ccc2022-06-24 23:50:37 +09001#!/usr/bin/env python3
2
3from pathlib import PurePath
4import errno
5import json
6import os
Akihiko Odakia3c33452024-10-29 12:54:43 +00007import shlex
Akihiko Odakicf60ccc2022-06-24 23:50:37 +09008import 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')
Akihiko Odakia3c33452024-10-29 12:54:43 +000018out = subprocess.run([*shlex.split(introspect), '--installed'],
Akihiko Odakicf60ccc2022-06-24 23:50:37 +090019 stdout=subprocess.PIPE, check=True).stdout
20for source, dest in json.loads(out).items():
Akihiko Odakicf60ccc2022-06-24 23:50:37 +090021 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:
Mateusz Krawczuk1f8da022023-05-04 23:11:01 +020032 if os.name == 'nt':
33 print('Please enable Developer Mode to support soft link '
34 'without Administrator permission')
Akihiko Odakicf60ccc2022-06-24 23:50:37 +090035 print(f'error making symbolic link {dest}', file=sys.stderr)
36 raise e