# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7

CONTAINERD_COMMIT=0e8719f54c6dc6571fc1170da75a85e86c17636b
EGO_PN="github.com/containerd/${PN}"

# lakitu: inherits eutils and systemd to install the containerd.service.
inherit golang-vcs-snapshot toolchain-funcs eutils systemd

DESCRIPTION="A daemon to control runC"
HOMEPAGE="https://containerd.io/"
SRC_URI="https://github.com/containerd/containerd/archive/v${PV}.tar.gz -> ${P}.tar.gz"

LICENSE="Apache-2.0"
SLOT="0"
KEYWORDS="*"
IUSE="apparmor btrfs device-mapper +cri hardened +seccomp selinux test"

DEPEND="
	btrfs? ( sys-fs/btrfs-progs )
	seccomp? ( sys-libs/libseccomp )
"

# lakitu: RDEPEND on sys-apps/systemd because of the dependency on
# containerd.service.
RDEPEND="
	${DEPEND}
	>=app-emulation/runc-1.0.0
	sys-apps/systemd
"

BDEPEND="
	dev-go/go-md2man
	virtual/pkgconfig
	test? ( ${RDEPEND} )
"

# tests require root or docker
# upstream does not recommend stripping binary
RESTRICT+=" strip test"

S="${WORKDIR}/${P}/src/${EGO_PN}"

PATCHES=(
	# lakitu: set containerd path to /usr/bin/containerd
	"${FILESDIR}"/1.4.0-customize-containerd-service.patch
)

src_prepare() {
	default
	sed -i -e "s/git describe --match.*$/echo ${PV})/"\
		-e "s/git rev-parse HEAD.*$/echo ${CONTAINERD_COMMIT})/"\
		-e "s/-s -w//" \
		Makefile || die
}

src_compile() {
	local options=(
		$(usev apparmor)
		$(usex btrfs "" "no_btrfs")
		$(usex cri "" "no_cri")
		$(usex device-mapper "" "no_devmapper")
		$(usev seccomp)
		$(usev selinux)
	)

	myemakeargs=(
		BUILDTAGS="${options[*]}"
		DESTDIR="${ED}"
		LDFLAGS="$(usex hardened '-extldflags -fno-PIC' '')"
	)

	export GOPATH="${WORKDIR}/${P}" # ${PWD}/vendor
	export GOFLAGS="-v -x -mod=vendor"
	# lakitu: export a function named 'go' that invokes the go cross-compiler.
	# The containerd Makefile will invoke this function instead of doing a PATH
	# lookup for the go binary.
	GO="$(tc-getGO)"
	export GO
	go() {
		echo "${GO} $@" 1>&2
		"${GO}" "$@"
	}
	export -f go
	# lakitu: don't build man pages as cross-compiling man pages doesn't
	# work on ARM.
	# TODO(mikewu@): renable man pages building once b/178526852 is fixed.
	#emake "${myemakeargs[@]}" all man
	emake "${myemakeargs[@]}" all
	unset -f go
}

src_install() {
	dobin bin/*
	# lakitu: don't install man pages as cross-compiling man pages doesn't
	# work on ARM.
	# TODO(mikewu@): uncomment the following line once b/178526852 is fixed.
	#doman man/*
	# lakitu: we use systemd service to start containerd.
	# newinitd "${FILESDIR}"/${PN}.initd "${PN}"
	keepdir /var/lib/containerd

	# we already installed manpages, remove markdown source
	# before installing docs directory
	rm -r docs/man || die

	local DOCS=( README.md docs/. )
	einstalldocs

	# lakitu: runs containerd as an individual service. This prevents
	# docker from supervising containerd.
	systemd_dounit containerd.service
	systemd_enable_service multi-user.target containerd.service
}
