lua = lua
lunarml = lunarml
smlfmt = smlfmt
VERSION = 0.7.0

ml_sources = \
  src/md5.sml \
  src/map.sml \
  src/shell-util.sml \
  src/path-util.sml \
  src/fs-util.sml \
  src/os-util.sml \
  src/types.sml \
  src/safe-name.sml \
  src/tex-engine.sml \
  src/ansi-color.sml \
  src/message.sml \
  src/check-driver.sml \
  src/app-options.sml \
  src/auxfile.sml \
  src/luatexinit.sml \
  src/handle-options.sml \
  src/recovery.sml \
  src/reruncheck.sml \
  src/config-file.sml \
  src/main.sml

# smlfmt doesn't support vector expressions #[], record extension { ... = <exp> }, record update { ... where ... }
non_formatted_sources = \
  src/shell-util.sml \
  src/path-util.sml \
  src/fs-util.sml \
  src/os-util.sml \
  src/tex-engine.sml \
  src/message.sml \
  src/luatexinit.sml \
  src/handle-options.sml \
  src/reruncheck.sml \
  src/main.sml

formatted_sources = $(filter-out $(non_formatted_sources),$(ml_sources))

lua_sources = \
  src/texrunner/fsutil.lua \
  src/texrunner/luatexinit.lua \
  src/texrunner/isatty.lua \
  src/texrunner/pathutil.lua \
  src/texrunner/pathutil_unix.lua \
  src/texrunner/pathutil_windows.lua \
  src/texrunner/shellutil.lua \
  src/texrunner/shellutil_unix.lua \
  src/texrunner/shellutil_windows.lua \
  src/texrunner/fswatcher_windows.lua

all: bin/cluttex.lua bin/cluttex
.PHONY: all

src/cluttex-ml.lua: src/cluttex.mlb $(ml_sources)
	$(lunarml) compile -o "$@" src/cluttex.mlb

bin/cluttex.lua: build.lua src/cluttex-ml.lua $(lua_sources)
	@mkdir -p bin
	$(lua) build.lua $@
	$(lua) checkglobal.lua $@

bin/cluttex: build.lua src/cluttex-ml.lua $(lua_sources)
	@mkdir -p bin
	$(lua) build.lua --unix-shellscript $@
	$(lua) checkglobal.lua $@
	chmod +x $@

.PHONY: format
format:
	$(smlfmt) --force $(formatted_sources)

.PHONY: check-format
check-format:
	$(smlfmt) --check $(formatted_sources)

version_file=$(shell bin/cluttex --version 2>&1 | grep --only-matching -E 'v[[:digit:]]+(\.[[:digit:]]+)*' | sed 's/^v/VERSION_/;s/\./_/g')

check-version: all
	@bin/cluttex --version
	@$(lua) bin/cluttex.lua --version
	grep VERSION src/main.sml
	grep -i VERSION doc/cluttex.tex
	grep -i VERSION doc/cluttex-ja.tex
.PHONY: check-version

archive: all check-version
	bin/cluttex --version 2>&1 | awk '{print $2}' > $(version_file)
	git archive -o "cluttex-$(VERSION).tar.gz" --prefix=cluttex/bin/ --add-file=bin/cluttex --prefix=cluttex/ --add-file=$(version_file) HEAD
	git archive -o "cluttex-$(VERSION).zip" --prefix=cluttex/bin/ --add-file=bin/cluttex --prefix=cluttex/ --add-file=$(version_file) HEAD
.PHONY: archive
