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

EAPI=7

CONTAINERD_COMMIT=1fbd70374134b891f97ce19c70b6e50c7b9f4e0d
VERSION=1.7.0
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}-real.tar.gz"

# This includes the licenses of dependencies as the binary is statically linked.
#
# If LICENSE contains BSD, ISC, or MIT, then chromite will scan the source for
# copyright attribution. If the package vendors its dependencies or includes a
# THIRD_PARTY_LICENSES/ directory, then chromite will properly attribute all
# dependencies in about_os_credits.html.
#
# This list was determined by inspecting the output of:
#   go-licenses csv github.com/containerd/containerd/cmd/containerd
#   go-licenses csv github.com/containerd/containerd/cmd/ctr
#   go-licenses csv github.com/containerd/containerd/cmd/containerd-shim
#   go-licenses csv github.com/containerd/containerd/cmd/containerd-shim-runc-v1
#   go-licenses csv github.com/containerd/containerd/cmd/containerd-shim-runc-v2
#   go-licenses csv github.com/containerd/containerd/cmd/containerd-stress
# inside a clone of the package repo.
# https://github.com/google/go-licenses
LICENSE="Apache-2.0 BSD-2 BSD ISC MIT MPL-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-containers/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
	# Remove after upgrading to 1.7.1
	"${FILESDIR}"/1.7.0-Add-mounts-for-resolv-conf-runtime-spec.patch
)

src_prepare() {
	default
	sed -i -e "s/git describe --match.*$/echo ${VERSION})/"\
		-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

	# b/261648655 - create default plugin dirs to suppress warning
	keepdir /opt/containerd/bin
	keepdir /opt/containerd/lib

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

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

	insinto /etc/containerd
	newins "${FILESDIR}"/containerd-config.toml config.toml

	# 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
}
