From b8f75f395504bef88c45111c2a69132c594bed79 Mon Sep 17 00:00:00 2001 From: Kir Kolyshkin Date: Thu, 5 Oct 2023 13:28:53 -0700 Subject: [PATCH] Makefile: move .PHONY to before each target All the targets in the Makefile we have are phony (as we mostly rely on go to figure out dependencies and whether to rebuild something), and they have to be marked as such. We do that at the end of the file, and the list is pretty long. Instead, let's just add .PHONY before each target. That way it is easier to spot any omissions. Alternative solutions: - add ".PHONY: %"; it won't work as wildcards are not recongized in this context; - add "MAKEFLAGS += --always-make". Signed-off-by: Kir Kolyshkin --- Makefile | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index 0c458db4c..f81879cbc 100644 --- a/Makefile +++ b/Makefile @@ -63,18 +63,24 @@ endif .DEFAULT: runc +.PHONY: runc runc: runc-bin verify-dmz-arch +.PHONY: runc-bin runc-bin: runc-dmz $(GO_BUILD) -o runc . +.PHONY: all all: runc recvtty sd-helper seccompagent fs-idmap memfd-bind +.PHONY: recvtty sd-helper seccompagent fs-idmap memfd-bind recvtty sd-helper seccompagent fs-idmap memfd-bind: $(GO_BUILD) -o contrib/cmd/$@/$@ ./contrib/cmd/$@ +.PHONY: static static: static-bin verify-dmz-arch +.PHONY: static-bin static-bin: runc-dmz $(GO_BUILD_STATIC) -o runc . @@ -83,9 +89,11 @@ runc-dmz: rm -f libcontainer/dmz/runc-dmz $(GO) generate -tags "$(BUILDTAGS)" ./libcontainer/dmz +.PHONY: releaseall releaseall: RELEASE_ARGS := "-a 386 -a amd64 -a arm64 -a armel -a armhf -a ppc64le -a riscv64 -a s390x" releaseall: release +.PHONY: release release: runcimage $(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \ --rm -v $(CURDIR):/go/src/$(PROJECT) \ @@ -93,28 +101,36 @@ release: runcimage $(RUNC_IMAGE) make localrelease script/release_sign.sh -S $(GPG_KEYID) -r release/$(VERSION) -v $(VERSION) +.PHONY: localrelease localrelease: verify-changelog script/release_build.sh -r release/$(VERSION) -v $(VERSION) $(RELEASE_ARGS) +.PHONY: dbuild dbuild: runcimage $(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \ --privileged --rm \ -v $(CURDIR):/go/src/$(PROJECT) \ $(RUNC_IMAGE) make clean all +.PHONY: lint lint: golangci-lint run ./... +.PHONY: man man: man/md2man-all.sh +.PHONY: runcimage runcimage: $(CONTAINER_ENGINE) build $(CONTAINER_ENGINE_BUILD_FLAGS) -t $(RUNC_IMAGE) . +.PHONY: test test: unittest integration rootlessintegration +.PHONY: localtest localtest: localunittest localintegration localrootlessintegration +.PHONY: unittest unittest: runcimage $(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \ -t --privileged --rm \ @@ -122,9 +138,11 @@ unittest: runcimage -v $(CURDIR):/go/src/$(PROJECT) \ $(RUNC_IMAGE) make localunittest TESTFLAGS="$(TESTFLAGS)" +.PHONY: localunittest localunittest: all $(GO) test -timeout 3m -tags "$(BUILDTAGS)" $(TESTFLAGS) -v ./... +.PHONY: integration integration: runcimage $(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \ -t --privileged --rm \ @@ -132,9 +150,11 @@ integration: runcimage -v $(CURDIR):/go/src/$(PROJECT) \ $(RUNC_IMAGE) make localintegration TESTPATH="$(TESTPATH)" +.PHONY: localintegration localintegration: all bats -t tests/integration$(TESTPATH) +.PHONY: rootlessintegration rootlessintegration: runcimage $(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \ -t --privileged --rm \ @@ -142,25 +162,31 @@ rootlessintegration: runcimage -e ROOTLESS_TESTPATH \ $(RUNC_IMAGE) make localrootlessintegration +.PHONY: localrootlessintegration localrootlessintegration: all tests/rootless.sh +.PHONY: shell shell: runcimage $(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \ -ti --privileged --rm \ -v $(CURDIR):/go/src/$(PROJECT) \ $(RUNC_IMAGE) bash +.PHONY: install install: install -D -m0755 runc $(DESTDIR)$(BINDIR)/runc +.PHONY: install-bash install-bash: install -D -m0644 contrib/completions/bash/runc $(DESTDIR)$(PREFIX)/share/bash-completion/completions/runc +.PHONY: install-man install-man: man install -d -m 755 $(DESTDIR)$(MANDIR)/man8 install -D -m 644 man/man8/*.8 $(DESTDIR)$(MANDIR)/man8 +.PHONY: clean clean: rm -f runc runc-* libcontainer/dmz/runc-dmz rm -f contrib/cmd/fs-idmap/fs-idmap @@ -171,40 +197,48 @@ clean: sudo rm -rf release rm -rf man/man8 +.PHONY: cfmt cfmt: C_SRC=$(shell git ls-files '*.c' | grep -v '^vendor/') cfmt: indent -linux -l120 -il0 -ppi2 -cp1 -T size_t -T jmp_buf $(C_SRC) +.PHONY: shellcheck shellcheck: shellcheck tests/integration/*.bats tests/integration/*.sh \ tests/integration/*.bash tests/*.sh \ man/*.sh script/* # TODO: add shellcheck for more sh files (contrib/completions/bash/runc). +.PHONY: shfmt shfmt: $(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \ --rm -v $(CURDIR):/src -w /src \ mvdan/shfmt:v3.5.1 -d -w . +.PHONY: localshfmt localshfmt: shfmt -d -w . +.PHONY: venodr vendor: $(GO) mod tidy $(GO) mod vendor $(GO) mod verify +.PHONY: verify-changelog verify-changelog: # No space at EOL. ! grep -n '\s$$' CHANGELOG.md # Period before issue/PR references. ! grep -n '[0-9a-zA-Z][^.] (#[1-9][0-9, #]*)$$' CHANGELOG.md +.PHONY: verify-dependencies verify-dependencies: vendor @test -z "$$(git status --porcelain -- go.mod go.sum vendor/)" \ || (echo -e "git status:\n $$(git status -- go.mod go.sum vendor/)\nerror: vendor/, go.mod and/or go.sum not up to date. Run \"make vendor\" to update"; exit 1) \ && echo "all vendor files are up to date." +.PHONY: verify-dmz-arch verify-dmz-arch: @if test -s libcontainer/dmz/runc-dmz; then \ set -Eeuo pipefail; \ @@ -214,12 +248,6 @@ verify-dmz-arch: <(readelf -h libcontainer/dmz/runc-dmz | grep -E "(Machine|Flags):"); \ fi +.PHONY: validate-keyring validate-keyring: script/keyring_validate.sh - -.PHONY: runc runc-bin all recvtty sd-helper seccompagent fs-idmap static static-bin \ - releaseall release localrelease dbuild lint man runcimage \ - test localtest unittest localunittest integration localintegration \ - rootlessintegration localrootlessintegration shell install install-bash \ - install-man clean cfmt shfmt localshfmt shellcheck \ - vendor verify-changelog verify-dependencies verify-dmz-arch validate-keyring