#!/usr/bin/env 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=pkg-${dep_name}-${dep_version}
dep_dirname=php-${dep_version}
dep_archive_name=${dep_dirname}.tar.gz
dep_url=https://php.net/get/${dep_archive_name}/from/this/mirror
dep_manifest=${dep_package}.composer.json

echo "-----> Building minimal PHP ${dep_version}..."

curl -L ${dep_url} | tar xz

pushd ${dep_dirname}

# we need libreadline for PHP
needed=()
if [[ $STACK == heroku-2[02] ]]; then
	needed+=( libreadline8 )
else
	needed+=( libreadline8t64 )
fi
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

# we need libreadline-dev for PHP
needed=( libreadline-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

export PATH=${OUT_PREFIX}/bin:$PATH
# cannot be built shared: date, ereg, opcache (always), pcre, reflection, sockets (?), spl, standard,
# sqlite3 and pdo_sqlite are on by default but we're building them shared on purpose
./configure \
	--prefix=${OUT_PREFIX} \
	--with-config-file-path=/app/.heroku/php-min/etc/php \
	--with-config-file-scan-dir=/app/.heroku/php-min/etc/php/conf.d \
	--enable-static \
	--disable-phpdbg \
	--disable-cgi \
	--enable-cli\
	--with-bz2 \
	--with-curl \
	--disable-dom \
	--without-libxml \
	--with-openssl \
	--without-pear \
	--disable-pdo \
	--without-pdo-sqlite \
	--with-readline \
	--disable-session \
	--disable-simplexml \
	--without-sqlite3 \
	--enable-sockets \
	--disable-xml \
	--disable-xmlreader \
	--disable-xmlwriter \
	--with-zip \
	--with-zlib
make -s -j $(($(nproc)+1))

mkdir -p ${OUT_PREFIX}/bin
cp sapi/cli/php ${OUT_PREFIX}/bin/php
popd

echo "-----> Stripping..."
strip ${OUT_PREFIX}/bin/php

python $(dirname $BASH_SOURCE)/_util/include/manifest.py "heroku-sys-package" "heroku-sys/pkg-${dep_name}" "$dep_version" "${dep_formula}.tar.gz" > $dep_manifest

print_or_export_manifest_cmd "$(generate_manifest_cmd "$dep_manifest")"
