GOPATH := $(shell go env GOPATH)

all: check

getdeps:
	@if [ ! -f ${GOPATH}/bin/golint ]; then echo "Installing golint" && go get -u golang.org/x/lint/golint; fi
	@if [ ! -f ${GOPATH}/bin/gocyclo ]; then echo "Installing gocyclo" && go get -u github.com/fzipp/gocyclo; fi
	@if [ ! -f ${GOPATH}/bin/misspell ]; then echo "Installing misspell" && go get -u github.com/client9/misspell/cmd/misspell; fi
	@if [ ! -f ${GOPATH}/bin/ineffassign ]; then echo "Installing ineffassign" && go get -u github.com/gordonklaus/ineffassign; fi

vet:
	@echo "Running $@"
	@go tool vet -atomic -bool -copylocks -nilfunc -printf -shadow -rangeloops -unreachable -unsafeptr -unusedresult *.go

fmt:
	@echo "Running $@"
	@gofmt -d *.go

lint:
	@echo "Running $@"
	@${GOPATH}/bin/golint -set_exit_status

cyclo:
	@echo "Running $@"
	@${GOPATH}/bin/gocyclo -over 200 .

spelling:
	@${GOPATH}/bin/misspell -locale US -error *.go README.md

ineffassign:
	@echo "Running $@"
	@${GOPATH}/bin/ineffassign .

check: getdeps vet fmt lint cyclo spelling ineffassign
	@echo "Running unit tests"
	@go test -tags kqueue .
