MINIFIED_SCRIPTS = safeview-min.js viewwin-min.js ui-min.js

INSTALL_DIR ?= third-party/
INSTALL_TARGETS := $(addprefix $(INSTALL_DIR)/, $(MINIFIED_SCRIPTS))

# Use := to avoid dynamic re-evaluation on each use.
# Use \# to escape comment.
tc_modules := $(shell awk '{ if (!match($$1, "\#.*")) print $$1 }' BUNDLE)

novnc_modules := $(shell awk '{ if (!match($$1, "\#.*")) print $$1 }' noVNC/BUNDLE)
novnc_modules := $(addprefix noVNC/, $(novnc_modules))

ui_modules := $(shell awk '{ if (!match($$1, "\#.*")) print $$1 }' UI_BUNDLE)

tc_minifiables := $(filter-out %min.js, $(tc_modules))
tc_minifiables := $(filter-out %minified.js, $(tc_minifiables))
# Note that ordering matters here, we need jquery-minified first.
tc_minified := $(filter %minified.js, $(tc_modules))
tc_minified += $(filter %min.js, $(tc_modules))

ui_minifiables := $(filter-out %min.js, $(ui_modules))
ui_minifiables := $(filter-out %minified.js, $(ui_minifiables))
# Note that ordering matters here, we need jquery-minified first.
ui_minified := $(filter %minified.js, $(ui_modules))
ui_minified += $(filter %min.js, $(ui_modules))

tc_lintables := $(filter-out third-party/%.js, $(tc_modules))
tc_lintables := $(filter-out noVNC/%.js, $(tc_lintables))

# 03/10/2014: These files are known to have JSLint issues that haven't been
# fully fixed yet - kowsik.
#
# logger.js blacklisted b/c JsLint forbids this legitimate use of case
# fallthrough, and there doesn't seem to be a way to selectively disable it.
#
# media-objects.js, controlled-objects.js: jslint is unhappy with perfectly
# legitimate uses of continue, in,...
blacklist := \
   dom.js local-events.js logger.js util.js media-objects.js \
   controlled-objects.js
tc_lintables := $(filter-out $(blacklist), $(tc_lintables))

all: $(MINIFIED_SCRIPTS)

uninstall:
	@rm -f $(INSTALL_TARGETS)

# Install the thin-client in the WWW directory, thus enabling service to
# serve it to clients.
install: uninstall $(INSTALL_TARGETS)

$(INSTALL_TARGETS): $(INSTALL_DIR)/%: %
	ln -s $(shell pwd)/$< $@

safeview-min.js: ${tc_minified} ${tc_minifiables}
	@uglifyjs ${tc_minifiables} -o temp.min.js -c \
	pure_funcs=[\'log.debug\',\'dom_log.debug\',\'self.log.debug\',\'Logger\']
	@cat ${tc_minified} temp.min.js > $@
	@rm temp.min.js

ui-min.js: ${ui_minified} ${ui_minifiables}
	@uglifyjs ${ui_minifiables} -o temp.min.js -c \
	pure_funcs=[\'log.debug\',\'dom_log.debug\',\'self.log.debug\',\'Logger\']
	@cat ${ui_minified} temp.min.js > $@
	@rm temp.min.js

viewwin-min.js: ${novnc_modules}
	@uglifyjs $^ -o $@ -c

lint: $(tc_lintables)
	@echo -n "JSLint "; \
        jslint --terse $(tc_lintables) && echo;

clean: uninstall
	@rm -f $(MINIFIED_SCRIPTS)
