release ?=  ## Compile in release mode
mt ?=  ## Compile with -Dpreview_mt

SRCDIR = src
BINDIR = bin
BINS = $(BINDIR)/aya

SRCFILES = \
	$(SRCDIR)/Makefile \
	$(SRCDIR)/config.cr \
	$(SRCDIR)/listener.cr \
	$(SRCDIR)/main.cr \
	$(SRCDIR)/server.cr \
	$(SRCDIR)/socket-extensions.cr \
	$(SRCDIR)/support.cr \
	$(SRCDIR)/utils.cr

CSRCFILES = $(SRCDIR)/support.c

RELEASE_SRC_DIR = aya-$(shell cat src/main.cr | grep -E 'VERSION = "[0-9\.]+"$$' | sed -r 's/.*VERSION = "([0-9\.]+)"/\1/')
RELEASE_SRC_PKG = $(RELEASE_SRC_DIR).tar.xz
RELEASE_FILES = \
	LICENSE \
	Makefile \
	README.md \
	aya-cgi.md \
	sample-config.yml \
	shard.lock \
	shard.yml

override FLAGS += $(if $(release),--release )$(if $(stats),--stats )$(if $(mt),-Dpreview_mt )

.PHONY : all
all : $(BINS)

source-tarball : $(RELEASE_FILES) $(SRCFILES) $(CSRCFILES)
	$(eval TEMPDIR := $(shell mktemp -d))
	mkdir -p $(TEMPDIR)/$(RELEASE_SRC_DIR)
	$(foreach file,$(RELEASE_FILES), $(shell install -D -m0644 $(file) $(TEMPDIR)/$(RELEASE_SRC_DIR)/$(file)))
	$(foreach file,$(SRCFILES), $(shell install -D -m0644 $(file) $(TEMPDIR)/$(RELEASE_SRC_DIR)/$(file)))
	$(foreach file,$(CSRCFILES), $(shell install -D -m0644 $(file) $(TEMPDIR)/$(RELEASE_SRC_DIR)/$(file)))
	( cd $(TEMPDIR) && tar cvJf $(RELEASE_SRC_PKG) $(RELEASE_SRC_DIR))
	mv $(TEMPDIR)/$(RELEASE_SRC_PKG) .
	rm -rf $(TEMPDIR)

.PHONY : $(BINDIR)/aya
$(BINDIR)/aya : $(SRCFILES) $(CSRCFILES)
	cd src && $(MAKE)
	shards build $(FLAGS) -p $(notdir $@)

.PHONY : clean
clean :
	cd src && $(MAKE) clean
	$(RM) $(BINS)
	$(RM) $(RELEASE_SRC_PKG)
