#!/usr/bin/env python3
# Copyright 2013 The Flutter 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


def main():
  parser = argparse.ArgumentParser(
      description='Executes a command, then rewrites the depfile, converts all absolute paths to relative'
  )
  parser.add_argument(
      '--depfile', help='Path to the depfile to rewrite', required=True
  )
  parser.add_argument(
      'command', nargs='+', help='Positional args for the command to run'
  )
  args = parser.parse_args()

  retval = subprocess.call(args.command)
  if retval != 0:
    return retval

  lines = []
  with open(args.depfile, 'r') as f:
    for line in f:
      lines.append(' '.join(os.path.relpath(p) for p in line.split()))
  with open(args.depfile, 'w') as f:
    f.write('\n'.join(lines))


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