#####################

DEBUG =

TESTS =

SOURCES_BASE = readline.vb types.vb reader.vb printer.vb
SOURCES_LISP = env.vb core.vb stepA_interop.vb
SOURCES = $(SOURCES_BASE) $(SOURCES_LISP)

#####################

SRCS = step0_repl.vb step1_read_print.vb step2_eval.vb \
       step3_env.vb step4_if_fn_do.vb step5_tco.vb step6_file.vb \
       step7_quote.vb step8_macros.vb step9_try.vb stepA_interop.vb

LIB_CS_SRCS = getline.cs
LIB_VB_SRCS = $(filter-out step%,$(filter %.vb,$(SOURCES)))

FLAGS = $(if $(strip $(DEBUG)),-debug:full,)

#####################

all: mal.exe $(patsubst %.vb,%.exe,$(SRCS))

mal.exe: $(patsubst %.vb,%.exe,$(word $(words $(SOURCES)),$(SOURCES)))
	cp $< $@

mal_cs.dll: $(LIB_CS_SRCS)
	mcs $(FLAGS) -target:library $+ -out:$@

mal_vb.dll: mal_cs.dll $(LIB_VB_SRCS)
	vbnc $(FLAGS) -target:library -r:mal_cs.dll $(LIB_VB_SRCS) -out:$@

%.exe: %.vb mal_vb.dll
	vbnc $(FLAGS) -r:mal_vb.dll -r:mal_cs.dll $<

clean:
	rm -f *.dll *.exe *.mdb

.PHONY: stats tests $(TESTS)

stats: $(SOURCES)
	@wc $^
stats-lisp: $(SOURCES_LISP)
	@wc $^

tests: $(TESTS)

$(TESTS):
	@echo "Running $@"; \
	./$@ || exit 1; \
