#!/bin/sh
set -e

# CONTAINERD_VERSION specifies the version of the containerd runtime binary
# to install from the https://github.com/containerd/containerd repository.
#
# This version is used to build statically compiled containerd binaries, and
# used for the integration tests. The distributed docker .deb and .rpm packages
# depend on a separate (containerd.io) package, which may be a different version
# as is specified here.
#
# Generally, the commit specified here should match a tagged release.
#
# The containerd golang package is also pinned in vendor.conf. When updating
# the binary version you may also need to update the vendor version to pick up
# bug fixes or new APIs, however, usually the Go packages are built from a
# commit from the master branch.
: "${CONTAINERD_VERSION:=v1.6.3}"

install_containerd() (
	echo "Install containerd version $CONTAINERD_VERSION"
	git clone https://github.com/containerd/containerd.git "$GOPATH/src/github.com/containerd/containerd"
	cd "$GOPATH/src/github.com/containerd/containerd"
	git checkout -q "$CONTAINERD_VERSION"

	export BUILDTAGS='netgo osusergo static_build'
	export EXTRA_FLAGS=${GO_BUILDMODE}
	export EXTRA_LDFLAGS='-extldflags "-fno-PIC -static"'

	# Reset build flags to nothing if we want a dynbinary
	if [ "$1" = "dynamic" ]; then
		export BUILDTAGS=''
		export EXTRA_FLAGS=''
		export EXTRA_LDFLAGS=''
	fi
	make

	install -D bin/containerd "${PREFIX}/containerd"
	install -D bin/containerd-shim "${PREFIX}/containerd-shim"
	install -D bin/containerd-shim-runc-v2 "${PREFIX}/containerd-shim-runc-v2"
	install -D bin/ctr "${PREFIX}/ctr"
)
