build/lexer.js: node_modules
	@echo \
		"var requirejs = require('requirejs');" \
		"requirejs.config(require('./src/config'));" \
		"console.log(JSON.stringify(requirejs('lexer/grammar')));" \
		| node \
		| ./node_modules/.bin/jison-lex -t amd \
		> build/lexer.js

build/parser.js: node_modules
	@echo \
		"var requirejs = require('requirejs');" \
		"requirejs.config(require('./src/config'));" \
		"console.log(JSON.stringify(requirejs('parser/grammar')));" \
		| node \
		| ./node_modules/.bin/jison --json \
		| sed 's/define(function(require){/define(["node\/index"], function(Node) {/g' \
		> build/parser.js

build/sassolite.js: build/lexer.js build/parser.js
	./node_modules/.bin/r.js -o build/vanilla/config.js \
		name=../node_modules/almond/almond \
		include=./sassolite \
		uglify=none \
		out=./build/tmp.js
	./node_modules/.bin/uglifyjs \
		--beautify \
		--no-copyright \
		--no-dead-code \
		--no-mangle \
		--no-squeeze \
		< build/tmp.js \
		> build/sassolite.js

build/sassolite.min.js: build/lexer.js build/parser.js
	./node_modules/.bin/r.js -o build/vanilla/config.js \
		name=../node_modules/almond/almond \
		include=./sassolite \
		uglify=none \
		out=./build/tmp.js
	./node_modules/.bin/uglifyjs \
		< build/tmp.js \
		> build/sassolite.min.js

clean:
	rm -f build/*.js
	rm -f src/lexer/build.js
	rm -f src/parser/build.js

node_modules:
	npm install

test: test/unit test/cli test/sass test/build

test/build: build/sassolite.js build/sassolite.min.js
	./node_modules/.bin/mocha-phantomjs test/build/vanilla.html
	./node_modules/.bin/mocha-phantomjs test/build/minified.html

test/cli: node_modules
	./node_modules/.bin/cucumber-js test/cli

test/sass: node_modules
	./node_modules/.bin/mocha test/sass/index.js

test/unit: node_modules build/lexer.js build/parser.js
	./node_modules/.bin/mocha -r test/unit/index.js test/unit/*.js

.PHONY: \
	clean \
	test \
	test/build \
	test/cli \
	test/sass \
	test/unit
