xref: /openbmc/qemu/python/scripts/vendor.py (revision edc2107895007d621fe474d58bcb99036c8e55d2)
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