#!/usr/bin/make -f

export LOOKERPREFIX=src/loongker-ce-20.10.3/
export CONTAINERIO=src/loong-containerd.io-1.4.3/
export BINFMT=src/binfmt/
LVERSION ?= $(shell cat $(shell pwd)/${LOOKERPREFIX}/VERSION)
CVERSION ?= $(shell cat $(shell pwd)/${CONTAINERIO}/VERSION)


REF="6fbe2f9a8e085ffeb72c00027c4f9c889261602c"

export HOME=/root
export GOPATH=$(shell pwd)/${LOOKERPREFIX}/go
PREFIX="$(shell pwd)/${LOOKERPREFIX}/build"

GO_SRC_PATH="$(shell pwd)/${CONTAINERIO}/src/github.com/containerd/containerd"
PACKAGE=${PACKAGE:-containerd.io}

binaries: ## Create containerd binaries
	@set -x; GOPATH="$(shell pwd)/${CONTAINERIO}/" PREFIX="$(shell pwd)/${CONTAINERIO}/build" make -C $(GO_SRC_PATH) --no-print-directory \
		DESTDIR="$$(pwd)/${CONTAINERIO}" \
		VERSION=$(CVERSION) \
		REVISION=$(REF) \
		PACKAGE=$(PACKAGE) \
		binaries install
# Remove containerd-stress, as we're not shipping it as part of the packages
	rm -f bin/containerd-stress
bin/runc:
	@set -x;GOPATH="$(shell pwd)/${CONTAINERIO}/" PREFIX="$(shell pwd)/${CONTAINERIO}/build" make -C $(shell pwd)/${CONTAINERIO}/src/github.com/opencontainers/runc  --no-print-directory \
		BINDIR="$$(pwd)/${CONTAINERIO}/bin" \
		BUILDTAGS='seccomp apparmor selinux' \
		runc install
man: ## Create containerd man pages
	@echo "+ make -C $(GO_SRC_PATH) --no-print-directory man"
	GOPATH="$(shell pwd)/${CONTAINERIO}/" PREFIX="$(shell pwd)/${CONTAINERIO}/build" make -C $(GO_SRC_PATH) --no-print-directory man
	›   # copy the generated man pages instead of using "make install-man" to allow
	›   # dh_installman doing its magic
	install -d man
	install -D -m 0644 $(GO_SRC_PATH)/man/* man

override_dh_systemd_start:
	dh_systemd_start --restart-after-upgrade
	sed -i 's/_dh_action=try-restart/_dh_action=restart/g' debian/lcf-utils.postinst.debhelper


override_dh_auto_build: binaries bin/runc
#	cp debian/Makefile $(shell pwd)/
	dh_auto_build
	mkdir -p $(shell pwd)/${LOOKERPREFIX}/build
	mkdir -p $(shell pwd)/${LOOKERPREFIX}/go/src/github.com/docker
	ln -snf $(shell pwd)/${LOOKERPREFIX}/sources/engine $(shell pwd)/${LOOKERPREFIX}/go/src/github.com/docker/docker
	ln -snf $(shell pwd)/${LOOKERPREFIX}/sources/cli $(shell pwd)/${LOOKERPREFIX}/go/src/github.com/docker/cli
	# Build the daemon and dependencies
	cd ${LOOKERPREFIX}/sources/engine && VERSION=$(LVERSION) PRODUCT=loongker ./hack/make.sh dynbinary
	PREFIX="$(PREFIX)" TMP_GOPATH="$(shell pwd)/${LOOKERPREFIX}/go" ${LOOKERPREFIX}/installer/install.sh tini
	PREFIX="$(PREFIX)" TMP_GOPATH="$(shell pwd)/${LOOKERPREFIX}/go" ${LOOKERPREFIX}/installer/install.sh proxy dynamic
	PREFIX="$(PREFIX)" TMP_GOPATH="$(shell pwd)/${LOOKERPREFIX}go" ${LOOKERPREFIX}/installer/install.sh rootlesskit dynamic
	# Build the CLI
	cd $(shell pwd)/${LOOKERPREFIX}/go/src/github.com/docker/cli && \
		LDFLAGS='' DISABLE_WARN_OUTSIDE_CONTAINER=1 make VERSION=$(LVERSION) GITCOMMIT=$(CLI_GITCOMMIT) dynbinary 
	# Make sure to set LDFLAGS="" since, dpkg-buildflags sets it to some weird values
	set -e; LDFLAGS='' bash ${LOOKERPREFIX}/installer/plugins/buildx.installer build 
	##### build loong-container
	
override_dh_auto_test:
	./${LOOKERPREFIX}/sources/engine/bundles/dynbinary-daemon/loongkerd -v
	./${LOOKERPREFIX}/sources/cli/build/loongker -v

override_dh_strip:
	# Go has lots of problems with stripping, so just don't

override_dh_auto_install:
	dh_auto_install
	install -D -m 0755 $(shell pwd)/${LOOKERPREFIX}/go/src/github.com/docker/cli/build/loongker debian/lcf-utils/usr/bin/loongker
	install -D -m 0755 $(shell pwd)/${LOOKERPREFIX}/go/src/github.com/docker/buildx/bin/loongker-buildx debian/lcf-utils/usr/libexec/docker/cli-plugins/loongker-buildx
	# docker-ce install
	install -D -m 0644 $(shell pwd)/${LOOKERPREFIX}/sources/loongker.service debian/lcf-utils/lib/systemd/system/loongker.service
	install -D -m 0644 $(shell pwd)/${LOOKERPREFIX}/sources/loongker.socket debian/lcf-utils/lib/systemd/system/loongker.socket
	install -D -m 0644 $(shell pwd)/${LOOKERPREFIX}/sources/daemon.json debian/lcf-utils/etc/loongker/daemon.json
	install -D -m 0755 $(shell readlink -e ${LOOKERPREFIX}/sources/engine/bundles/dynbinary-daemon/loongkerd) debian/lcf-utils/usr/bin/loongkerd
	install -D -m 0755 $(PREFIX)/loongker-proxy debian/lcf-utils/usr/bin/loongker-proxy
	install -D -m 0755 $(PREFIX)/loongker-init debian/lcf-utils/usr/bin/loongker-init
	# docker-ce-rootless-extras install
	install -D -m 0755 $(PREFIX)/loong-rootlesskit debian/lcf-utils/usr/bin/loong-rootlesskit
	install -D -m 0755 $(PREFIX)/rootlesskit-loongker-proxy debian/lcf-utils/usr/bin/rootlesskit-loongker-proxy
	install -D -m 0755 ${LOOKERPREFIX}/sources/engine/contrib/loongkerd-rootless.sh debian/lcf-utils/usr/bin/loongkerd-rootless.sh
	install -D -m 0755 ${LOOKERPREFIX}/sources/engine/contrib/loongkerd-rootless-setuptool.sh debian/lcf-utils/usr/bin/loongkerd-rootless-setuptool.sh
	# TODO: how can we install vpnkit?
	#
	# container
	install -D -m 0755 ${shell pwd}/${CONTAINERIO}/bin/* debian/lcf-utils/usr/bin
	install -D -m 0644 ${shell pwd}/${CONTAINERIO}/common/loong-containerd.service debian/lcf-utils/lib/systemd/system/loong-containerd.service
	install -D -m 0644 ${shell pwd}/${CONTAINERIO}/common/containerd.toml    debian/lcf-utils/etc/loong-containerd/config.toml
	# binfmt
	install -D -m 0644 ${shell pwd}/${BINFMT}/etc/binfmt.d/lcf_i386.conf    debian/lcf-utils/etc/binfmt.d/lcf_i386.conf
	install -D -m 0644 ${shell pwd}/${BINFMT}/etc/binfmt.d/lcf_x86_64.conf    debian/lcf-utils/etc/binfmt.d/lcf_x86_64.conf
	install -D -m 0644 ${shell pwd}/${BINFMT}/etc/sysctl.d/lcf_mmap_min_addr.conf    debian/lcf-utils/etc/sysctl.d/lcf_mmap_min_addr.conf

override_dh_installinit:
	# use "docker" as our service name, not "docker-ce"
	dh_installinit --name=loongker

override_dh_shlibdeps:
	dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info

override_dh_install:
	dh_install
	# TODO Can we do this from within our container?
	dh_apparmor --profile-name=loongker-ce -plcf-utils

%:
	# dh $@ --with=bash-completion $(shell echo --with=systemd)
	dh $@ --with=bash-completion $(shell command -v dh_systemd_enable > /dev/null 2>&1 && echo --with=systemd)

