Now we can rebuild at the level of individual files.

This commit is contained in:
ccd0 2016-04-19 04:58:30 -07:00
parent 033031c905
commit 6714a4e8c7
3 changed files with 40 additions and 44 deletions

View File

@ -47,11 +47,13 @@ parts := \
lang = $(if $(filter globals css,$1),js,coffee)
# remove extension when sorting so X.coffee comes before X.Y.coffee
sources_lang = \
$(subst !,.$2,$(sort $(subst .$2,!, \
$(wildcard src/$1/*.$2))))
sources_part = \
$(subst !c,.coffee,$(subst !j,.js,$(sort $(subst .coffee,!c,$(subst .js,!j, \
$(wildcard src/$1/*.coffee src/$1/*.js))))))
sources = $(call sources_lang,$1,$(call lang,$1))
sources := $(foreach p,$(parts),$(call sources_part,$(p)))
part_of = $(patsubst src/%/,%,$(dir $1))
imports = \
$(filter-out %.coffee %.js,$(wildcard src/$1/*.* src/$1/*/*.* src/$1/*/*/*.*)) \
@ -68,13 +70,17 @@ imports_css := \
imports_Monitoring := \
src/meta/icon128.png
intermediate = \
dests_platform = $(addprefix tmp/,$(subst /,-,$(subst src/,,$(subst platform,platform_$2,$(subst .coffee,.js,$1)))))
dests_of = $(sort $(call dests_platform,$1,crx) $(call dests_platform,$1,userscript))
dests = $(foreach s,$(sources),$(call dests_of,$(s)))
pieces = \
LICENSE \
src/meta/fbegin.js \
tmp/declaration.js \
$(foreach p, \
$(subst platform,platform_$1,$(parts)) \
,tmp/$(p).js) \
$(foreach s,$(sources),$(call dests_platform,$(s),$1)) \
src/meta/fend.js
crx_contents := script.js eventPage.js icon16.png icon48.png icon128.png manifest.json
@ -91,8 +97,6 @@ script := $(foreach f,$(filter-out %.crx %.zip,$(release)),test$(f)) $(foreach t
crx := $(foreach f,$(filter %.crx %.zip,$(release)),test$(f))
jshint := $(foreach f,$(subst platform,platform_crx platform_userscript,$(parts)),.events/jshint.$(f))
default : script jshint install
all : default release
@ -126,27 +130,15 @@ endif
tmp/declaration.js : .events/declare
$(if $(wildcard $@),,node tools/declare.js && echo -> $^)
define concatenate
tmp/$1.jst : $$(call sources,$1) $(cat_deps) | tmp
$(cat) $$(subst $$$$,$$(ESC_DOLLAR),$$(call sources,$1)) $$@
endef
$(foreach p, \
$(parts), \
$(eval $(call concatenate,$(p))) \
)
to_compile := $(subst platform,platform_crx platform_userscript,$(parts))
define force_compile
tmp/$1.js : tmp/$$(firstword $$(subst _, ,$1)).jst $$(call imports, $$(firstword $$(subst _, ,$1)))
$(RM) $$@
$$(call dests_of,$1) : $1 $$(call imports,$$(call part_of,$1)) $$(template_deps) $$(coffee_deps) tools/globalize.js tools/chain.js
$(RM) $$(subst $$$$,$$(ESC_DOLLAR),$$@)
endef
$(foreach p, $(to_compile), $(eval $(call force_compile,$(p))))
$(foreach s,$(sources),$(eval $(call force_compile,$(subst $$,$$$$,$(s)))))
.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,%,$?))
.events/compile : $(dests) | .events
node tools/chain.js $(subst $$,$(ESC_DOLLAR),$?)
echo -> $@
tmp/eventPage.js : src/meta/eventPage.coffee $(coffee_deps) | tmp
@ -157,8 +149,8 @@ define rules_channel
testbuilds/crx$1 :
$$(MKDIR)
testbuilds/crx$1/script.js : $(call intermediate,crx) $(cat_deps) | testbuilds/crx$1 .events/compile
$(cat) $(call intermediate,crx) $$@
testbuilds/crx$1/script.js : $$(call pieces,crx) $(cat_deps) | testbuilds/crx$1 .events/compile
$(cat) $$(subst $$$$,$$(ESC_DOLLAR),$$(call pieces,crx)) $$@
testbuilds/crx$1/eventPage.js : tmp/eventPage.js | testbuilds/crx$1
$$(CP)
@ -183,8 +175,8 @@ testbuilds/$(name)$1.crx : testbuilds/$(name)$1.crx.zip package.json tools/sign.
testbuilds/$(name)$1.meta.js : src/meta/metadata.js src/meta/icon48.png version.json $(template_deps) | testbuilds
$(template) $$< $$@ type=userscript channel=$1
testbuilds/$(name)$1.user.js : testbuilds/$(name)$1.meta.js $(call intermediate,userscript) $(cat_deps) | .events/compile
$(cat) testbuilds/$(name)$1.meta.js $(call intermediate,userscript) $$@
testbuilds/$(name)$1.user.js : testbuilds/$(name)$1.meta.js $$(call pieces,userscript) $(cat_deps) | .events/compile
$(cat) testbuilds/$(name)$1.meta.js $$(subst $$$$,$$(ESC_DOLLAR),$$(call pieces,userscript)) $$@
endef
@ -204,12 +196,15 @@ test.html : README.md template.jst tools/markdown.js node_modules/marked/package
index.html : test.html
$(CP)
tmp/.jshintrc : src/meta/jshint.json tmp/declaration.js tmp/globals.js $(template_deps) | tmp
tmp/.jshintrc : src/meta/jshint.json tmp/declaration.js tmp/globals-globals.js $(template_deps) | tmp
$(template) $< $@
.events/jshint.% : tmp/%.js tmp/.jshintrc node_modules/jshint/package.json | .events/compile
$(BIN)jshint $<
echo -> $@
$(RM) $(subst $$,$(ESC_DOLLAR),$@)
.events/jshint : $(patsubst tmp/%.js,.events/jshint.%,$(dests))
$(BIN)jshint $(subst $$,$(ESC_DOLLAR),$(patsubst .events/jshint.%,tmp/%.js,$?))
echo -> $@ $(addprefix && echo -> ,$(subst $$,$(ESC_DOLLAR),$?))
install.json :
echo {}> $@
@ -261,7 +256,7 @@ crx : $(crx)
release : $(release)
jshint : $(jshint)
jshint : .events/jshint
install : .events/install

View File

@ -23,7 +23,7 @@
%><%=
read('tmp/declaration.js').match(/^var (.*);/)[1].split(', ').map(x => `,\n "${x}": true`).join('')
%><%=
read('tmp/globals.js').match(/^var (.*);/)[1].split(', ').map(x => `,\n "${x}": true`).join('')
read('tmp/globals-globals.js').match(/^var (.*);/)[1].split(', ').map(x => `,\n "${x}": true`).join('')
%>
}
}

View File

@ -5,17 +5,18 @@ 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');
var parts = name.match(/^tmp\/([^_]*)(?:_(.*))?-(.*)\.js$/);
var basename = fs.readdirSync(`src/${parts[1]}`).filter(x => (x === `${parts[3]}.coffee` || x === `${parts[3]}.js`))[0];
var script = fs.readFileSync(`src/${parts[1]}/${basename}`, '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 = template(script, {type: parts[2]});
if (/\.coffee$/.test(basename)) {
script = coffee.compile(script);
var varNames = globalize.getNames(name);
script = globalize.globalize(script, varNames);
if (/^([$A-Z][$\w]*)\.coffee$/.test(basename)) {
script = globalize.globalize(script, [parts[3]]);
}
}
fs.writeFileSync(`tmp/${name}.js`, script);
fs.writeFileSync(name, script);
} catch (err) {
console.error(`Error processing ${name}`);
throw err;