# VERSION
# If no version is specified as a parameter of make, the last git hash
# value is taken.
VERSION?=$(shell git describe --abbrev=0)+$(shell date +'%Y%m%d%H%I%S')

# GOPROXY settings
# If no GOPROXY environment variable available, the pre-defined GOPROXY from go
# env to download and validate go modules is used. Exclude downloading and
# validation of all private modules which are pre-defined in GOPRIVATE. If no
# GOPRIVATE variable defined, the variable of go env is used.
GOPROXY?=$(shell go env GOPROXY)
GOPRIVATE?=$(shell go env GOPRIVATE)

# CONTAINER_RUNTIME
# The CONTAINER_RUNTIME variable will be used to specified the path to a
# container runtime. This is needed to start and run a container images.
CONTAINER_RUNTIME?=$(shell which docker)
CONTAINER_IMAGE_VERSION?=latest

# EXECUTABLE
EXECUTABLE=set-sshkeys

# BINARIES
# ==============================================================================
EXECUTABLE_TARGETS:= \
	bin/linux/amd64/${EXECUTABLE} \
	bin/linux/arm/5/${EXECUTABLE} \
	bin/linux/arm/7/${EXECUTABLE} \
	bin/tmp/${EXECUTABLE}

${EXECUTABLE}: bin/tmp/${EXECUTABLE}

bin/linux/amd64/${EXECUTABLE}:
	GOOS=linux \
	GOARCH=amd64 \
	GOPROXY=${GOPROXY} \
	GOPRIVATE=${GOPRIVATE} \
		go build -ldflags "-X main.version=${VERSION:v%=%}" -o ${@}

bin/linux/arm/5/${EXECUTABLE}:
	GOOS=linux \
	GOARCH=arm \
	GOARM=5 \
	GOPROXY=${GOPROXY} \
	GOPRIVATE=${GOPRIVATE} \
		go build -ldflags "-X main.version=${VERSION:v%=%}" -o ${@}

bin/linux/arm/7/${EXECUTABLE}:
	GOOS=linux \
	GOARCH=arm \
	GOARM=7 \
	GOPROXY=${GOPROXY} \
	GOPRIVATE=${GOPRIVATE} \
		go build -ldflags "-X main.version=${VERSION:v%=%}" -o ${@}

bin/tmp/${EXECUTABLE}:
	GOPROXY=${GOPROXY} \
	GOPRIVATE=${GOPRIVATE} \
		go build -ldflags "-X main.version=${VERSION:v%=%}" -o ${@}

# CLEAN
# ==============================================================================
PHONY+=clean
clean:
	-rm --force --recursive bin/

# TEST
# ==============================================================================
PHONY+=test/unit
test/unit:
	go test -v -race -coverprofile=coverage.txt -covermode=atomic -timeout 600s -count=1 ./...

test/coverage: test/unit
	go tool cover -html=coverage.txt

# PHONY
# ==============================================================================
# Declare the contents of the PHONY variable as phony.  We keep that information
# in a variable so we can use it in if_changed.
.PHONY: ${PHONY}