#!/usr/bin/env python3.8
# Copyright 2020 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.
'''Runs the zbi tool, taking care of unwrapping response files.'''

import argparse
import os
import subprocess


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--zbi', help='Path to the zbi tool', required=True)
    parser.add_argument(
        '--depfile', help='Path to the depfile generated for GN', required=True)
    parser.add_argument(
        '--rspfile',
        help='Path to the response file for the zbi tool',
        required=True)
    args, zbi_args = parser.parse_known_args()

    intermediate_depfile = args.depfile + ".intermediate"

    # Run the zbi tool.
    command = [
        args.zbi,
        '--depfile',
        intermediate_depfile,
    ]
    with open(args.rspfile, 'r') as rspfile:
        command.extend([l.strip() for l in rspfile.readlines()])
    subprocess.check_call(command + zbi_args)

    # Write the final depfile.
    with open(intermediate_depfile, 'r') as depfile:
        contents = depfile.read().strip()
    with open(args.depfile, 'w') as final_depfile:
        final_depfile.write(contents + ' ' + args.rspfile)

    # Remove the intermediate depfile.
    os.remove(intermediate_depfile)


if __name__ == '__main__':
    main()
