#   Copyright The containerd Authors.

#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at

#       http://www.apache.org/licenses/LICENSE-2.0

#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.

# Set an output prefix, which is the local directory if not specified
PREFIX?=$(shell pwd)

# Used to populate version variable in main package.
VERSION=$(shell git describe --match 'v[0-9]*' --dirty='.m' --always)

GO_LDFLAGS=-ldflags "-X `go list ./version`.Version=$(VERSION)"

PACKAGES=$(shell go list ./... | grep -v /vendor/)

.PHONY: clean all fmt vet lint build test binaries setup
.DEFAULT: default
# skip lint at the moment
all: AUTHORS clean fmt vet fmt build test binaries

AUTHORS: .mailmap .git/HEAD
	 git log --format='%aN <%aE>' | sort -fu > $@

# This only needs to be generated by hand when cutting full releases.
version/version.go:
	./version/version.sh > $@

${PREFIX}/bin/continuity: version/version.go $(shell find . -type f -name '*.go')
	@echo "+ $@"
	@go build  -o $@ ${GO_LDFLAGS}  ${GO_GCFLAGS} ./cmd/continuity

setup:
	@echo "+ $@"
	@go get -u github.com/golang/lint/golint

generate:
	go generate $(PACKAGES)

# Depends on binaries because vet will silently fail if it can't load compiled
# imports
vet: binaries
	@echo "+ $@"
	@go vet $(PACKAGES)

fmt:
	@echo "+ $@"
	@test -z "$$(gofmt -s -l . | grep -v Godeps/_workspace/src/ | grep -v vendor/ | tee /dev/stderr)" || \
		echo "+ please format Go code with 'gofmt -s'"

lint:
	@echo "+ $@"
	@test -z "$$(golint $(PACKAGES) | grep -v Godeps/_workspace/src/ | grep -v vendor/ |tee /dev/stderr)"

build:
	@echo "+ $@"
	@go build -v ${GO_LDFLAGS} $(PACKAGES)

test:
	@echo "+ $@"
	@go test $(PACKAGES)

test-compile:
	@echo "+ $@"
	@for pkg in $(PACKAGES); do go test -c $$pkg; done

binaries: ${PREFIX}/bin/continuity
	@echo "+ $@"
	@if [ x$$GOOS = xwindows ]; then echo "+ continuity -> continuity.exe"; mv ${PREFIX}/bin/continuity ${PREFIX}/bin/continuity.exe; fi

clean:
	@echo "+ $@"
	@rm -rf "${PREFIX}/bin/continuity" "${PREFIX}/bin/continuity.exe"