# Description: OpenJDK 21 Java Development Kit
# URL: https://openjdk.java.net/
# Maintainer: Tim Biermann, tbier at posteo dot de
# Depends on: alsa-lib cups giflib harfbuzz lcms2 libxslt nss unzip xorg-libxrandr xorg-libxt xorg-libxtst zip
# Optional: publicsuffix-list

name=openjdk21-jdk
version=21.0.9+5
release=1
_boot_ver=20.0.2+9
_boot_date=20241103
_cert_ver=20210916
source=(https://github.com/openjdk/jdk${version::2}u/archive/refs/tags/jdk-$version.tar.gz
  https://git.crux.nu/tb/java-distfiles/media/branch/master/distfiles/openjdk${_boot_ver::2}-boot-${_boot_ver}-${_boot_date}.tar.xz
  https://git.crux.nu/tb/java-distfiles/media/branch/master/distfiles/java_cacerts-${_cert_ver}
  system-public-suffix.patch
)

build() {
  if command -v ccache >/dev/null 2>&1; then
    export PATH=$(echo $PATH | tr ':' '\n' | grep -E '/(s?bin)$' | tr '\n' ':')
    PKGMK_JDK21+=' --enable-ccache'
  fi

  patch -p1 -d $SRC/jdk${version::2}u-jdk-${version/+/-} -i $SRC/system-public-suffix.patch

  OLD_PATH=$PATH
  export JAVA_HOME=$SRC/openjdk${_boot_ver::2}-boot
  export PATH=$JAVA_HOME/bin:$OLD_PATH

  export EXTRA_CPP_FLAGS="$CXXFLAGS -fcommon"
  export EXTRA_CFLAGS="$CFLAGS -fcommon"
  unset CFLAGS
  unset CXXFLAGS
  unset LDFLAGS
  unset MAKEFLAGS

  [ -z $JOBS ] && JOBS=$(nproc)

  mkdir $SRC/build
  cd $SRC/build

  LC_ALL=C
  /bin/bash ../jdk21u-jdk-${version/+/-}/configure $PKGMK_JDK21 \
    --prefix=/usr/lib/java/$name \
    --disable-precompiled-headers \
    --disable-warnings-as-errors \
    --enable-dtrace=no \
    --enable-unlimited-crypto \
    --with-native-debug-symbols=internal \
    --with-debug-level=release \
    --with-stdc++lib=dynamic \
    --with-jvm-variants=server \
    --with-jvm-features=zgc,shenandoahgc,link-time-opt \
    --with-cacerts-file=$SRC/java_cacerts-$_cert_ver \
    --with-jtreg=no \
    --with-boot-jdk=$JAVA_HOME \
    --with-version-opt="CRUX-r$release" \
    --with-version-build="${version#*+}" \
    --with-vendor-name="CRUX" \
    --with-jobs=$JOBS \
    --with-libjpeg=system \
    --with-giflib=system \
    --with-libpng=system \
    --with-zlib=system \
    --with-lcms=system \
    --with-freetype=system \
    --with-harfbuzz=system \
    --with-extra-cflags="$EXTRA_C_FLAGS" \
    --with-extra-cxxflags="$EXTRA_CPP_FLAGS"

  # NOTE: for debugging build issues: set LOG to debug, JOBS to 1.
  LC_ALL=C \
  make LOG=warn JOBS=$JOBS jdk-image

  rm -r images/jdk/demo
  rm -r images/jdk/lib/src.zip
  rm -r images/jdk/lib/*.ja
  rm -r images/jdk/legal
  rm images/jdk/conf/security/policy/README.txt

  install -d -m 0755 $PKG/usr/lib/java/$name
  cp -r images/jdk/* $PKG/usr/lib/java/$name/

  install -d -m 0755 $PKG/etc/revdep.d
  echo "/usr/lib/java/$name/lib" > $PKG/etc/revdep.d/$name
  echo "/usr/lib/java/$name/lib/jli" >> $PKG/etc/revdep.d/$name
  echo "/usr/lib/java/$name/lib/server" >> $PKG/etc/revdep.d/$name
}
