#!/usr/bin/env bash

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

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

OUT_PREFIX=$1

export PATH=${OUT_PREFIX}/bin:${PATH}

dep_formula=${0#$WORKSPACE_DIR/}
dep_version=${dep_formula##*"/${dep_name}-"}
dep_package=ext-${dep_name}-${dep_version}
dep_dirname=${dep_name}-${dep_version}
dep_archive_name=${dep_dirname}.tgz
dep_url=https://pecl.php.net/get/${dep_archive_name}
series=$(php-config --version | cut -d. -f1,2) # get "7.3", "7.4", "8.0" etc for the php requirement in the manifest
dep_manifest=${dep_package}_php-$series.composer.json

echo "-----> Building ${dep_package} (from PECL)..."

curl -L ${dep_url} | tar xz

pushd ${dep_dirname}
phpize
./configure \
	--prefix=${OUT_PREFIX} \
	${CONFIGURE_EXTRA:-}
make -s -j $(($(nproc)+1))

# php was a build dep, and it's in $OUT_PREFIX; we only want our build results in the final archive, and no build deps
# the easiest way is to nuke $OUT_PREFIX and running "make install", but extensions built for PHP 8.1+ need PHP headers during linking
# so instead we use the extension Makefile's INSTALL_ROOT variable to prefix the install destination path name, and then move that back to $OUT_PREFIX
tmpdest=$(mktemp -d)
echo "-----> Installing into clean ${tmpdest}..."
make INSTALL_ROOT=$tmpdest install -s
echo "-----> Moving install result from ${tmpdest}${OUT_PREFIX} to $OUT_PREFIX..."
rm -rf $OUT_PREFIX # remove $OUT_PREFIX first (otherwise we'd move things *into* it)
mv ${tmpdest}${OUT_PREFIX} $OUT_PREFIX # move from /tmp/foobarz/app/.heroku/php to /app/.heroku/php
popd

strip --strip-unneeded ${OUT_PREFIX}/lib/php/extensions/*/*.so

MANIFEST_REQUIRE="${MANIFEST_REQUIRE:-"{\"heroku-sys/php\":\"${series}.*\"}"}"
MANIFEST_CONFLICT="${MANIFEST_CONFLICT:-"{}"}"
MANIFEST_REPLACE="${MANIFEST_REPLACE:-"{}"}"
MANIFEST_PROVIDE="${MANIFEST_PROVIDE:-"{}"}"
MANIFEST_EXTRA="${MANIFEST_EXTRA:-"{}"}"

python $(dirname $BASH_SOURCE)/../_util/include/manifest.py "heroku-sys-php-extension" "heroku-sys/ext-${dep_name}" "$dep_version" "${dep_formula}.tar.gz" "$MANIFEST_REQUIRE" "$MANIFEST_CONFLICT" "$MANIFEST_REPLACE" "$MANIFEST_PROVIDE" "$MANIFEST_EXTRA" > $dep_manifest

print_or_export_manifest_cmd "$(generate_manifest_cmd "$dep_manifest")"
