Combine templating+compiling+afterprocessing into one step.

This commit is contained in:
ccd0 2016-04-19 02:45:22 -07:00
parent c89a977963
commit 033031c905
2 changed files with 31 additions and 22 deletions

View File

@ -136,33 +136,17 @@ $(foreach p, \
$(eval $(call concatenate,$(p))) \
)
tmp/platform_crx.jst tmp/platform_userscript.jst : tmp/platform.jst
$(CP)
to_compile := $(subst platform,platform_crx platform_userscript,$(parts))
to_interpolate := $(filter-out platform,$(parts)) platform_crx platform_userscript
define interpolate
tmp/$1.$$(call lang,$1) : tmp/$1.jst $$(call imports,$1) $(template_deps)
$(template) $$< $$@ $$(if $$(findstring platform_,$1),type=$$(subst platform_,,$1))
endef
$(foreach p, $(to_interpolate), $(eval $(call interpolate,$(p))))
tmp/platform_%.coffee : tmp/platform.jst $(call imports,platform) $(template_deps)
$(template) $< $@ type=$*
to_compile := $(filter-out globals css platform,$(parts)) platform_crx platform_userscript
define compile
tmp/$1.js : tmp/$1.coffee $(coffee_deps) tools/globalize.js
define force_compile
tmp/$1.js : tmp/$$(firstword $$(subst _, ,$1)).jst $$(call imports, $$(firstword $$(subst _, ,$1)))
$(RM) $$@
endef
$(foreach p, $(to_compile), $(eval $(call compile,$(p))))
$(foreach p, $(to_compile), $(eval $(call force_compile,$(p))))
.events/compile : $(foreach p, $(to_compile), tmp/$(p).js) | .events
$(coffee) $(subst .js,.coffee,$?)
node tools/globalize.js $(subst tmp/,,$(subst .js,,$?))
.events/compile : $(patsubst %,tmp/%.js,$(to_compile)) $(template_deps) $(coffee_deps) tools/globalize.js tools/chain.js | .events
node tools/chain.js $(filter $(to_compile),$(patsubst tmp/%.js,%,$?))
echo -> $@
tmp/eventPage.js : src/meta/eventPage.coffee $(coffee_deps) | tmp

25
tools/chain.js Normal file
View File

@ -0,0 +1,25 @@
var fs = require('fs');
var template = require('./template');
var coffee = require('coffee-script');
var globalize = require('./globalize');
for (var name of process.argv.slice(2)) {
try {
var parts = name.split('_');
var basename = parts[0]; // e.g. template_crx -> template
var script = fs.readFileSync(`tmp/${basename}.jst`, 'utf8');
script = script.replace(/\r\n/g, '\n');
script = template(script, {type: parts[1]});
if (fs.readdirSync(`src/${basename}`).some(f => /\.coffee$/.test(f))) {
script = coffee.compile(script);
var varNames = globalize.getNames(name);
script = globalize.globalize(script, varNames);
}
fs.writeFileSync(`tmp/${name}.js`, script);
} catch (err) {
console.error(`Error processing ${name}`);
throw err;
}
}