# dir
JIO_DIR     = src/jio
STORAGE_DIR = src/jio.storage
QUERIES_DIR = src/queries

# files
JIO         = jio.js
JIO_MIN     = jio.min.js
COMPLEX     = complex_queries.js
COMPLEX_MIN = complex_queries.min.js
PARSER_PAR  = $(QUERIES_DIR)/parser.par
PARSER_OUT  = $(QUERIES_DIR)/parser.js

## install npm package system wide -> npm -g install <package>

## js/cc using rhino
#JSCC_CMD    = rhino ~/modules/jscc/jscc.js -t ~/modules/jscc/driver_web.js_
# sh -c 'cd ; npm install jscc-node'
JSCC_CMD   	= node ~/node_modules/jscc-node/jscc.js -t ~/node_modules/jscc-node/driver_node.js_
# sh -c 'cd ; npm install jslint'
LINT_CMD	= $(shell which jslint || echo node ~/node_modules/jslint/bin/jslint.js) --terse
# sh -c 'cd ; npm install uglify-js'
UGLIFY_CMD	= $(shell which uglifyjs || echo node ~/node_modules/uglify-js/bin/uglifyjs)
# sh -c 'cd ; npm install phantomjs'
PHANTOM_CMD	= $(shell which phantomjs || echo ~/node_modules/phantomjs/bin/phantomjs)

auto: compile build lint
build: concat uglify

# The order is important!
CONCAT_JIO_NAMES = intro exceptions jio.intro storages/* commands/* jobs/status/* jobs/job announcements/announcement activityUpdater announcements/announcer jobs/jobIdHandler jobs/jobManager jobs/jobRules jio.core jio.outro jioNamespace outro
CONCAT_STORAGE_NAMES = *
CONCAT_QUERIES_NAMES = begin parser-begin parser parser-end tool queryfactory query simplequery complexquery end
LINT_NAMES  = exceptions storages/* commands/* jobs/status/* jobs/* announcements/* activityUpdater jio.core jioNamespace

CONCAT_QUERIES_FILES = $(CONCAT_QUERIES_NAMES:%=$(QUERIES_DIR)/%.js)
CONCAT_JIO_FILES = $(CONCAT_JIO_NAMES:%=$(JIO_DIR)/%.js)
LINT_FILES  = $(LINT_NAMES:%=$(JIO_DIR)/%.js) $(CONCAT_STORAGE_NAMES:%=$(STORAGE_DIR)/%.js) test/jio/*.js test/jio.storage/*.js test/queries/*.js

# build parser.js
compile:
	 #
	 ############################## Compile Query Parser ##############################
	$(JSCC_CMD) -o $(PARSER_OUT) $(PARSER_PAR)

# concat source files into jio.js and complex-queries.js
concat:
	 #
	 ############################## Concat JIO and Queries ##############################
	cat $(CONCAT_JIO_FILES) > "$(JIO)"
	cat $(CONCAT_QUERIES_FILES) > "$(COMPLEX)"

# uglify into jio.min.js and complex.min.js
uglify:
	 #
	 ############################## Uglify JIO and Queries ##############################
	$(UGLIFY_CMD) "$(JIO)" > "$(JIO_MIN)"
	$(UGLIFY_CMD) "$(COMPLEX)" > "$(COMPLEX_MIN)"

# lint all files in JIO and STORAGE and QUERIES DIR
# command: jslint [options] file
# [options] are defined at the top of the source file:
# Example:
# /*jslint indent: 2, maxlen: 80 */
# /*global hex_sha256: true, jQuery: true */
lint:
	 #
	 ############################## Lint All files ##############################
	echo; a="$$($(LINT_CMD) $(LINT_FILES))" ; [ $$? != 0 ] && echo "$$a" | grep -v 'OK\.$$' | uniq && false

phantom:
     #
     ############################## Phantom ##############################
	$(PHANTOM_CMD) test/run-qunit.js test/jiotests_withoutrequirejs.html | awk 'BEGIN {print "<!DOCTYPE html><html>"} /^<head>$$/, /^<\/body>$$/ {print} END {print "</html>"}' | sed -e 's,^ *<\(/\|\)script.*>$$,,g' > test/unit_test_result.html
	grep '^  <title>✔ ' test/unit_test_result.html > /dev/null

.phony: clean
clean:
	find -name '*~' -delete

realclean:
	rm -f "$(JIO)"
	rm -f "$(JIO_MIN)"
	rm -f "$(COMPLEX)"
	rm -f "$(COMPLEX_MIN)"
	rm -f "$(PARSER_OUT)"