1#!/usr/bin/env python3 2""" 3vendor - QEMU python vendoring utility 4 5usage: vendor [-h] 6 7QEMU python vendoring utility 8 9options: 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 21import argparse 22import os 23from pathlib import Path 24import subprocess 25import sys 26import tempfile 27 28 29def 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.5.0": 45 "52b34f4903b882df52ad0d533146d4b992c018ea77399f825579737672ae7b20", 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 73if __name__ == "__main__": 74 sys.exit(main()) 75