#!/usr/bin/make -f

ANTLR_VERSION="4.13.0"

# Run tests
test:
	@go test ./... -cover

# Pull go dependencies
dep:
	@printf "⇒ Download requirements: "
	@CGO_ENABLED=0 \
	go mod download && echo OK
	@printf "⇒ Tidy requirements: "
	@CGO_ENABLED=0 \
	go mod tidy -v && echo OK

# Run linters
lint:
	@golangci-lint --timeout=5m run

# Run tests with race detection and produce coverage output
cover:
	@go test -v -race ./... -coverprofile=coverage.txt -covermode=atomic
	@go tool cover -html=coverage.txt -o coverage.html

# Reformat code
format:
	@echo "⇒ Processing gofmt check"
	@gofmt -s -w ./
	@echo "⇒ Processing goimports check"
	@goimports -w ./

policy:
	@wget -q https://www.antlr.org/download/antlr-${ANTLR_VERSION}-complete.jar -O antlr4-tool.jar
	@java -Xmx500M -cp "`pwd`/antlr4-tool.jar" "org.antlr.v4.Tool" -o `pwd`/netmap/parser/ -Dlanguage=Go -no-listener -visitor `pwd`/netmap/parser/Query.g4 `pwd`/netmap/parser/QueryLexer.g4

# Run `make %` in truecloudlab/frostfs-sdk-go container(Golang+Java)
docker/%:
	@docker build -t truecloudlab/frostfs-sdk-go --platform linux/amd64 . > /dev/null
	@docker run --rm -t \
	-v `pwd`:/work \
	-u "$$(id -u):$$(id -g)" \
	--env HOME=/work \
	truecloudlab/frostfs-sdk-go make $*

# Synchronize tree service
sync-tree:
	@./syncTree.sh

# Show this help prompt
help:
	@echo '  Usage:'
	@echo ''
	@echo '    make <target>'
	@echo ''
	@echo '  Targets:'
	@echo ''
	@awk '/^#/{ comment = substr($$0,3) } comment && /^[a-zA-Z][a-zA-Z0-9_-]+ ?:/{ print "   ", $$1, comment }' $(MAKEFILE_LIST) | column -t -s ':' | grep -v 'IGNORE' | sort -u