##### Control part variables
EXTRA_FEATURES=""
OPENJDK_SUFFIX="-25"

##### Archtecture mapping
ab_match_arch "amd64" && export ADOPTIUM_ARCH="x64" JDK_HAS_JIT=y
ab_match_arch "armv4" && export ADOPTIUM_ARCH="aarch32" JDK_HAS_JIT=y
ab_match_arch "armv6hf" && export ADOPTIUM_ARCH="aarch32" JDK_HAS_JIT=y
ab_match_arch "armv7hf" && export ADOPTIUM_ARCH="aarch32" JDK_HAS_JIT=y
ab_match_arch "arm64" && export ADOPTIUM_ARCH="aarch64" JDK_HAS_JIT=y
ab_match_arch "mipsel" && export ADOPTIUM_ARCH="mipsel"
ab_match_arch "powerpc" && export ADOPTIUM_ARCH="ppc"
ab_match_arch "ppc64el" && export ADOPTIUM_ARCH="ppc64le" JDK_HAS_JIT=y
ab_match_arch "loongson3" && export DEBIAN_ARCH="mips64el"
ab_match_arch "riscv64" && export DEBIAN_ARCH="riscv64" JDK_HAS_JIT=y
ab_match_arch "loongarch64" && export LOONGARCH64_BOOT="y" JDK_HAS_JIT=y
ab_match_arch "loongarch64_nosimd" && export LOONGARCH64_BOOT="y" JDK_HAS_JIT=y

__JDK_CONFIGURE_AFTER=()
if [[ -z "${JDK_HAS_JIT:-}" ]]; then
    __JDK_CONFIGURE_AFTER+=(
        "--with-jvm-variants=zero"
        "--enable-precompiled-headers"
    )
    # FIXME: disable jfr in zero builds to fix:
    # error: no matching function for call to ‘frame::frame(intptr_t* const&,
    # intptr_t* const&, intptr_t* const&, address, nmethod* const&)’
    EXTRA_FEATURES+=",-jfr"
else
    EXTRA_FEATURES+=",shenandoahgc,zgc,jfr"
fi

unset JAVA_HOME
unset _JAVA_OPTIONS

abinfo "Configuring OpenJDK ${PKGVER} ..."
install -dv -m 755 "$SRCDIR"/image
sh "$SRCDIR"/configure \
    --prefix="$SRCDIR"/image \
    --with-conf-name=aosc \
    --with-version-pre='' \
    --with-version-opt="AOSC" \
    --with-stdc++lib=dynamic \
    --disable-warnings-as-errors \
    --enable-unlimited-crypto \
    --enable-linktime-gc \
    --with-zlib=system \
    --with-libpng=system \
    --with-libjpeg=system \
    --with-giflib=system \
    "${__JDK_CONFIGURE_AFTER[@]}" \
    --with-jvm-features="${EXTRA_FEATURES}" \
    --enable-precompiled-headers \
    --with-extra-cxxflags="${EXTRA_CPP_FLAGS}" \
    --with-extra-cflags="${EXTRA_CFLAGS}" \
    --with-extra-ldflags="${LDFLAGS}" \
    --with-vendor-bug-url="https://github.com/AOSC-Dev/aosc-os-abbs/issues" \
    --with-vendor-vm-bug-url="https://github.com/AOSC-Dev/aosc-os-abbs/issues" \
    --with-native-debug-symbols=zipped

abinfo "Building OpenJDK ..."
make product-images docs JOBS="$(nproc)"

mkdir -pv "$PKGDIR"/usr/lib/java
mkdir -pv "$PKGDIR/etc/"

IMAGE_FOLDER=build/aosc/images/
abinfo "Copying JDK images ..."
cp -av "${IMAGE_FOLDER}"/jdk/* "$PKGDIR"/usr/lib/java/
mv -v "$PKGDIR"/usr/lib/java/conf "$PKGDIR"/etc/openjdk/
ln -sv ../../../etc/openjdk"$OPENJDK_SUFFIX"/ "$PKGDIR"/usr/lib/java/conf

#FIXME: No pandoc for Loongson3 for now
if ! ab_match_arch loongson3; then
    mkdir -pv "$PKGDIR"/usr/share
    abinfo "Installing man pages ..."
    mv -v "$PKGDIR"/usr/lib/java/man "$PKGDIR"/usr/share/man
    ln -sv ../../share/man "$PKGDIR"/usr/lib/java/man
    find "$PKGDIR"/usr/share/man -type l -delete
else
    abwarn "Loongson3 has no pandoc!Skip copying manpages..."
fi

find "$PKGDIR" -iname '*.diz' -exec rm -v {} \;
find "$PKGDIR" -iname '*.debuginfo' -exec rm -v {} \;

mkdir -pv "$PKGDIR"/usr/src/openjdk
mv -v "$PKGDIR"/usr/lib/java/lib/src.zip "$PKGDIR"/usr/src/openjdk/src.zip
ln -sv ../../../src/openjdk"$OPENJDK_SUFFIX"/src.zip "$PKGDIR"/usr/lib/java/lib/src.zip

abinfo "Linking system CA certificate store ..."
rm -fv "$PKGDIR"/usr/lib/java/lib/security/cacerts
ln -sfv ../../../../../etc/ssl/certs/java/cacerts "$PKGDIR"/usr/lib/java/lib/security/cacerts

if [[ -n "$OPENJDK_SUFFIX" ]]; then
    abinfo "Renaming for openjdk suffix ..."
    for path in "$PKGDIR"{/etc/openjdk,/usr/lib/java,/usr/src/openjdk}; do
        mv -vf "$path" "$path""$OPENJDK_SUFFIX"
    done
    if [[ -e "$PKGDIR"/usr/share/man/man1 ]]; then
        mv -vf "$PKGDIR"/usr/share/man/man1 "$PKGDIR"/usr/share/man/man1openjdk"$OPENJDK_SUFFIX"
    fi
fi

abinfo "Generating conffiles ..."
pushd "$PKGDIR" || exit
while read -r path; do
    printf '/%s\n' "$path" >>"$SRCDIR"/autobuild/conffiles
done < <(find etc/openjdk"$OPENJDK_SUFFIX" -type f)
popd || exit

unset ADOPTIUM_ARCH ALPINE_ARCH DEBIAN_ARCH LOONGARCH64_BOOT JDKBOOTDIR
