# -*- mode: perl6 -*- role WebCoso::Maker[$from,$to] { has $.wc; has $.basename; has $.dir; method process-contents($src) { ... } 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 get-file($path) { return $.wc.get-file($.dir,$path); } method dep-files() { return $.wc.load-deps($.dir,$.basename,$to); } method set-deps($deps) { $.wc.save-deps($.dir,$.basename,$to,$deps); } 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.langs -> $lang { my $src = $srcs.for-lang($lang)[0]; my $dst = $dsts.for-lang($lang)[0]; my @deps = $deps.for-lang($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} deps modified {@depsĀ».modified}"; next if $dst and $dst.modified >= all($src.modified,@depsĀ».modified.flat); say "Maker[$from,$to]($.dir/$.basename)::make processing $lang"; my ($processed-contents,@new_deps) = self.process-contents( $src, ); $dsts.set-for-lang( $lang, $.wc.put-file($.dir,$.basename,$lang,$to, $processed-contents), ); $deps.set-for-lang($lang,@new_deps) if @new_deps; } $.set-deps($deps); return $dsts; } }