BINARIES=ecload ecload-tui

VERSION=0.1.0
BUILD:=`git rev-parse HEAD`

PLATFORMS=linux darwin windows
ARCHITECTURES=amd64

LDFLAGS=-ldflags "-s -X main.Version=${VERSION} -X main.Build=${BUILD}"

define BUILDER
bin/%/$(TARGET): cmd/$(TARGET)/*.go pkg/ecload/*.go
	GOOS=$$(patsubst %/,%,$$(dir $$*)) GOARCH=$$(notdir $$*) go build $(LDFLAGS) -v -o $$@ cmd/$(TARGET)/main.go
endef

$(foreach TARGET,$(BINARIES),$(eval $(BUILDER)))

dist/%.tar.gz:
	@mkdir -p ./dist

	$(eval TMP := $(shell mktemp -d))

	$(eval SANE=$(subst -,/,$*))
	$(eval INPUT=bin/$(SANE)/)
	$(eval PLATFORM=$(patsubst %/,%,$(dir $(SANE))))

	@cp -r $(INPUT)* $(TMP)

	@if [ "$(PLATFORM)" == "windows" ]; then \
		for FILE in $(TMP)/*; do mv $$FILE $$FILE.exe; done \
	fi

	tar -zcf $@ -C $(TMP) .

	@rm -rf $(TMP)

dist: binaries $(foreach GOOS, $(PLATFORMS), $(foreach GOARCH, $(ARCHITECTURES), dist/$(GOOS)-$(GOARCH).tar.gz))
binaries: $(foreach GOOS, $(PLATFORMS), $(foreach GOARCH, $(ARCHITECTURES), $(foreach BINARY, $(BINARIES), bin/$(GOOS)/$(GOARCH)/$(BINARY))))

all: dist

clean:
	rm -rf bin/ dist/
	go clean ./cmd/ecload ./cmd/ecload-tui ./pkg/ecload

.PHONY: all clean binaries dist