#!/usr/bin/env python3

import json
import sys


depfile = sys.argv[1]
out = sys.argv[2]
ins = sys.argv[3:]

disc = []


class Rule(object):
    def __init__(self, fname, dyn, dynout):
        self.fname = fname
        self.dyn = dyn
        self.dynout = dynout


rules = []
for fname in ins:
    with open(fname, 'r') as fin:
        j = json.load(fin)
    rules.append(Rule(j['fname'], j['dyn'], j['dynout']))

with open(depfile, 'w') as fout:
    if not disc:
        fout.write(f'{out}:\n')
    for dep in disc:
        fout.write(f'{out}: {dep}\n')

with open(out, 'w') as fout:
    fout.write('ninja_dyndep_version = 1.0\n')
    for rule in rules:
        dyn_reqs = ''
        if rule.dyn:
            dyn_list = ' '.join(rule.dyn)
            dyn_reqs = f' | {dyn_list}'
        dyn_provs = ''
        if rule.dynout:
            dyn_list = '\\\n    '.join(rule.dynout)
            dyn_provs = f' | {dyn_list}'
        fout.write(f'build {rule.fname}.out{dyn_provs}: dyndep{dyn_reqs}\n')
        if rule.dynout:
            fout.write('    restat = 1\n')
