.PHONY: build release check-version test test-integration test-integration-compile fmt vet downloads website website-preview

VERSION ?= dev
override define XIAOYU_NEWLINE


endef
ifneq ($(findstring $(XIAOYU_NEWLINE),$(value VERSION)),)
$(error VERSION must not contain newlines)
endif
override VERSION_SHELL := '$(subst ','"'"',$(value VERSION))'
unexport VERSION VERSION_SHELL

build: scripts/check-version.awk | bin
	@version=$(VERSION_SHELL); \
		if ! printf '%s\n' "$$version" | awk -v allow_dev=1 -f scripts/check-version.awk; then \
			echo "VERSION must be dev or a v-prefixed semantic version" >&2; exit 1; \
		fi; \
		go build -trimpath -ldflags "-X main.version=$$version" -o bin/xiaoyu ./cmd/xiaoyu

release: scripts/check-version.awk | bin
	@version=$(VERSION_SHELL); \
		if ! printf '%s\n' "$$version" | awk -v allow_dev=0 -f scripts/check-version.awk; then \
			echo "release requires a v-prefixed semantic VERSION (for example, make release VERSION=v1.2.3)" >&2; exit 1; \
		fi; \
		go build -trimpath -ldflags "-s -w -X main.version=$$version" -o bin/xiaoyu ./cmd/xiaoyu; \
		test "$$(./bin/xiaoyu version)" = "xiaoyu $$version"

check-version: scripts/check-version.awk
	@version=$(VERSION_SHELL); \
		if ! printf '%s\n' "$$version" | awk -v allow_dev=1 -f scripts/check-version.awk; then \
			echo "VERSION must be dev or a v-prefixed semantic version" >&2; exit 1; \
		fi

bin:
	mkdir -p bin

test:
	go test ./...

test-integration:
	go test -tags=integration -timeout="$${XIAOYU_INTEGRATION_TEST_TIMEOUT:-35m}" -v ./integration

test-integration-compile:
	go test -tags=integration -run '^$$' ./integration

fmt:
	gofmt -w $$(find . -name '*.go' -not -path './vendor/*')

vet:
	go vet ./...

downloads: scripts/build-downloads.sh scripts/check-version.awk
	@VERSION=$(VERSION_SHELL) sh scripts/build-downloads.sh

website: downloads
	python3 scripts/build-website.py

website-preview: website
	python3 -m http.server 8080 --bind 127.0.0.1 --directory dist/website
