12274817fSJohn Snow#!/usr/bin/env python3 22274817fSJohn Snow""" 32274817fSJohn Snowvendor - QEMU python vendoring utility 42274817fSJohn Snow 52274817fSJohn Snowusage: vendor [-h] 62274817fSJohn Snow 72274817fSJohn SnowQEMU python vendoring utility 82274817fSJohn Snow 92274817fSJohn Snowoptions: 102274817fSJohn Snow -h, --help show this help message and exit 112274817fSJohn Snow""" 122274817fSJohn Snow 132274817fSJohn Snow# Copyright (C) 2023 Red Hat, Inc. 142274817fSJohn Snow# 152274817fSJohn Snow# Authors: 162274817fSJohn Snow# John Snow <jsnow@redhat.com> 172274817fSJohn Snow# 182274817fSJohn Snow# This work is licensed under the terms of the GNU GPL, version 2 or 192274817fSJohn Snow# later. See the COPYING file in the top-level directory. 202274817fSJohn Snow 212274817fSJohn Snowimport argparse 222274817fSJohn Snowimport os 232274817fSJohn Snowfrom pathlib import Path 242274817fSJohn Snowimport subprocess 252274817fSJohn Snowimport sys 262274817fSJohn Snowimport tempfile 272274817fSJohn Snow 282274817fSJohn Snow 292274817fSJohn Snowdef main() -> int: 302274817fSJohn Snow """Run the vendoring utility. See module-level docstring.""" 312274817fSJohn Snow loud = False 322274817fSJohn Snow if os.environ.get("DEBUG") or os.environ.get("V"): 332274817fSJohn Snow loud = True 342274817fSJohn Snow 352274817fSJohn Snow # No options or anything for now, but I guess 362274817fSJohn Snow # you'll figure that out when you run --help. 372274817fSJohn Snow parser = argparse.ArgumentParser( 382274817fSJohn Snow prog="vendor", 392274817fSJohn Snow description="QEMU python vendoring utility", 402274817fSJohn Snow ) 412274817fSJohn Snow parser.parse_args() 422274817fSJohn Snow 432274817fSJohn Snow packages = { 443b087f79SPaolo Bonzini "meson==0.63.3": 453b087f79SPaolo Bonzini "d677b809c4895dcbaac9bf6c43703fcb3609a4b24c6057c78f828590049cf43a", 46*edc21078SPaolo Bonzini 47*edc21078SPaolo Bonzini "tomli==2.0.1": 48*edc21078SPaolo Bonzini "939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", 492274817fSJohn Snow } 502274817fSJohn Snow 512274817fSJohn Snow vendor_dir = Path(__file__, "..", "..", "wheels").resolve() 522274817fSJohn Snow 532274817fSJohn Snow with tempfile.NamedTemporaryFile(mode="w", encoding="utf-8") as file: 542274817fSJohn Snow for dep_spec, checksum in packages.items(): 55*edc21078SPaolo Bonzini print(f"{dep_spec} --hash=sha256:{checksum}", file=file) 562274817fSJohn Snow file.flush() 572274817fSJohn Snow 582274817fSJohn Snow cli_args = [ 592274817fSJohn Snow "pip", 602274817fSJohn Snow "download", 612274817fSJohn Snow "--dest", 622274817fSJohn Snow str(vendor_dir), 632274817fSJohn Snow "--require-hashes", 642274817fSJohn Snow "-r", 652274817fSJohn Snow file.name, 662274817fSJohn Snow ] 672274817fSJohn Snow if loud: 682274817fSJohn Snow cli_args.append("-v") 692274817fSJohn Snow 702274817fSJohn Snow print(" ".join(cli_args)) 712274817fSJohn Snow subprocess.run(cli_args, check=True) 722274817fSJohn Snow 732274817fSJohn Snow return 0 742274817fSJohn Snow 752274817fSJohn Snow 762274817fSJohn Snowif __name__ == "__main__": 772274817fSJohn Snow sys.exit(main()) 78