# 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

## 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)

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 serializer query 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)

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

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

# uglify into jio.min.js and complex.min.js
uglify:
	$(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_CMD) $(LINT_FILES)

.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)"