#!/usr/bin/env bash

CROSS="$DEST/../cross"

set -e

arch=$(go env GOHOSTARCH)
if [ ! -d "$CROSS/linux/${arch}" ]; then
	echo >&2 'error: binary and cross must be run before tgz'
	false
fi

(
for d in "$CROSS/"*/*; do
	export GOARCH="$(basename "$d")"
	export GOOS="$(basename "$(dirname "$d")")"

	source "${MAKEDIR}/.binary-setup"

	BINARY_NAME="${DOCKER_CLIENT_BINARY_NAME}-$VERSION"
	DAEMON_BINARY_NAME="${DOCKER_DAEMON_BINARY_NAME}-$VERSION"
	PROXY_BINARY_NAME="${DOCKER_PROXY_BINARY_NAME}-$VERSION"
	BINARY_EXTENSION="$(export GOOS && binary_extension)"
	if [ "$GOOS" = 'windows' ]; then
		# if windows use a zip, not tgz
		BUNDLE_EXTENSION=".zip"
		IS_TAR="false"
	elif [ "$GOOS" == "solaris" ]; then
		# Solaris bypasses cross due to CGO issues.
		continue
	else
		BUNDLE_EXTENSION=".tgz"
		IS_TAR="true"
	fi
	BINARY_FULLNAME="$BINARY_NAME$BINARY_EXTENSION"
	DAEMON_BINARY_FULLNAME="$DAEMON_BINARY_NAME$BINARY_EXTENSION"
	PROXY_BINARY_FULLNAME="$PROXY_BINARY_NAME$BINARY_EXTENSION"
	mkdir -p "$DEST/$GOOS/$GOARCH"
	TGZ="$DEST/$GOOS/$GOARCH/$BINARY_NAME$BUNDLE_EXTENSION"

	# The staging directory for the files in the tgz
	BUILD_PATH="$DEST/build"

	# The directory that is at the root of the tar file
	TAR_BASE_DIRECTORY="docker"

	# $DEST/build/docker
	TAR_PATH="$BUILD_PATH/$TAR_BASE_DIRECTORY"

	# Copy the correct docker binary
	mkdir -p $TAR_PATH
	cp -L "$d/$BINARY_FULLNAME" "$TAR_PATH/${DOCKER_CLIENT_BINARY_NAME}${BINARY_EXTENSION}"
	if [ -f "$d/$DAEMON_BINARY_FULLNAME" ]; then
		cp -L "$d/$DAEMON_BINARY_FULLNAME" "$TAR_PATH/${DOCKER_DAEMON_BINARY_NAME}${BINARY_EXTENSION}"
	fi
	if [ -f "$d/$PROXY_BINARY_FULLNAME" ]; then
		cp -L "$d/$PROXY_BINARY_FULLNAME" "$TAR_PATH/${DOCKER_PROXY_BINARY_NAME}${BINARY_EXTENSION}"
	fi

	# copy over all the extra binaries
	copy_binaries $TAR_PATH

	# add completions
	for s in bash fish zsh; do
		mkdir -p $TAR_PATH/completion/$s
		cp -L contrib/completion/$s/*docker* $TAR_PATH/completion/$s/
	done

	if [ "$IS_TAR" == "true" ]; then
		echo "Creating tgz from $BUILD_PATH and naming it $TGZ"
		tar --numeric-owner --owner 0 -C "$BUILD_PATH" -czf "$TGZ" $TAR_BASE_DIRECTORY
	else
		# ZIP needs to full absolute dir path, not the absolute path
		ZIP=`pwd`"/$TGZ"
		# keep track of where we are, for later.
		pushd .
		# go into the BUILD_PATH since zip does not have a -C equivalent.
		cd $BUILD_PATH
		echo "Creating zip from $BUILD_PATH and naming it $ZIP"
		zip -q -r $ZIP $TAR_BASE_DIRECTORY
		# go back to where we started
		popd
	fi

	hash_files "$TGZ"

	# cleanup after ourselves
	rm -rf "$BUILD_PATH"

	echo "Created tgz: $TGZ"
done
)
