PROJECT = check
BIN_DIR = bin
SRC_DIR = src
PKG_DIR = pkg
BIN = check

all: run

run: build
	$(BIN_DIR)/$(BIN)

build: $(BIN)

$(BIN): export GOPATH = $(shell pwd)
$(BIN): deps
	go install $(PROJECT)/cmd/$(BIN)

deps: export GOPATH = $(shell pwd)
deps:
	go get $(PROJECT)/...

clean_deps: export GOPATH = $(shell pwd)
clean_deps:
	go clean -i -r $(PROJECT)/... 2>/dev/null || true

test: export GOPATH = $(shell pwd)
test: test_deps
	go test $(PROJECT)/...

test_watch: export GOPATH = $(shell pwd)
test_watch: test_deps
	$(BIN_DIR)/ginkgo watch $(SRC_DIR)/$(PROJECT)/...

test_deps: export GOPATH = $(shell pwd)
test_deps:
	go get github.com/onsi/ginkgo/ginkgo
	go get -t $(PROJECT)/...

clean_test_deps: export GOPATH = $(shell pwd)
clean_test_deps:
	go clean -i -r github.com/onsi/ginkgo/ginkgo 2>/dev/null || true

clean: clean_deps clean_test_deps
	-rmdir $(BIN_DIR)
	rm -rf $(PKG_DIR)
	find $(SRC_DIR) -mindepth 1 -maxdepth 1 ! -name $(PROJECT) -exec rm -rf {} +

.PHONY: all run build deps clean_deps test test_watch test_deps clean_test_deps clean $(BIN)