# Golang project Makefile
#
# derived from: http://zduck.com/2014/go-project-structure-and-dependencies/

# build targets (which aren't files)
.PHONY: build fmt lint vet test autotest run clean vendor

# configuration
APPNAME := docrawler
VENDOR := .vendor
PACKAGES :=                     \
	golang.org/x/tools/cmd/vet    \
	github.com/golang/lint/golint

# override GOPATH to be our vendor directory
export GOPATH := ${PWD}/${VENDOR}
export PATH := ${PWD}/${VENDOR}/bin:${PATH}

default: build

build: fmt lint vet
	go build -v -o ./bin/${APPNAME} ./src/${APPNAME}

fmt:
	go fmt ./src/...

lint:
	golint ./src

vet:
	go vet ./src/...

test:
	go test ./src/...

autotest: test
	fswatch -or ./src | xargs -n1 -I{} go test ./src/...

run: build
	./bin/${APPNAME}

clean:
	rm -f ./bin/${APPNAME}

# vendor
# * wipes our vendor directory completely
# * fetches all packages in ${PACKAGES}
# * removes source control dirs so packages are vendorable (commitable)
vendor:
	rm -dRf ./${VENDOR}/src                          && \
	go get -u ${PACKAGES}                            && \
	rm -rf `find ./${VENDOR}/src -type d -name .git` && \
	rm -rf `find ./${VENDOR}/src -type d -name .hg`  && \
	rm -rf `find ./${VENDOR}/src -type d -name .bzr` && \
	rm -rf `find ./${VENDOR}/src -type d -name .svn`
