CC = java -jar ./build/yuicompressor-2.4.8.jar
CFlAGS = WHITESPACE_ONLY
SOURCES_FILES = util4js.js \
								object.js \
								exception.js \
								argument_exception.js \
								argument_null_exception.js \
								index_out_of_range_exception.js \
								iiterator.js \
								iiteratable.js \
								iterator.js \
								ilist.js\
								list.js \
								iset.js \
								set_iterator.js \
								set.js \
								idictionary.js \
								key_value_pair.js \
								dictionary_iterator.js \
								dictionary.js \
								istack.js \
								stack.js \
								iqueue.js \
								queue.js \
								iiteratable_extensions.js \
								event.js \
								ievent_target.js \
								event_dispatcher.js \
								component.js

all: build-node build-browser

clean: clean-node clean-browser

build-node: lib/util4js.js

lib/util4js.js: clean-node
	echo "\"use strict\";\n" >> $@
	cat $(addprefix src/,$(SOURCES_FILES)) >> $@

clean-node:
	rm -f ./lib/util4js.js

run-examples-node:
	node ./examples/node/object.js
	node ./examples/node/exception.js
	node ./examples/node/iterator.js
	node ./examples/node/list.js
	node ./examples/node/list_with_object.js
	node ./examples/node/dictionary.js
	node ./examples/node/dictionary_with_object_key.js
	node ./examples/node/dictionary_constructor.js
	node ./examples/node/set.js
	node ./examples/node/set_with_object.js
	node ./examples/node/stack.js
	node ./examples/node/stack_with_object.js
	node ./examples/node/queue.js
	node ./examples/node/queue_with_object.js
	node ./examples/node/event.js

build-browser: util4js.min.js

util4js.js: clean-browser
	echo "\$$namespace(\"util4js\");\n" >> $@
	echo "var util4js = \$$module(function (exports, global) {\n" >> $@
	echo "\"use strict\";\n" >> $@
	cat $(addprefix src/,$(SOURCES_FILES)) >> $@
	echo "\n}, [window]);" >> $@

util4js.min.js: util4js.js
	$(CC) --type js --nomunge --preserve-semi --disable-optimizations $^ -o $@
	node ./build/include-strict-mode.js

clean-browser:
	rm -f util4js.js
	rm -f util4js.min.js

run-examples-browser:
	xdg-open ./examples/browser/index.html

run-examples-phantomjs:
	phantomjs ./examples/node/object.js
	phantomjs ./examples/node/exception.js
	phantomjs ./examples/node/iterator.js
	phantomjs ./examples/node/list.js
	phantomjs ./examples/node/list_with_object.js
	phantomjs ./examples/node/dictionary.js
	phantomjs ./examples/node/dictionary_with_object_key.js
	phantomjs ./examples/node/dictionary_constructor.js
	phantomjs ./examples/node/set.js
	phantomjs ./examples/node/set_with_object.js
	phantomjs ./examples/node/stack.js
	phantomjs ./examples/node/stack_with_object.js
	phantomjs ./examples/node/queue.js
	phantomjs ./examples/node/queue_with_object.js
	phantomjs ./examples/node/event.js
