When installing shared libraries, as is the case for libvfio-user.so,
Meson will include relative symbolic links in the output of
"meson introspect --installed":
  {
    "libvfio-user.so": "/usr/local/lib64/libvfio-user.so",
    ...
  }
In the case of scripts/symlink-install-tree.py, this will
be a symbolic link to a symbolic link but, in any case, there is
no issue in creating it.
Cc: qemu-stable@nongnu.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
		
	
			
		
			
				
	
	
		
			33 lines
		
	
	
		
			1020 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			1020 B
		
	
	
	
		
			Python
		
	
	
	
	
	
#!/usr/bin/env python3
 | 
						|
 | 
						|
from pathlib import PurePath
 | 
						|
import errno
 | 
						|
import json
 | 
						|
import os
 | 
						|
import subprocess
 | 
						|
import sys
 | 
						|
 | 
						|
def destdir_join(d1: str, d2: str) -> str:
 | 
						|
    if not d1:
 | 
						|
        return d2
 | 
						|
    # c:\destdir + c:\prefix must produce c:\destdir\prefix
 | 
						|
    return str(PurePath(d1, *PurePath(d2).parts[1:]))
 | 
						|
 | 
						|
introspect = os.environ.get('MESONINTROSPECT')
 | 
						|
out = subprocess.run([*introspect.split(' '), '--installed'],
 | 
						|
                     stdout=subprocess.PIPE, check=True).stdout
 | 
						|
for source, dest in json.loads(out).items():
 | 
						|
    bundle_dest = destdir_join('qemu-bundle', dest)
 | 
						|
    path = os.path.dirname(bundle_dest)
 | 
						|
    try:
 | 
						|
        os.makedirs(path, exist_ok=True)
 | 
						|
    except BaseException as e:
 | 
						|
        print(f'error making directory {path}', file=sys.stderr)
 | 
						|
        raise e
 | 
						|
    try:
 | 
						|
        os.symlink(source, bundle_dest)
 | 
						|
    except BaseException as e:
 | 
						|
        if not isinstance(e, OSError) or e.errno != errno.EEXIST:
 | 
						|
            print(f'error making symbolic link {dest}', file=sys.stderr)
 | 
						|
            raise e
 |