#!/usr/bin/make -f # -*- makefile -*- include /usr/share/dpkg/default.mk # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 # The engine is built and tested using upstream scripts # and Makefiles, rather than dh_auto_*. Therefore we can't rely # on dh to set the environment for us, we have to do it here. export GOPATH := $(CURDIR)/_build export GOCACHE := $(GOPATH)/go-build export GO111MODULE := off export GOPROXY := off #export DH_GOLANG_BUILDPKG := github.com/docker/docker github.com/docker/cli export DH_GOLANG_GO_GENERATE := 1 export DH_GOLANG_INSTALL_ALL := 1 export DH_GOLANG_INSTALL_EXTRA := testdata/ export DH_GOLANG_EXCLUDES := \ integration-cli \ overlay_test \ vendor # Package names CLI_PKG := github.com/docker/cli ENGINE_PKG := github.com/docker/docker LIBNETWORK_PKG := github.com/docker/libnetwork SWARMKIT_PKG := github.com/docker/swarmkit # Version and commits DOCKER_VERSION := $(DEB_VERSION_UPSTREAM) ENGINE_GITCOMMIT := $(shell ./debian/helpers/gitcommit.sh engine $(DOCKER_VERSION)) ifndef ENGINE_GITCOMMIT $(error Missing ENGINE_GITCOMMIT - see debian/helpers/engine-gitcommits) endif CLI_GITCOMMIT := $(shell ./debian/helpers/gitcommit.sh cli $(DOCKER_VERSION)) ifndef CLI_GITCOMMIT $(error Missing CLI_GITCOMMIT - see debian/helpers/cli-gitcommits) endif # Cf. scripts/build/binary scripts/build/.variables CLI_BUILDTIME := $(shell date -u -d "@$(SOURCE_DATE_EPOCH)" +"%Y-%m-%dT%H:%M:%SZ") CLI_BUILDTAGS := pkcs11 CLI_LDFLAGS += -X $(CLI_PKG)/cli/version.BuildTime=$(CLI_BUILDTIME) CLI_LDFLAGS += -X $(CLI_PKG)/cli/version.GitCommit=$(CLI_GITCOMMIT) CLI_LDFLAGS += -X $(CLI_PKG)/cli/version.Version=$(DOCKER_VERSION) ifeq (,$(filter $(DEB_BUILD_ARCH), mipsel mips64el)) CLI_BUILDMODE := -buildmode=pie endif # engine: have "make.sh" keep "bundle/$(DOCKER_VERSION)" around between runs # (we clean it up appropriately ourselves) ENGINE_KEEPBUNDLE := 1 ENGINE_BUILDTAGS := apparmor seccomp ENGINE_TESTFLAGS := -test.short BUILT_LIBC := $(shell dpkg-query -f '$${source:Package} (= $${source:Version})' -W libc-dev-bin) %: dh $@ --buildsystem=golang --with=bash-completion,golang --builddirectory=_build override_dh_golang: ## Set DH_GOLANG_BUILDPKG so that Built-Using is properly generated. DH_GOLANG_BUILDPKG="$(CLI_PKG)/... $(ENGINE_PKG)/... $(LIBNETWORK_PKG)/... $(SWARMKIT_PKG)/..." \ dh_golang -O--buildsystem=golang -O--builddirectory=_build override_dh_clean: dh_clean $(RM) -v -r autogen bundles man/man*/ # -find . -type f -name '*.pb.go' -delete -printf 'removed %p\n' ## delete generated .pb.go files ## Remove Files-Excluded (when built from checkout or non-DFSG tarball): $(RM) -rv `perl -0nE 'say grep { $$_=q{ */}.$$_ } split(/\s+/,$$1) if m{^Files\-Excluded:\s*(.*?)(?:\n\n|^Files|^Comment:)}sm;' debian/copyright` -find */vendor -mindepth 1 -type d -empty -delete -printf 'removed %p\n' override_dh_auto_configure: ## dh_auto_configure symlinks dirs from "/usr/share/gocode/src" into ## $(GOPATH) unless folders already exist there in which case files ## are copied. Pre-making directories allows us to use debhelper to ## create proper GOPATH source tree yet have certain directories writable ## even if they are provided by already installed package. mkdir -pv $(GOPATH)/src/$(CLI_PKG) mkdir -pv $(GOPATH)/src/$(ENGINE_PKG) mkdir -pv $(GOPATH)/src/$(LIBNETWORK_PKG) mkdir -pv $(GOPATH)/src/$(SWARMKIT_PKG) ## Prepare builddirectory but throw away sourcedirectory. DH_GOPKG="__IGNORE__" dh_auto_configure ## Each package must be removed from working tree first, in case some ## of the packages that we are going to build are already installed. ## This is also useful for building in unclean environment. ## ## This is _necessary_ to avoid merging packages that we build with ## pre-installed packages. See #827226 for details. ## Debhelper knows only about "main" DH_GOPKG package but we build several ## and we have to ensure that build tree is properly prepared. $(RM) -r $(GOPATH)/src/$(CLI_PKG) cp -ra cli $(GOPATH)/src/$(CLI_PKG) $(RM) -r $(GOPATH)/src/$(ENGINE_PKG) cp -ra engine $(GOPATH)/src/$(ENGINE_PKG) $(RM) -r $(GOPATH)/src/$(LIBNETWORK_PKG) cp -ra libnetwork $(GOPATH)/src/$(LIBNETWORK_PKG) $(RM) -r $(GOPATH)/src/$(SWARMKIT_PKG) cp -ra swarmkit $(GOPATH)/src/$(SWARMKIT_PKG) override_dh_auto_build: ## Order is important: DH_GOPKG=$(LIBNETWORK_PKG) dh_auto_build -v ## ## FIXME: DH_GOLANG_BUILDPKG --> DH_GOPKG DH_GOLANG_BUILDPKG=$(SWARMKIT_PKG) dh_auto_build -v ## build ("cd" first to ensure we build from within GOPATH) cd $(GOPATH)/src/$(ENGINE_PKG) \ && KEEPBUNDLE=$(ENGINE_KEEPBUNDLE) VERSION=$(DOCKER_VERSION) DOCKER_BUILDTAGS='$(ENGINE_BUILDTAGS)' \ DOCKER_GITCOMMIT=$(ENGINE_GITCOMMIT) PRODUCT=docker ./hack/make.sh dynbinary DH_GOPKG=$(CLI_PKG) DH_GOLANG_BUILDPKG=$(CLI_PKG)/cmd/docker \ dh_auto_build -v -- -tags '$(CLI_BUILDTAGS)' -ldflags '$(CLI_LDFLAGS)' $(CLI_BUILDMODE) cd $(GOPATH)/src/$(CLI_PKG) && ./scripts/docs/generate-man.sh override_dh_auto_test: ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS))) ## Test engine: cd $(GOPATH)/src/$(ENGINE_PKG) \ && TESTFLAGS='$(ENGINE_TESTFLAGS)' ./hack/test/unit ## Test CLI: cd $(GOPATH)/src/$(CLI_PKG) \ && DISABLE_WARN_OUTSIDE_CONTAINER=1 $(MAKE) test-unit endif override_dh_install: ## Rename binaries cd $(GOPATH)/src/$(ENGINE_PKG)/bundles/dynbinary-daemon \ && mv dockerd-$(DOCKER_VERSION) dockerd cd $(GOPATH)/bin \ && mv proxy docker-proxy ## Do not install extra license files: dh_install -XLICENSE ## Apparmor thing, not sure it's needed, we don't install a profile dh_apparmor --profile-name=docker.io -pdocker.io override_dh_auto_install: ## skip dh_auto_install to stop dh_golang trying to copy bits ## for /usr/share/gocode (we use dh_install for that) override_dh_installinit: dh_installinit -v --name=docker --no-stop-on-upgrade --no-restart-after-upgrade override_dh_installsystemd: dh_installsystemd -v --name=docker --no-stop-on-upgrade --no-restart-after-upgrade override_dh_installudev: # use priority z80 to match the upstream priority of 80 dh_installudev -v --name=docker --priority=z80 override_dh_gencontrol: echo 'libc:Built-Using=$(BUILT_LIBC)' >> debian/docker.io.substvars dh_gencontrol