#!/bin/sh

set -e
set -u

libexec="$(cd "$(dirname "$0")"; pwd)"
top="${libexec}/.."
src="${2:-"${top}/src"}"
version="${1:-$("${libexec}/metadata" node_version)}"

cd "${src}/node-v${version}"

BASEDIR="${PWD}"
BUILDTYPE="${BUILDTYPE:-Release}"

eval "$("${libexec}/platform")"

cd "${BASEDIR}/deps/v8/include"

rm -rf "${top}/vendor/v8/include"
find . -name '*.h' | while read -r header; do
    dir="${top}/vendor/v8/include/$(dirname "${header}")"
    mkdir -p "${dir}"
    cp "${header}" "${dir}"
done

cd "${BASEDIR}/out/${BUILDTYPE}"

case "${RUBY_TARGET_PLATFORM}" in
    *-darwin*)
        RUBY_TARGET_PLATFORM="$(echo "${RUBY_TARGET_PLATFORM}" | sed -e 's/-darwin[0-9]*/-darwin/')"
        ;;
esac

rm -rf "${top}/vendor/v8/${RUBY_TARGET_PLATFORM}"
# shellcheck disable=SC2043
for lib in libv8_monolith.a; do
    dir="${top}/vendor/v8/${RUBY_TARGET_PLATFORM}/libv8/obj/$(dirname "${lib}")"
    mkdir -p "${dir}"
    rm -f "${dir}/${lib}"

    if [ "$STRIP_NEEDS_EXTRACT" = "y" ]; then
        # manual extract/strip objects/build archive sequence
        # because `strip` can't deal with these
        # (presumably due to that folder issue mentioned below)
        (
            tmpdir="$(mktemp -d)"
            trap 'rm -r "$tmpdir"' EXIT
            mkdir "$tmpdir/stage"
            cd "$tmpdir/stage"

            # create folders named in `ar` archive (`ar -x` fails to create these)
            "$AR" "$ARLISTFLAGS" "$BASEDIR/out/$BUILDTYPE/$lib" | while read -r path; do
              dirname "$path"
            done | uniq | xargs mkdir -p
            "$AR" "$AREXTRACTFLAGS" "$BASEDIR/out/${BUILDTYPE}/$lib"

            # strip all objects
            "$FIND" -type f -exec "$STRIP" -Sx {} +

            # rebuild the archive
            "$FIND" -type f -exec "$AR" "$ARCOLLECTFLAGS" "../$lib" {} +
            $ARBUILDSYMBOLS "../$lib"
            mv "../$lib" "$dir/$lib"
        )
        echo "${BASEDIR}/out/${BUILDTYPE}/${lib} -> ${dir}/${lib}"
    else
        echo "${BASEDIR}/out/${BUILDTYPE}/${lib} -> ${dir}/${lib}"
        "${STRIP}" -S -x -o "${dir}/${lib}" "${lib}"
    fi
done

mkdir -p "${top}/ext/libv8-node"
echo '--- !ruby/object:Libv8::Node::Location::Vendor {}' > "${top}/ext/libv8-node/.location.yml"
