TSC=./node_modules/.bin/tsc
SASS=./node_modules/.bin/sass
MARKUP_FILES=$(wildcard src/index.hbs src/partials/*hbs)
STYLE_FILES=$(wildcard src/index.sass src/styles/*.sass)
SCRIPT_FILES=$(wildcard src/index.ts src/scripts/*.ts)
IMAGES=$(wildcard src/index.ts src/media/*.jpeg)
VIDEOS=$(wildcard src/index.ts src/media/*.mp4)

# ...

.DEFAULT_TARGET: all

all: build markup scripts styles media

build:
	mkdir -p $@
	touch $@

node_modules: package.json
	npm install
	touch $@

markup: build/index.html
build/index.html: $(MARKUP_FILES)
	hbs src/index.hbs --partial 'src/partials/*.hbs' -o ./build

scripts: build/index.js
build:index.js: tsconfig.json $(SCRIPT_FILES) node_modules
	$(TSC) --build $<
	
styles: build/index.css
build/index.css: $(STYLE_FILES) node_modules
	$(SASS) $< $@

media: images videos

images: $(IMAGES)
	for image in $^; do \
		imagemin $$image > build/media/$$image ; \
	done
	touch $@

videos: $(VIDEOS)
	for video in $^; do \
		HandBrakeCLI -i $$video -o build/media/$$video ; \
	done
	touch $@

.PHONY: clean
clean:
	rm -Rf ./build/*