jw-pkg/make/js.mk
Jan Lindemann fc017b624b js.mk: Don't minify without minifier
JS_MINIFY_FILTER_IN can be defined to nothing, in which case
minifying breaks, so don't minify if there's no filter. As an
additional benifit, defining it to the empty string in local.mk
allows to use Vim's quickfix window for syntax errors, because
there's no intermediate file created.

Signed-off-by: Jan Lindemann <jan@janware.com>
2025-12-11 17:23:22 +01:00

35 lines
1.6 KiB
Makefile

JAVA ?= /usr/bin/java
JS_MINIFY_FILTER_IN ?= sed 's/console\.[a-z]\+([^)]\+) *;//g'
JS_SRC ?= $(filter-out %.min.js,$(wildcard *.js))
JS_GENERATED ?= $(patsubst %.js,%.min.js,$(JS_SRC))
JS_EXTRA_EXTERNS ?=
JS_CC_BUILD_ROOT ?= $(PROJECTS_DIR)/closure-compiler/contrib/closure-compiler/install-root
JS_EXTERNS_DIRS ?= $(firstword $(wildcard $(JS_CC_BUILD_ROOT)/$(realpath $(PROJECTS_DIR))/closure-compiler/share/externs /opt/closure-compiler/share/externs))
JS_EXTERNS ?= $(sort $(JS_EXTRA_EXTERNS) jquery-3.3.js)
JS_EXTERN_PATHS ?= $(wildcard $(foreach d,$(JS_EXTERNS_DIRS),$(addprefix $d/,$(JS_EXTERNS))))
JS_MINIFY_OPTS ?= $(addprefix --externs ,$(JS_EXTERN_PATHS)) --compilation_level ADVANCED --strict_mode_input
JS_MINIFY_EXE ?= $(JAVA) -jar $(firstword $(wildcard \
$(JS_CC_BUILD_ROOT)/usr/share/java/closure-compiler.jar \
/usr/share/java/closure-compiler.jar \
) closure-compiler.jar-not-found)
JS_MINIFY ?= $(JS_MINIFY_EXE) $(JS_MINIFY_OPTS)
# This is not nice. It requires install-files to be included from elsewhere,
# which is not obvious. OTOH, if it isn't, SOURCE_FILES doesn't do any harm,
# either.
SOURCE_FILES += $(JS_GENERATED)
all: $(JS_GENERATED)
clean: minify.clean
%.min.js: %.js
ifneq ($(JS_MINIFY_FILTER_IN),)
cat $< | $(JS_MINIFY_FILTER_IN) > $@.filtered
$(JS_MINIFY) $@.filtered > $@.tmp
else
$(JS_MINIFY) $< > $@.tmp
endif
mv $@.tmp $@
minify.clean:
rm -f $(JS_GENERATED) *.tmp *.filtered