| .PHONY: all shell dbuild man \ | |
| localtest localunittest localintegration \ | |
| test unittest integration | |
| GO := go | |
| SOURCES := $(shell find . 2>&1 | grep -E '.*\.(c|h|go)$$') | |
| 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 | |
| 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}") | |
| 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) | |
| .DEFAULT: runc | |
| runc: $(SOURCES) | |
| $(GO) build -buildmode=pie $(EXTRA_FLAGS) -ldflags "-X main.gitCommit=${COMMIT} -X main.version=${VERSION} $(EXTRA_LDFLAGS)" -tags "$(BUILDTAGS)" -o runc . | |
| all: runc recvtty | |
| recvtty: contrib/cmd/recvtty/recvtty | |
| contrib/cmd/recvtty/recvtty: $(SOURCES) | |
| $(GO) build -buildmode=pie $(EXTRA_FLAGS) -ldflags "-X main.gitCommit=${COMMIT} -X main.version=${VERSION} $(EXTRA_LDFLAGS)" -tags "$(BUILDTAGS)" -o contrib/cmd/recvtty/recvtty ./contrib/cmd/recvtty | |
| static: $(SOURCES) | |
| CGO_ENABLED=1 $(GO) build $(EXTRA_FLAGS) -tags "$(BUILDTAGS) cgo static_build" -ldflags "-w -extldflags -static -X main.gitCommit=${COMMIT} -X main.version=${VERSION} $(EXTRA_LDFLAGS)" -o runc . | |
| CGO_ENABLED=1 $(GO) build $(EXTRA_FLAGS) -tags "$(BUILDTAGS) cgo static_build" -ldflags "-w -extldflags -static -X main.gitCommit=${COMMIT} -X main.version=${VERSION} $(EXTRA_LDFLAGS)" -o contrib/cmd/recvtty/recvtty ./contrib/cmd/recvtty | |
| release: | |
| script/release.sh -r release/$(VERSION) -v $(VERSION) | |
| dbuild: runcimage | |
| docker run --rm -v $(CURDIR):/go/src/$(PROJECT) --privileged $(RUNC_IMAGE) make clean all | |
| lint: | |
| $(GO) vet $(allpackages) | |
| $(GO) fmt $(allpackages) | |
| man: | |
| man/md2man-all.sh | |
| runcimage: | |
| docker build -t $(RUNC_IMAGE) . | |
| test: | |
| make unittest integration rootlessintegration | |
| localtest: | |
| make localunittest localintegration localrootlessintegration | |
| unittest: runcimage | |
| docker run -e TESTFLAGS -t --privileged --rm -v $(CURDIR):/go/src/$(PROJECT) $(RUNC_IMAGE) make localunittest | |
| localunittest: all | |
| $(GO) test -timeout 3m -tags "$(BUILDTAGS)" ${TESTFLAGS} -v $(allpackages) | |
| 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} | |
| rootlessintegration: runcimage | |
| docker run -e TESTFLAGS -t --privileged --rm -v $(CURDIR):/go/src/$(PROJECT) --cap-drop=ALL -u rootless $(RUNC_IMAGE) make localintegration | |
| # FIXME: This should not be separate from rootlessintegration's method of running. | |
| localrootlessintegration: all | |
| sudo -u rootless -H PATH="${PATH}" bats -t tests/integration${TESTFLAGS} | |
| shell: all | |
| docker run -e TESTFLAGS -ti --privileged --rm -v $(CURDIR):/go/src/$(PROJECT) $(RUNC_IMAGE) bash | |
| 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 contrib/cmd/recvtty/recvtty | |
| rm -rf $(RELEASE_DIR) | |
| rm -rf $(MAN_DIR) | |
| validate: | |
| script/validate-gofmt | |
| $(GO) vet $(allpackages) | |
| ci: validate test release | |
| # memoize allpackages, so that it's executed only once and only if used | |
| _allpackages = $(shell $(GO) list ./... | grep -v vendor) | |
| allpackages = $(if $(__allpackages),,$(eval __allpackages := $$(_allpackages)))$(__allpackages) |