role WebCoso::Maker[$from,$to] {
has $.wc;
has $.basename;
has $.dir;
method process-contents(:$src,:@deps) { ... }
method dest-files() {
say "Maker[$from,$to]($.dir/$.basename)::dest-files";
return $.wc.get-files($.dir,$.basename,$to,:!make);
}
method src-files() {
say "Maker[$from,$to]($.dir/$.basename)::src-files";
return $.wc.get-files($.dir,$.basename,$from);
}
method dep-files() {
return Hash;
}
method make() {
say "Maker[$from,$to]($.dir/$.basename)::make";
my %srcs = $.src-files();
my %dsts = $.dest-files();
my %deps = $.dep-files();
say "Maker[$from,$to]($.dir/$.basename)::make from {%srcs.perl} and {%deps.perl} to {%dsts.perl}";
for %srcs.keys -> $lang {
my $src = %srcs{$lang};
my $dst = %dsts{$lang};
my @deps = %deps{$lang} // ();
say "Maker[$from,$to]($.dir/$.basename)::make lang $lang";
say "Maker[$from,$to]($.dir/$.basename)::make dst modified {$dst ?? $dst.modified !! 'not-there'} src modified {$src.modified}";
next if $dst and $dst.modified after
all($src.modified,@deps».modified.flat);
say "Maker[$from,$to]($.dir/$.basename)::make processing $lang";
my $processed-contents = self.process-contents(
src => $src.slurp,
deps => @deps».slurp,
);
%dsts{$lang} = $.wc.put-file($.dir,$.basename,$lang,$to,
$processed-contents)
}
return %dsts;
}
}