 cf60ccc330
			
		
	
	
		cf60ccc330
		
	
	
	
	
		
			
			Developers often run QEMU without installing. The bundle mechanism allows to look up files which should be present in installation even in such a situation. It is a general mechanism and can find any files in the installation tree. The build tree will have a new directory, qemu-bundle, to represent what files the installation tree would have for reference by the executables. Note that it abandons compatibility with Windows older than 8. The extended support for the prior version, 7 ended more than 2 years ago, and it is unlikely that someone would like to run the latest QEMU on such an old system. Signed-off-by: Akihiko Odaki <akihiko.odaki@gmail.com> Suggested-by: Paolo Bonzini <pbonzini@redhat.com> Message-Id: <20220624145039.49929-3-akihiko.odaki@gmail.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
		
			
				
	
	
		
			34 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			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():
 | |
|     assert os.path.isabs(source)
 | |
|     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
 |