#!/bin/bash
set -e

docker-version-osarch() {
	local target="$1" # "Client" or "Server"
	local fmtStr="{{.${target}.Os}}/{{.${target}.Arch}}"
	if docker version -f "$fmtStr" 2>/dev/null; then
		# if "docker version -f" works, let's just use that!
		return
	fi
	docker version | awk '
		$1 ~ /^(Client|Server):$/ { section = 0 }
		$1 == "'"$target"':" { section = 1; next }
		section && $1 == "OS/Arch:" { print $2 }

		# old versions of Docker
		$1 == "OS/Arch" && $2 == "('"${target,,}"'):" { print $3 }
	'
}

# Retrieve OS/ARCH of docker daemon, e.g. linux/amd64
export DOCKER_ENGINE_OSARCH="$(docker-version-osarch 'Server')"
export DOCKER_ENGINE_GOOS="${DOCKER_ENGINE_OSARCH%/*}"
export DOCKER_ENGINE_GOARCH="${DOCKER_ENGINE_OSARCH##*/}"
DOCKER_ENGINE_GOARCH=${DOCKER_ENGINE_GOARCH:=amd64}

# and the client, just in case
export DOCKER_CLIENT_OSARCH="$(docker-version-osarch 'Client')"
export DOCKER_CLIENT_GOOS="${DOCKER_CLIENT_OSARCH%/*}"
export DOCKER_CLIENT_GOARCH="${DOCKER_CLIENT_OSARCH##*/}"
DOCKER_CLIENT_GOARCH=${DOCKER_CLIENT_GOARCH:=amd64}

# Retrieve the architecture used in contrib/builder/(deb|rpm)/$PACKAGE_ARCH/
PACKAGE_ARCH='amd64'
case "${DOCKER_ENGINE_GOARCH:-$DOCKER_CLIENT_GOARCH}" in
	arm)
		PACKAGE_ARCH='armhf'
		;;
	arm64)
		PACKAGE_ARCH='aarch64'
		;;
	amd64|ppc64le|s390x)
		PACKAGE_ARCH="${DOCKER_ENGINE_GOARCH:-$DOCKER_CLIENT_GOARCH}"
		;;
	*)
		echo >&2 "warning: not sure how to convert '$DOCKER_ENGINE_GOARCH' to a 'Docker' arch, assuming '$PACKAGE_ARCH'"
		;;
esac
export PACKAGE_ARCH

DOCKERFILE='Dockerfile'
TEST_IMAGE_NAMESPACE=
case "$PACKAGE_ARCH" in
	amd64)
		case "${DOCKER_ENGINE_GOOS:-$DOCKER_CLIENT_GOOS}" in
			windows)
				DOCKERFILE='Dockerfile.windows'
				;;
			solaris)
				DOCKERFILE='Dockerfile.solaris'
				;;
		esac
		;;
	*)
		DOCKERFILE="Dockerfile.$PACKAGE_ARCH"
		TEST_IMAGE_NAMESPACE="$PACKAGE_ARCH"
		;;
esac
export DOCKERFILE TEST_IMAGE_NAMESPACE
