summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorNeville Cain <neville.cain@qonto.eu>2019-12-29 21:04:56 +0100
committerNeville Cain <neville.cain@qonto.eu>2020-01-04 23:54:57 +0100
commit16b793a45aca4cee998ff65f37bebadcf51c7618 (patch)
tree54109b9ce3b236e56449e8e28586dcdb1346796e /Makefile
parent9e03aa14b63f9351926071ba0a8b7064154cb0fe (diff)
downloadpodman-16b793a45aca4cee998ff65f37bebadcf51c7618.tar.gz
podman-16b793a45aca4cee998ff65f37bebadcf51c7618.tar.bz2
podman-16b793a45aca4cee998ff65f37bebadcf51c7618.zip
Generate binaries only if they are changes in src code.
Changes I am making: 1. The target `.gopathok` was listed in `.PHONY` which looks wrong as it regenerates `.gopathok` every time we re-run it, which was a part of the issue. I removed it to avoid that. If `.gopathok` is present', makefile should not need to rerun it. 2. Ensure the binaries are created only if they don't exist by adding `bin/podman` and `bin/podman-remote`. 3. Add a `SOURCES = $(shell find . -name "*.go")` and put it as a dependency of the podman binaries target. It allows us to re-generate the binaries only when there is a change in the source files. The downside is it increases the running time of the command that generates them (20 seconds on my virtual machine running Centos 7). If this is a problem, we could introduce a hidden file that would list all the files to track, that would need to be updated only when a dev is introducing new files. 4. Fixed the make package-install as it does not work with yum. I updated the build_rpm.sh to ensure it works on centos 7 and centos 8 with no pre-required installation. Closes #4367 Signed-off-by: Neville Cain <neville.cain@qonto.eu>
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile18
1 files changed, 12 insertions, 6 deletions
diff --git a/Makefile b/Makefile
index 32da41ef7..dd0498e4d 100644
--- a/Makefile
+++ b/Makefile
@@ -35,6 +35,7 @@ BUILDTAGS ?= \
PYTHON ?= $(shell command -v python python3|head -n1)
PKG_MANAGER ?= $(shell command -v dnf yum|head -n1)
+SOURCES = $(shell find . -name "*.go")
GO_BUILD=$(GO) build
# Go module support: set `-mod=vendor` to use the vendored sources
@@ -164,11 +165,15 @@ test/checkseccomp/checkseccomp: .gopathok $(wildcard test/checkseccomp/*.go)
test/goecho/goecho: .gopathok $(wildcard test/goecho/*.go)
$(GO_BUILD) -ldflags '$(LDFLAGS_PODMAN)' -o $@ $(PROJECT)/test/goecho
-podman: .gopathok $(PODMAN_VARLINK_DEPENDENCIES) ## Build with podman
- $(GO_BUILD) $(BUILDFLAGS) -gcflags '$(GCFLAGS)' -asmflags '$(ASMFLAGS)' -ldflags '$(LDFLAGS_PODMAN)' -tags "$(BUILDTAGS)" -o bin/$@ $(PROJECT)/cmd/podman
+bin/podman: .gopathok $(SOURCES) go.mod go.sum $(PODMAN_VARLINK_DEPENDENCIES) ## Build with podman
+ $(GO_BUILD) $(BUILDFLAGS) -gcflags '$(GCFLAGS)' -asmflags '$(ASMFLAGS)' -ldflags '$(LDFLAGS_PODMAN)' -tags "$(BUILDTAGS)" -o $@ $(PROJECT)/cmd/podman
-podman-remote: .gopathok $(PODMAN_VARLINK_DEPENDENCIES) ## Build with podman on remote environment
- $(GO_BUILD) $(BUILDFLAGS) -gcflags '$(GCFLAGS)' -asmflags '$(ASMFLAGS)' -ldflags '$(LDFLAGS_PODMAN)' -tags "$(BUILDTAGS) remoteclient" -o bin/$@ $(PROJECT)/cmd/podman
+podman: bin/podman
+
+bin/podman-remote: .gopathok $(SOURCES) go.mod go.sum $(PODMAN_VARLINK_DEPENDENCIES) ## Build with podman on remote environment
+ $(GO_BUILD) $(BUILDFLAGS) -gcflags '$(GCFLAGS)' -asmflags '$(ASMFLAGS)' -ldflags '$(LDFLAGS_PODMAN)' -tags "$(BUILDTAGS) remoteclient" -o $@ $(PROJECT)/cmd/podman
+
+podman-remote: bin/podman-remote
.PHONY: podman.msi
podman.msi: podman-remote podman-remote-windows install-podman-remote-windows-docs ## Will always rebuild exe as there is no podman-remote-windows.exe target to verify timestamp
@@ -544,7 +549,6 @@ vendor-in-container:
podman run --privileged --rm --env HOME=/root -v `pwd`:/src -w /src docker.io/library/golang:1.13 make vendor
.PHONY: \
- .gopathok \
binaries \
changelog \
clean \
@@ -572,4 +576,6 @@ package: ## Build rpm packages
./contrib/build_rpm.sh
package-install: package ## Install rpm packages
- sudo ${PKG_MANAGER} -y install --allowerasing ${HOME}/rpmbuild/RPMS/*/*.rpm
+ sudo ${PKG_MANAGER} -y remove podman podman-remote
+ sudo ${PKG_MANAGER} -y clean all
+ sudo ${PKG_MANAGER} -y install ${HOME}/rpmbuild/RPMS/*/*.rpm