#!/usr/bin/env fuchsia-vendored-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.
"""Assert that drivers aren't included in the build without a driver component"""

import json
import argparse


def main():
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument(
        "--metadata_file",
        type=argparse.FileType("r", encoding="UTF-8"),
        help="Path to the metadata file which tried to collect data about drivers",
    )
    parser.add_argument(
        "--output",
        type=argparse.FileType("w", encoding="UTF-8"),
        help="The path for the output file for the build.",
    )

    args = parser.parse_args()

    lines = args.metadata_file.readlines()
    if len(lines) != 0:
        print("All drivers should have driver components. These do not:")
        for line in lines:
            print("   " + line, end="")
        print(
            "Please visit https://fuchsia.dev/fuchsia-src/development/drivers/developer_guide/driver-development for how drivers should be included."
        )
        raise Exception("Found drivers that weren't driver components")
    args.output.write("passed")


if __name__ == "__main__":
    main()
