| .PHONY: dbuild man \ |
| localtest localunittest localintegration \ |
| test unittest integration |
| |
| PREFIX := $(DESTDIR)/usr/local |
| BINDIR := $(PREFIX)/sbin |
| GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD 2>/dev/null) |
| GIT_BRANCH_CLEAN := $(shell echo $(GIT_BRANCH) | sed -e "s/[^[:alnum:]]/-/g") |
| RUNC_IMAGE := runc_dev$(if $(GIT_BRANCH_CLEAN),:$(GIT_BRANCH_CLEAN)) |
| PROJECT := github.com/opencontainers/runc |
| TEST_DOCKERFILE := script/test_Dockerfile |
| BUILDTAGS := seccomp |
| COMMIT_NO := $(shell git rev-parse HEAD 2> /dev/null || true) |
| COMMIT := $(if $(shell git status --porcelain --untracked-files=no),"${COMMIT_NO}-dirty","${COMMIT_NO}") |
| 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/ |
| |
| RELEASE_DIR := $(CURDIR)/release |
| |
| VERSION := ${shell cat ./VERSION} |
| |
| SHELL := $(shell command -v bash 2>/dev/null) |
| |
| 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 . |
| |
| release: $(RUNC_LINK) |
| @flag_list=(seccomp selinux apparmor static ambient); \ |
| unset expression; \ |
| for flag in "$${flag_list[@]}"; do \ |
| expression+="' '{'',$${flag}}"; \ |
| done; \ |
| eval profile_list=("$$expression"); \ |
| for profile in "$${profile_list[@]}"; do \ |
| output=${RELEASE_DIR}/runc; \ |
| for flag in $$profile; do \ |
| output+=."$$flag"; \ |
| done; \ |
| tags="$$profile"; \ |
| ldflags="-X main.gitCommit=${COMMIT} -X main.version=${VERSION}"; \ |
| CGO_ENABLED=; \ |
| [[ "$$profile" =~ static ]] && { \ |
| tags="$${tags/static/static_build}"; \ |
| tags+=" cgo"; \ |
| ldflags+=" -w -extldflags -static"; \ |
| CGO_ENABLED=1; \ |
| }; \ |
| echo "Building target: $$output"; \ |
| rm -rf "${GOPATH}/pkg"; \ |
| go build -i -ldflags "$$ldflags" -tags "$$tags" -o "$$output" .; \ |
| done |
| |
| $(RUNC_LINK): |
| ln -sfn $(CURDIR) $(RUNC_LINK) |
| |
| dbuild: runcimage |
| docker run --rm -v $(CURDIR):/go/src/$(PROJECT) --privileged $(RUNC_IMAGE) make |
| |
| lint: |
| go vet ./... |
| go fmt ./... |
| |
| man: |
| man/md2man-all.sh |
| |
| runcimage: |
| docker build -t $(RUNC_IMAGE) . |
| |
| test: |
| make unittest integration |
| |
| localtest: |
| make localunittest localintegration |
| |
| unittest: runcimage |
| docker run -e TESTFLAGS -ti --privileged --rm -v $(CURDIR):/go/src/$(PROJECT) $(RUNC_IMAGE) make localunittest |
| |
| localunittest: all |
| go test -timeout 3m -tags "$(BUILDTAGS)" ${TESTFLAGS} -v ./... |
| |
| integration: runcimage |
| docker run -e TESTFLAGS -t --privileged --rm -v $(CURDIR):/go/src/$(PROJECT) $(RUNC_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 |
| rm -rf $(RELEASE_DIR) |
| |
| validate: |
| script/validate-gofmt |
| go vet ./... |
| |
| ci: validate localtest |