1 #!/usr/bin/env python3 2 """ 3 vendor - QEMU python vendoring utility 4 5 usage: vendor [-h] 6 7 QEMU python vendoring utility 8 9 options: 10 -h, --help show this help message and exit 11 """ 12 13 # Copyright (C) 2023 Red Hat, Inc. 14 # 15 # Authors: 16 # John Snow <jsnow@redhat.com> 17 # 18 # This work is licensed under the terms of the GNU GPL, version 2 or 19 # later. See the COPYING file in the top-level directory. 20 21 import argparse 22 import os 23 from pathlib import Path 24 import subprocess 25 import sys 26 import tempfile 27 28 29 def main() -> int: 30 """Run the vendoring utility. See module-level docstring.""" 31 loud = False 32 if os.environ.get("DEBUG") or os.environ.get("V"): 33 loud = True 34 35 # No options or anything for now, but I guess 36 # you'll figure that out when you run --help. 37 parser = argparse.ArgumentParser( 38 prog="vendor", 39 description="QEMU python vendoring utility", 40 ) 41 parser.parse_args() 42 43 packages = { 44 "meson==1.2.3": 45 "4533a43c34548edd1f63a276a42690fce15bde9409bcf20c4b8fa3d7e4d7cac1", 46 } 47 48 vendor_dir = Path(__file__, "..", "..", "wheels").resolve() 49 50 with tempfile.NamedTemporaryFile(mode="w", encoding="utf-8") as file: 51 for dep_spec, checksum in packages.items(): 52 print(f"{dep_spec} --hash=sha256:{checksum}", file=file) 53 file.flush() 54 55 cli_args = [ 56 "pip", 57 "download", 58 "--dest", 59 str(vendor_dir), 60 "--require-hashes", 61 "-r", 62 file.name, 63 ] 64 if loud: 65 cli_args.append("-v") 66 67 print(" ".join(cli_args)) 68 subprocess.run(cli_args, check=True) 69 70 return 0 71 72 73 if __name__ == "__main__": 74 sys.exit(main()) 75