#!/usr/bin/env fuchsia-vendored-python
# Copyright 2018 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
from pathlib import Path


def main():
    parser = argparse.ArgumentParser(
        description="Generate response file for FIDL frontend. "
        "Arguments not mentioned here are forwarded as is to fidlc."
    )
    parser.add_argument(
        "--out-response-file",
        help="The path for for the response file to generate",
        type=Path,
        required=True,
    )
    parser.add_argument(
        "--out-libraries",
        help="The path for for the libraries file to generate",
        type=Path,
        required=True,
    )
    parser.add_argument(
        "--sources", help="List of FIDL source files", nargs="+", required=True
    )
    parser.add_argument(
        "--dep-libraries", help="List of dependent libraries", nargs="*"
    )
    args, args_to_forward = parser.parse_known_args()

    # Each line contains a library's source files separated by spaces.
    # We use a dict instead of a set to maintain insertion order.
    dep_lines = {}
    for path in args.dep_libraries or []:
        with open(path) as f:
            for line in f:
                dep_lines[line.rstrip()] = True
    libraries = list(dep_lines)
    libraries.append(" ".join(sorted(args.sources)))

    args.out_libraries.parent.mkdir(parents=True, exist_ok=True)
    with open(args.out_libraries, "w") as f:
        print("\n".join(libraries), file=f)

    args.out_response_file.parent.mkdir(parents=True, exist_ok=True)
    with open(args.out_response_file, "w") as f:
        fidlc_args = args_to_forward + ["--files " + line for line in libraries]
        print(" ".join(fidlc_args), file=f)


if __name__ == "__main__":
    main()
