GO                        ?= GO111MODULE=on CGO_ENABLED=0 go
OK := $(shell tput setaf 6; echo ' [OK]'; tput sgr0;)

crosscompile:
	@echo ">> CROSS-COMPILE"

	@echo -n "     BUILDING FOR LINUX ARM64 "
	@GOOS=linux GOARCH=arm64 CGO_ENABLED=0 $(GO) build -o bin/gocopy-linux-arm64 ./cmd/gocopy || exit 1
	@printf '%s\n' '$(OK)'

	@echo -n "     BUILDING FOR LINUX AMD64 "
	@GOOS=linux GOARCH=amd64 CGO_ENABLED=0 $(GO) build -o bin/gocopy-linux-amd64 ./cmd/gocopy || exit 1
	@printf '%s\n' '$(OK)'

	@echo -n "     BUILDING FOR WINDOWS AMD64 "
	@GOOS=windows GOARCH=amd64 CGO_ENABLED=0 $(GO) build -o bin/gocopy-linux-amd64 ./cmd/gocopy || exit 1
	@printf '%s\n' '$(OK)'

	@echo -n "     BUILDING FOR MACOS AMD64 "
	@GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 $(GO) build -o bin/gocopy-linux-amd64 ./cmd/gocopy || exit 1
	@printf '%s\n' '$(OK)'

	@echo -n "     BUILDING FOR PLAN9 AMD64 "
	@GOOS=plan9 GOARCH=amd64 CGO_ENABLED=0 $(GO) build -o bin/gocopy-linux-amd64 ./cmd/gocopy || exit 1
	@printf '%s\n' '$(OK)'

	@echo -n "     BUILDING FOR AIX PPC64 "
	@GOOS=aix GOARCH=ppc64 CGO_ENABLED=0 $(GO) build -o bin/gocopy-linux-amd64 ./cmd/gocopy || exit 1
	@printf '%s\n' '$(OK)'

codequality:
	@echo ">> CODE QUALITY"

	@echo -n "     GOLANGCI-LINT "
	@which golangci-lint > /dev/null; if [ $$? -ne 0 ]; then \
		$(GO) install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.1.1; \
	fi
	@golangci-lint run --max-issues-per-linter 0 --max-same-issues 0 || exit 1

	@printf '%s\n' '$(OK)'

.PHONY: clean build crosscompile test codequality
