Commit cd84b3dd authored by David M. Rogers's avatar David M. Rogers
Browse files

Additional changes for inp-loop.

parent 89e8aadb
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -38,8 +38,10 @@ def gen_targets(params, tag):
                print("While formatting %s in %s:"%(var, tag))
                raise e
        for n in eval(r, {}, {}):
            fmt = {}
            dict_merge(fmt, params)
            for ttype, tgt in params['loop'][tgtname].items():
                fmt = {var: n}
                fmt[var] = n
                yield ttype, tgt.format(**fmt)

# Determine if dirname / tname must be generated by pmake
+8 −9
Original line number Diff line number Diff line
@@ -96,7 +96,7 @@ class Rule:
        par = {}
        dict_merge(par, self.defaults)
        dict_merge(par, self.params)
        format_dict(par, kws, skip=["script", "inp"])
        format_dict(par, kws, skip=["script", "loop"])
        self.params = par
        assert 'rulename' in self.params, "Rule subclass must have rulename"
        assert 'dirname' in kws, "Instantiation must include dirname."
@@ -231,23 +231,22 @@ class RuleTypes:
                        "  conflicts with earlier target (%s: %s) declared by %s.\n"%(f2,ft,rn))
            self.files.append( (f, ftype, rname) )

    # Find the rule what produces this output filename
    def __getitem__(self, fname):
        for f, ftype, rname in self.files:
            m = f.match(fname)
            if m is False:
                continue
            params = {}
            if isinstance(m, tuple):
            if isinstance(m, tuple): # we match with a param substitution
                params[m[0]] = m[1]
            dict_merge(params, self.rules[rname])
            # TODO: deal with loop:
            if "inp" in params and isinstance(params["inp"], dict):
                format_dict(params["inp"], params)
            #if "loop" in params and isinstance(params["loop"], dict):
            #    format_dict(params["loop"], params)
            if isinstance(m, tuple): # substutite outputs like blob.{ext} ~> blob.txt
                for k, v in params["out"].items():
                    params["out"][k] = FMatch(v).matched(m[1])
                format_dict(params["inp"], params, skip=["loop"])
            #if isinstance(m, tuple): # substutite outputs like blob.{ext} ~> blob.txt
            #    for k, v in params["out"].items():
            #        params["out"][k] = FMatch(v).matched(m[1])
            format_dict(params["out"], params, skip=["loop"])
            return type(rname, (Rule,), {'params': params,
                                         'varname': f.var}), ftype
        raise KeyError(fname)