#!/bin/bash

# fail hard
set -o pipefail
# fail harder
set -eu

source $(dirname $BASH_SOURCE)/../_util/include/manifest.sh

OUT_PREFIX=$1

dep_formula=${0#$WORKSPACE_DIR/}
dep_name=$(basename $BASH_SOURCE)
dep_version=${dep_formula##*"/${dep_name}-"}
dep_package=${dep_name}-${dep_version}
dep_dirname=${dep_name}-${dep_version}
dep_archive_name=${dep_dirname}.tar.gz
dep_url=https://launchpad.net/libmemcached/1.0/${dep_version}/+download/${dep_archive_name}
dep_manifest=${dep_package}.composer.json

# can't build without this
needed=( libsasl2-2 )
missing=$(comm -1 -3 <(dpkg-query -W -f '${package}\n' | sort) <(IFS=$'\n'; echo "${needed[*]}" | sort))
if [[ "$missing" ]]; then
	echo "Error! Missing libraries: $missing"
	exit 1
fi

# skip build if already present
needed=( libmemcached11 )
missing=$(comm -1 -3 <(dpkg-query -W -f '${package}\n' | sort) <(IFS=$'\n'; echo "${needed[*]}" | sort))
if [[ "$missing" ]]; then
	# we need libsasl2-dev
	needed=( libsasl2-dev )
	missing=$(comm -1 -3 <(dpkg-query -W -f '${package}\n' | sort) <(IFS=$'\n'; echo "${needed[*]}" | sort))
	if [[ "$missing" ]]; then
		apt-get update -qq || { echo "Failed to 'apt-get update'. You must build this formula using Docker."; exit 1; }
		apt-get install -q -y $missing
	fi
	echo "-----> Building ${dep_package}..."

	curl -L ${dep_url} | tar xz
	pushd ${dep_dirname}
	./configure --prefix=${OUT_PREFIX} --without-memcached --disable-static
	make -s -j 9
	make install-strip -s
	popd

	rm -rf ${OUT_PREFIX}/share/man

	ABI_VERSION=$(soname_version ${OUT_PREFIX}/lib/libmemcached.so)
	type="heroku-sys-library"
else
	echo "-----> System ${dep_name} available, creating empty package..."
	ABI_VERSION=$(soname_version /usr/lib/x86_64-linux-gnu/libmemcached.so)
	# we don't want this dummy package to end up in the Composer repository
	type="heroku-sys-package"
fi

echo
echo "ABI version is: ${ABI_VERSION}"
echo

python $(dirname $BASH_SOURCE)/../_util/include/manifest.py "$type" "heroku-sys/${dep_name}" "$dep_version" "${dep_formula}.tar.gz" "{}" "{}" "{}" "{\"heroku-sys/libmemcached-abi\":\"${ABI_VERSION}\"}" > $dep_manifest

print_or_export_manifest_cmd "$(generate_manifest_cmd "$dep_manifest")"
