blob: bafca724f41a735d4c61e8e66e93adc034c14652 [file] [log] [blame]
#!/usr/bin/env python3.8
# 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.
"""Launch a command and generate a Ninja depfile for it from an input hermetic inputs file."""
import argparse
import os
import subprocess
import sys
from typing import AbstractSet, Any, Callable, Collection, FrozenSet, Iterable, Optional, Sequence, TextIO, Tuple
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument(
'--hermetic-inputs-file',
required=True,
help="Path to input hermetic inputs file")
parser.add_argument(
'--outputs',
required=True,
nargs='*',
help='Action outputs, to be listed in generated depfile')
parser.add_argument(
'--depfile', required=True, help='Path to output depfile')
parser.add_argument(
'command', nargs=argparse.REMAINDER, help='Action command')
args = parser.parse_args()
# Read implicit inputs from file.
with open(args.hermetic_inputs_file) as f:
implicit_inputs = [l.rstrip() for l in f.readlines()]
# Read command, and remove initial -- if it is found.
cmd_args = args.command
if cmd_args[0] == '--':
cmd_args = cmd_args[1:]
# If command is a Python script, invoke it through the same interpreter.
tool = cmd_args[0]
if tool.endswith(('.py', '.pyz')):
cmd_args = [sys.executable, '-S'] + cmd_args
# Run the command.
subprocess.check_call(cmd_args)
# Generate the depfile.
with open(args.depfile, 'w') as f:
f.write(
'%s: %s\n' % (' '.join(args.outputs), ' '.join(implicit_inputs)))
return 0
if __name__ == "__main__":
sys.exit(main())