.PHONY: dbuild man \
	    localtest localunittest localintegration \
	    test unittest integration

PREFIX := $(DESTDIR)/usr/local
BINDIR := $(PREFIX)/sbin
RUNC_IMAGE := runc_dev
RUNC_TEST_IMAGE := runc_test
PROJECT := github.com/opencontainers/runc
TEST_DOCKERFILE := script/test_Dockerfile
BUILDTAGS := seccomp
RUNC_BUILD_PATH := /go/src/github.com/opencontainers/runc/runc
RUNC_INSTANCE := runc_dev
COMMIT := $(shell git rev-parse HEAD 2> /dev/null || true)
RUNC_LINK := $(CURDIR)/Godeps/_workspace/src/github.com/opencontainers/runc
export GOPATH := $(CURDIR)/Godeps/_workspace

MAN_DIR := $(CURDIR)/man/man8
MAN_PAGES = $(shell ls $(MAN_DIR)/*.8)
MAN_PAGES_BASE = $(notdir $(MAN_PAGES))
MAN_INSTALL_PATH := ${PREFIX}/share/man/man8/

VERSION := ${shell cat ./VERSION}

all: $(RUNC_LINK)
	go build -i -ldflags "-X main.gitCommit=${COMMIT} -X main.version=${VERSION}" -tags "$(BUILDTAGS)" -o runc .

static: $(RUNC_LINK)
	CGO_ENABLED=1 go build -i -tags "$(BUILDTAGS) cgo static_build" -ldflags "-w -extldflags -static -X main.gitCommit=${COMMIT} -X main.version=${VERSION}" -o runc .

$(RUNC_LINK):
	ln -sfn $(CURDIR) $(RUNC_LINK)

dbuild: runctestimage
	docker build -t $(RUNC_IMAGE) .
	docker create --name=$(RUNC_INSTANCE) $(RUNC_IMAGE)
	docker cp $(RUNC_INSTANCE):$(RUNC_BUILD_PATH) .
	docker rm $(RUNC_INSTANCE)

lint:
	go vet ./...
	go fmt ./...

man:
	man/md2man-all.sh

runctestimage:
	docker build -t $(RUNC_TEST_IMAGE) -f $(TEST_DOCKERFILE) .

test:
	make unittest integration

localtest:
	make localunittest localintegration

unittest: runctestimage
	docker run -e TESTFLAGS -ti --privileged --rm -v $(CURDIR):/go/src/$(PROJECT) $(RUNC_TEST_IMAGE) make localunittest

localunittest: all
	go test -timeout 3m -tags "$(BUILDTAGS)" ${TESTFLAGS} -v ./...

integration: runctestimage
	docker run -e TESTFLAGS -t --privileged --rm -v $(CURDIR):/go/src/$(PROJECT) $(RUNC_TEST_IMAGE) make localintegration

localintegration: all
	bats -t tests/integration${TESTFLAGS}

install:
	install -D -m0755 runc $(BINDIR)/runc

install-bash:
	install -D -m0644 contrib/completions/bash/runc $(PREFIX)/share/bash-completion/completions/runc

install-man:
	install -d -m 755 $(MAN_INSTALL_PATH)
	install -m 644 $(MAN_PAGES) $(MAN_INSTALL_PATH)

uninstall:
	rm -f $(BINDIR)/runc

uninstall-bash:
	rm -f $(PREFIX)/share/bash-completion/completions/runc

uninstall-man:
	rm -f $(addprefix $(MAN_INSTALL_PATH),$(MAN_PAGES_BASE))

clean:
	rm -f runc
	rm -f $(RUNC_LINK)
	rm -rf $(GOPATH)/pkg

validate:
	script/validate-gofmt
	go vet ./...

ci: validate localtest
