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 <kolyshkin@gmail.com>
This commit is contained in:
Kir Kolyshkin
2023-10-05 13:28:53 -07:00
parent 46bfcac814
commit b8f75f3955
+35 -7
View File
@@ -63,18 +63,24 @@ endif
.DEFAULT: runc .DEFAULT: runc
.PHONY: runc
runc: runc-bin verify-dmz-arch runc: runc-bin verify-dmz-arch
.PHONY: runc-bin
runc-bin: runc-dmz runc-bin: runc-dmz
$(GO_BUILD) -o runc . $(GO_BUILD) -o runc .
.PHONY: all
all: runc recvtty sd-helper seccompagent fs-idmap memfd-bind 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: recvtty sd-helper seccompagent fs-idmap memfd-bind:
$(GO_BUILD) -o contrib/cmd/$@/$@ ./contrib/cmd/$@ $(GO_BUILD) -o contrib/cmd/$@/$@ ./contrib/cmd/$@
.PHONY: static
static: static-bin verify-dmz-arch static: static-bin verify-dmz-arch
.PHONY: static-bin
static-bin: runc-dmz static-bin: runc-dmz
$(GO_BUILD_STATIC) -o runc . $(GO_BUILD_STATIC) -o runc .
@@ -83,9 +89,11 @@ runc-dmz:
rm -f libcontainer/dmz/runc-dmz rm -f libcontainer/dmz/runc-dmz
$(GO) generate -tags "$(BUILDTAGS)" ./libcontainer/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_ARGS := "-a 386 -a amd64 -a arm64 -a armel -a armhf -a ppc64le -a riscv64 -a s390x"
releaseall: release releaseall: release
.PHONY: release
release: runcimage release: runcimage
$(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \ $(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \
--rm -v $(CURDIR):/go/src/$(PROJECT) \ --rm -v $(CURDIR):/go/src/$(PROJECT) \
@@ -93,28 +101,36 @@ release: runcimage
$(RUNC_IMAGE) make localrelease $(RUNC_IMAGE) make localrelease
script/release_sign.sh -S $(GPG_KEYID) -r release/$(VERSION) -v $(VERSION) script/release_sign.sh -S $(GPG_KEYID) -r release/$(VERSION) -v $(VERSION)
.PHONY: localrelease
localrelease: verify-changelog localrelease: verify-changelog
script/release_build.sh -r release/$(VERSION) -v $(VERSION) $(RELEASE_ARGS) script/release_build.sh -r release/$(VERSION) -v $(VERSION) $(RELEASE_ARGS)
.PHONY: dbuild
dbuild: runcimage dbuild: runcimage
$(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \ $(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \
--privileged --rm \ --privileged --rm \
-v $(CURDIR):/go/src/$(PROJECT) \ -v $(CURDIR):/go/src/$(PROJECT) \
$(RUNC_IMAGE) make clean all $(RUNC_IMAGE) make clean all
.PHONY: lint
lint: lint:
golangci-lint run ./... golangci-lint run ./...
.PHONY: man
man: man:
man/md2man-all.sh man/md2man-all.sh
.PHONY: runcimage
runcimage: runcimage:
$(CONTAINER_ENGINE) build $(CONTAINER_ENGINE_BUILD_FLAGS) -t $(RUNC_IMAGE) . $(CONTAINER_ENGINE) build $(CONTAINER_ENGINE_BUILD_FLAGS) -t $(RUNC_IMAGE) .
.PHONY: test
test: unittest integration rootlessintegration test: unittest integration rootlessintegration
.PHONY: localtest
localtest: localunittest localintegration localrootlessintegration localtest: localunittest localintegration localrootlessintegration
.PHONY: unittest
unittest: runcimage unittest: runcimage
$(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \ $(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \
-t --privileged --rm \ -t --privileged --rm \
@@ -122,9 +138,11 @@ unittest: runcimage
-v $(CURDIR):/go/src/$(PROJECT) \ -v $(CURDIR):/go/src/$(PROJECT) \
$(RUNC_IMAGE) make localunittest TESTFLAGS="$(TESTFLAGS)" $(RUNC_IMAGE) make localunittest TESTFLAGS="$(TESTFLAGS)"
.PHONY: localunittest
localunittest: all localunittest: all
$(GO) test -timeout 3m -tags "$(BUILDTAGS)" $(TESTFLAGS) -v ./... $(GO) test -timeout 3m -tags "$(BUILDTAGS)" $(TESTFLAGS) -v ./...
.PHONY: integration
integration: runcimage integration: runcimage
$(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \ $(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \
-t --privileged --rm \ -t --privileged --rm \
@@ -132,9 +150,11 @@ integration: runcimage
-v $(CURDIR):/go/src/$(PROJECT) \ -v $(CURDIR):/go/src/$(PROJECT) \
$(RUNC_IMAGE) make localintegration TESTPATH="$(TESTPATH)" $(RUNC_IMAGE) make localintegration TESTPATH="$(TESTPATH)"
.PHONY: localintegration
localintegration: all localintegration: all
bats -t tests/integration$(TESTPATH) bats -t tests/integration$(TESTPATH)
.PHONY: rootlessintegration
rootlessintegration: runcimage rootlessintegration: runcimage
$(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \ $(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \
-t --privileged --rm \ -t --privileged --rm \
@@ -142,25 +162,31 @@ rootlessintegration: runcimage
-e ROOTLESS_TESTPATH \ -e ROOTLESS_TESTPATH \
$(RUNC_IMAGE) make localrootlessintegration $(RUNC_IMAGE) make localrootlessintegration
.PHONY: localrootlessintegration
localrootlessintegration: all localrootlessintegration: all
tests/rootless.sh tests/rootless.sh
.PHONY: shell
shell: runcimage shell: runcimage
$(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \ $(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \
-ti --privileged --rm \ -ti --privileged --rm \
-v $(CURDIR):/go/src/$(PROJECT) \ -v $(CURDIR):/go/src/$(PROJECT) \
$(RUNC_IMAGE) bash $(RUNC_IMAGE) bash
.PHONY: install
install: install:
install -D -m0755 runc $(DESTDIR)$(BINDIR)/runc install -D -m0755 runc $(DESTDIR)$(BINDIR)/runc
.PHONY: install-bash
install-bash: install-bash:
install -D -m0644 contrib/completions/bash/runc $(DESTDIR)$(PREFIX)/share/bash-completion/completions/runc install -D -m0644 contrib/completions/bash/runc $(DESTDIR)$(PREFIX)/share/bash-completion/completions/runc
.PHONY: install-man
install-man: man install-man: man
install -d -m 755 $(DESTDIR)$(MANDIR)/man8 install -d -m 755 $(DESTDIR)$(MANDIR)/man8
install -D -m 644 man/man8/*.8 $(DESTDIR)$(MANDIR)/man8 install -D -m 644 man/man8/*.8 $(DESTDIR)$(MANDIR)/man8
.PHONY: clean
clean: clean:
rm -f runc runc-* libcontainer/dmz/runc-dmz rm -f runc runc-* libcontainer/dmz/runc-dmz
rm -f contrib/cmd/fs-idmap/fs-idmap rm -f contrib/cmd/fs-idmap/fs-idmap
@@ -171,40 +197,48 @@ clean:
sudo rm -rf release sudo rm -rf release
rm -rf man/man8 rm -rf man/man8
.PHONY: cfmt
cfmt: C_SRC=$(shell git ls-files '*.c' | grep -v '^vendor/') cfmt: C_SRC=$(shell git ls-files '*.c' | grep -v '^vendor/')
cfmt: cfmt:
indent -linux -l120 -il0 -ppi2 -cp1 -T size_t -T jmp_buf $(C_SRC) indent -linux -l120 -il0 -ppi2 -cp1 -T size_t -T jmp_buf $(C_SRC)
.PHONY: shellcheck
shellcheck: shellcheck:
shellcheck tests/integration/*.bats tests/integration/*.sh \ shellcheck tests/integration/*.bats tests/integration/*.sh \
tests/integration/*.bash tests/*.sh \ tests/integration/*.bash tests/*.sh \
man/*.sh script/* man/*.sh script/*
# TODO: add shellcheck for more sh files (contrib/completions/bash/runc). # TODO: add shellcheck for more sh files (contrib/completions/bash/runc).
.PHONY: shfmt
shfmt: shfmt:
$(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \ $(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \
--rm -v $(CURDIR):/src -w /src \ --rm -v $(CURDIR):/src -w /src \
mvdan/shfmt:v3.5.1 -d -w . mvdan/shfmt:v3.5.1 -d -w .
.PHONY: localshfmt
localshfmt: localshfmt:
shfmt -d -w . shfmt -d -w .
.PHONY: venodr
vendor: vendor:
$(GO) mod tidy $(GO) mod tidy
$(GO) mod vendor $(GO) mod vendor
$(GO) mod verify $(GO) mod verify
.PHONY: verify-changelog
verify-changelog: verify-changelog:
# No space at EOL. # No space at EOL.
! grep -n '\s$$' CHANGELOG.md ! grep -n '\s$$' CHANGELOG.md
# Period before issue/PR references. # Period before issue/PR references.
! grep -n '[0-9a-zA-Z][^.] (#[1-9][0-9, #]*)$$' CHANGELOG.md ! grep -n '[0-9a-zA-Z][^.] (#[1-9][0-9, #]*)$$' CHANGELOG.md
.PHONY: verify-dependencies
verify-dependencies: vendor verify-dependencies: vendor
@test -z "$$(git status --porcelain -- go.mod go.sum 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 -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." && echo "all vendor files are up to date."
.PHONY: verify-dmz-arch
verify-dmz-arch: verify-dmz-arch:
@if test -s libcontainer/dmz/runc-dmz; then \ @if test -s libcontainer/dmz/runc-dmz; then \
set -Eeuo pipefail; \ set -Eeuo pipefail; \
@@ -214,12 +248,6 @@ verify-dmz-arch:
<(readelf -h libcontainer/dmz/runc-dmz | grep -E "(Machine|Flags):"); \ <(readelf -h libcontainer/dmz/runc-dmz | grep -E "(Machine|Flags):"); \
fi fi
.PHONY: validate-keyring
validate-keyring: validate-keyring:
script/keyring_validate.sh 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