#!/usr/bin/env python3 import argparse import os import pathlib import subprocess import sys def main(): parser = argparse.ArgumentParser(description="Install vcpkg dependencies") parser.add_argument("--cc", type=str, required=True, help="The C compiler to use") parser.add_argument("--cxx", type=str, required=True, help="The C++ compiler to use") parser.add_argument("--manifest", type=str, required=True, help="The vcpkg manifest to install") parser.add_argument("--vcpkg", type=str, required=True, help="The path to the vcpkg executable") parser.add_argument("--vcpkg-root", type=str, required=True, help="The path to the vcpkg root directory") parser.add_argument("--vcpkg-triplet", type=str, required=True, help="The vcpkg triplet to use") parser.add_argument("--vcpkg-overlay-triplets", type=str, help="Path to a vcpkg overlay triplets directory") parser.add_argument("--vcpkg-binary-cache-dir", type=str, help="Path to a vcpkg binary cache directory") parser.add_argument("--stamp-file", type=str, help="Path to a file to touch after installation") parser.add_argument("install_directory", type=str, help="The directory to install vcpkg deps into") args = parser.parse_args() manifest_directory = pathlib.Path(args.manifest).parent env = os.environ.copy() env["CC"] = args.cc env["CXX"] = args.cxx vcpkg_arguments = [ args.vcpkg, "install", "--no-print-usage", "--x-wait-for-lock", f"--triplet={args.vcpkg_triplet}", f"--vcpkg-root={args.vcpkg_root}", f"--x-manifest-root={manifest_directory}", f"--x-install-root={args.install_directory}", ] if args.vcpkg_overlay_triplets: vcpkg_arguments += [f"--overlay-triplets={args.vcpkg_overlay_triplets}"] if args.vcpkg_binary_cache_dir: binary_cache_dir = pathlib.Path(args.vcpkg_binary_cache_dir).absolute() vcpkg_arguments += [f"--binarysource=clear;files,{binary_cache_dir},readwrite"] subprocess.run(vcpkg_arguments, env=env, check=True) if args.stamp_file: pathlib.Path(args.stamp_file).touch() return 0 if __name__ == "__main__": sys.exit(main())