from build.ab import Rule, normalrule, Target, filenameof, Targets
from os.path import basename


@Rule
def objectify(self, name, src: Target, symbol):
    normalrule(
        replaces=self,
        ins=["build/_objectify.py", src],
        outs=[basename(filenameof(src)) + ".h"],
        commands=["$(PYTHON) {ins[0]} {ins[1]} " + symbol + " > {outs}"],
        label="OBJECTIFY",
    )


@Rule
def test(
    self,
    name,
    command: Target = None,
    commands=None,
    ins: Targets = [],
    deps: Targets = [],
    label="TEST",
):
    if command:
        normalrule(
            replaces=self,
            ins=[command],
            outs=["sentinel"],
            commands=["{ins[0]}", "touch {outs}"],
            deps=deps,
            label=label,
        )
    else:
        normalrule(
            replaces=self,
            ins=ins,
            outs=["sentinel"],
            commands=commands + ["touch {outs}"],
            deps=deps,
            label=label,
        )
