#!/usr/bin/env python
# Copyright 2021 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import argparse
import os
import subprocess
import sys
import pipes


def main():
    parser = argparse.ArgumentParser("Generate media driver dep file")
    parser.add_argument("depsfile")
    parser.add_argument("--input-dir", action='append')
    args = parser.parse_args()

    find_args = ["find"]
    find_args += args.input_dir
    find_args += ["-path", "*/.git", "-prune", "-o", "-type", "f", "-print"]

    files = subprocess.check_output(find_args)
    file_lines = files.splitlines()

    va_install_dir = "build-intel-media-driver/install"

    print("DEPSFILE", args.depsfile)

    with open(args.depsfile, "w") as depsfile:
        for output_file in ["lib/libva.so.2", "lib/libva-magma.so.2",
                            "lib/libigdgmm.so.11", "iHD_drv_video.so"]:
            depsfile.write(os.path.join(va_install_dir, output_file) + ": ")
            depsfile.write(" ".join(x.replace(' ', '\\ ') for x in file_lines))
            depsfile.write("\n")
    return 0


if __name__ == "__main__":
    sys.exit(main())
