Github messages for voidlinux
 help / color / mirror / Atom feed
* [PR PATCH] jdk21
@ 2023-12-23  0:38 classabbyamp
  2023-12-23  0:41 ` [PR PATCH] [Updated] jdk21 classabbyamp
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: classabbyamp @ 2023-12-23  0:38 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 419 bytes --]

There is a new pull request by classabbyamp against master on the void-packages repository

https://github.com/classabbyamp/void-packages jdk21
https://github.com/void-linux/void-packages/pull/47882

jdk21
#### Testing the changes
- I tested the changes in this PR: **YES**

test please: https://files.placeviolette.net/jdk21/


A patch file from https://github.com/void-linux/void-packages/pull/47882.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-jdk21-47882.patch --]
[-- Type: text/x-diff, Size: 118502 bytes --]

From 1b6d702ca2c9c6b434eb3d4688f0d66811567d39 Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Thu, 21 Dec 2023 17:36:47 -0500
Subject: [PATCH 01/12] xbps-triggers: update to 0.127.

get rid of the openjdk profile hook. it should not have been done like this.
---
 Manual.md                                   |  8 -----
 srcpkgs/xbps-triggers/files/openjdk-profile | 39 ---------------------
 srcpkgs/xbps-triggers/template              |  2 +-
 3 files changed, 1 insertion(+), 48 deletions(-)
 delete mode 100755 srcpkgs/xbps-triggers/files/openjdk-profile

diff --git a/Manual.md b/Manual.md
index 667ab634f9713..e6a98551eee30 100644
--- a/Manual.md
+++ b/Manual.md
@@ -62,7 +62,6 @@ packages for XBPS, the `Void Linux` native packaging system.
 		* [kernel-hooks](#triggers_kernel_hooks)
 		* [mimedb](#triggers_mimedb)
 		* [mkdirs](#triggers_mkdirs)
-		* [openjdk-profile](#triggers_openjdk_profile)
 		* [pango-modules](#triggers_pango_module)
 		* [pycompile](#triggers_pycompile)
 		* [register-shell](#triggers_register_shell)
@@ -2016,13 +2015,6 @@ During removal it will delete the directory using `rmdir`.
 To include this trigger use the `make_dirs` variable, as the trigger won't do anything
 unless it is defined.
 
-<a id="triggers_openjdk_profile"></a>
-#### openjdk-profile
-
-The openjdk-profile trigger is responsible for creating an entry in /etc/profile.d that
-sets the `JAVA_HOME` environment variable to the currently-selected alternative for
-`/usr/bin/java` on installation. This trigger must be manually requested.
-
 <a id="triggers_pango_module"></a>
 #### pango-modules
 
diff --git a/srcpkgs/xbps-triggers/files/openjdk-profile b/srcpkgs/xbps-triggers/files/openjdk-profile
deleted file mode 100755
index 007d9cd9eedf4..0000000000000
--- a/srcpkgs/xbps-triggers/files/openjdk-profile
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/sh
-#
-# Adds an entry to /etc/profile.d for setting $JAVA_HOME.
-#
-# Arguments:	$ACTION = [run/targets]
-#		$TARGET = [post-install/pre-remove]
-#		$PKGNAME
-#		$VERSION
-#		$UPDATE = [yes/no]
-#
-ACTION="$1"
-TARGET="$2"
-PKGNAME="$3"
-VERSION="$4"
-UPDATE="$5"
-
-jdkprofile=etc/profile.d/openjdk.sh
-
-case "$ACTION" in
-targets)
-	echo "post-install"
-	;;
-run)
-	[ -f "$jdkprofile" ] && exit 0
-
-	cat > "$jdkprofile" <<'EOF'
-if _java_bin=$(readlink -e /usr/bin/java); then
-	_java_bin="${_java_bin%/bin/java}"
-	[ -d "${_java_bin}" ] && export JAVA_HOME="${JAVA_HOME:=${_java_bin}}"
-fi
-unset _java_bin
-EOF
-	;;
-*)
-	exit 1
-	;;
-esac
-
-exit 0
diff --git a/srcpkgs/xbps-triggers/template b/srcpkgs/xbps-triggers/template
index 76c3a6b27fad4..66936411a4258 100644
--- a/srcpkgs/xbps-triggers/template
+++ b/srcpkgs/xbps-triggers/template
@@ -1,6 +1,6 @@
 # Template file for 'xbps-triggers'
 pkgname=xbps-triggers
-version=0.126
+version=0.127
 revision=1
 bootstrap=yes
 short_desc="XBPS triggers for Void Linux"

From dab30131acacf6337adb288395952a8c131dfa4a Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Thu, 21 Dec 2023 17:32:52 -0500
Subject: [PATCH 02/12] New package: openjdk-common-1

Replaces the xbps trigger that added the profile script for openjdk,
which was really a mistake.

Instead of using alternative groups for specific JRE/JDK binaries, use
two symlinks: /usr/lib/jvm/default-jdk and /usr/lib/jvm/default-jre,
which point to /usr/lib/jvm/${version}. Prefer default-jdk to default-jre,
and just add them to PATH and MANPATH instead of putting things in /usr/bin.
---
 srcpkgs/openjdk-common/INSTALL          |  9 +++++++++
 srcpkgs/openjdk-common/INSTALL.msg      |  2 ++
 srcpkgs/openjdk-common/files/profile.sh | 12 ++++++++++++
 srcpkgs/openjdk-common/template         | 12 ++++++++++++
 4 files changed, 35 insertions(+)
 create mode 100644 srcpkgs/openjdk-common/INSTALL
 create mode 100644 srcpkgs/openjdk-common/INSTALL.msg
 create mode 100644 srcpkgs/openjdk-common/files/profile.sh
 create mode 100644 srcpkgs/openjdk-common/template

diff --git a/srcpkgs/openjdk-common/INSTALL b/srcpkgs/openjdk-common/INSTALL
new file mode 100644
index 0000000000000..e0e155cc208ab
--- /dev/null
+++ b/srcpkgs/openjdk-common/INSTALL
@@ -0,0 +1,9 @@
+#!/bin/sh
+case "$ACTION" in
+pre)
+	# remove the openjdk.sh from xbps-triggers
+	if [ -e "./etc/profile.d/openjdk.sh" ]; then
+		rm "./etc/profile.d/openjdk.sh"
+	fi
+	;;
+esac
diff --git a/srcpkgs/openjdk-common/INSTALL.msg b/srcpkgs/openjdk-common/INSTALL.msg
new file mode 100644
index 0000000000000..7e75b5abe457b
--- /dev/null
+++ b/srcpkgs/openjdk-common/INSTALL.msg
@@ -0,0 +1,2 @@
+The way the default OpenJDK version is selected has changed.
+You may need to re-login for this change to take effect.
diff --git a/srcpkgs/openjdk-common/files/profile.sh b/srcpkgs/openjdk-common/files/profile.sh
new file mode 100644
index 0000000000000..e9c9a6042eea7
--- /dev/null
+++ b/srcpkgs/openjdk-common/files/profile.sh
@@ -0,0 +1,12 @@
+# only modify the environment if an openjdk*-jre package is installed
+if [ -e "/usr/lib/jvm/default-jre" ]; then
+	# if an openjdk* package is installed, prefer it to the selected jre
+	if [ -e "/usr/lib/jvm/default-jdk" ]; then
+		export JAVA_HOME="/usr/lib/jvm/default-jdk"
+	else
+		export JAVA_HOME="/usr/lib/jvm/default-jre"
+	fi
+	# append the select jdk and jre bin and man dirs to the relevant PATHs
+	export PATH="$PATH:/usr/lib/jvm/default-jdk/bin:/usr/lib/jvm/default-jre/bin"
+	export MANPATH="$MANPATH:/usr/lib/jvm/default-jdk/man:/usr/lib/jvm/default-jre/man"
+fi
diff --git a/srcpkgs/openjdk-common/template b/srcpkgs/openjdk-common/template
new file mode 100644
index 0000000000000..e0d3d53d55004
--- /dev/null
+++ b/srcpkgs/openjdk-common/template
@@ -0,0 +1,12 @@
+# Template file for 'openjdk-common'
+pkgname=openjdk-common
+version=1
+revision=1
+short_desc="Common files for OpenJDK packages"
+maintainer="classabbyamp <void@placeviolette.net>"
+license="Public Domain"
+homepage="https://www.voidlinux.org"
+
+do_install() {
+	vinstall "${FILESDIR}"/profile.sh 644 /etc/profile.d jdk.sh
+}

From b226850ac3c3e3134bce965b9dd625de3b1d75a8 Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Thu, 21 Dec 2023 17:37:34 -0500
Subject: [PATCH 03/12] openjdk8: update to 8u332b05.

- various template cleanups
- rename /usr/lib/jvm/java-1.8-openjdk to /usr/lib/jvm/openjdk8
  for consistency
- fix manpages
- fix alternatives
---
 srcpkgs/openjdk8/template | 167 ++++++++++++--------------------------
 1 file changed, 50 insertions(+), 117 deletions(-)

diff --git a/srcpkgs/openjdk8/template b/srcpkgs/openjdk8/template
index 8266daff8d8a2..966f5c3703f01 100644
--- a/srcpkgs/openjdk8/template
+++ b/srcpkgs/openjdk8/template
@@ -1,19 +1,13 @@
 # Template file for 'openjdk8'
-# TODO: better places for bin and man?
-# TODO: make -headless versions
-# TODO: config files?
 pkgname=openjdk8
-version=8u322b04
-revision=5
+version=8u332b05
+revision=1
 _jdk_update="${version#*u}"
 _jdk_update="${_jdk_update%b*}"
 _jdk_build="${version#*b}"
-_jdk_home="usr/lib/jvm/java-1.8-openjdk"
-# we're using aarch64 port repo to get aarch64 JIT; the repo is
-# otherwise the same as the normal one, just with aarch64 port added
-_repo_ver="aarch64-shenandoah-jdk${version/b/-b}"
+_jdk_home="usr/lib/jvm/openjdk8"
+_commit="bdc2203a44df159d94ecd0e04a230e65cb84297e"
 archs="x86_64* i686* aarch64* arm* ppc64*"
-create_wrksrc=yes
 build_style=gnu-configure
 configure_args="
  --prefix=${XBPS_DESTDIR}/${XBPS_CROSS_TRIPLET}/${pkgname}-${version}/usr/lib
@@ -28,13 +22,14 @@ configure_args="
  --with-freetype-lib=${XBPS_CROSS_BASE}/usr/lib
  --with-freetype-include=${XBPS_CROSS_BASE}/usr/include/freetype2
  --with-jtreg=no
- --with-jobs=${XBPS_MAKEJOBS}
- --with-vendor-name="Void"
- --with-vendor-url="https://voidlinux.org/"
- --with-vendor-bug-url="https://github.com/void-linux/void-packages/issues"
- --with-vendor-vm-bug-url="https://github.com/void-linux/void-packages/issues"
+ --with-jobs=${XBPS_ORIG_MAKEJOBS}
+ --with-vendor-name=Void
+ --with-vendor-url=https://voidlinux.org/
+ --with-vendor-bug-url=https://github.com/void-linux/void-packages/issues
+ --with-vendor-vm-bug-url=https://github.com/void-linux/void-packages/issues
  --disable-option-checking"
-make_build_args="images $(vopt_if docs docs) COMPILER_WARNINGS_FATAL=false"
+make_build_args="images $(vopt_if docs docs) COMPILER_WARNINGS_FATAL=false GIT=true"
+make_install_args="GIT=true"
 hostmakedepends="pkg-config automake autoconf cpio tar unzip zip ca-certificates
  zlib-devel make-ca which"
 makedepends="libXrender-devel libXtst-devel libXt-devel libXrandr-devel
@@ -45,28 +40,19 @@ short_desc="OpenJDK Java Development Kit (version 8)"
 maintainer="Toyam Cox <Vaelatern@voidlinux.org>"
 license="GPL-2.0-only WITH Classpath-exception-2.0"
 homepage="http://openjdk.java.net/"
-distfiles="
- http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/archive/${_repo_ver}.tar.gz>jdk8u-${_repo_ver}.tar.gz
- http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/corba/archive/${_repo_ver}.tar.gz>corba-${_repo_ver}.tar.gz
- http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/hotspot/archive/${_repo_ver}.tar.gz>hotspot-${_repo_ver}.tar.gz
- http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/jdk/archive/${_repo_ver}.tar.gz>jdk-${_repo_ver}.tar.gz
- http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/jaxws/archive/${_repo_ver}.tar.gz>jaxws-${_repo_ver}.tar.gz
- http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/jaxp/archive/${_repo_ver}.tar.gz>jaxp-${_repo_ver}.tar.gz
- http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/langtools/archive/${_repo_ver}.tar.gz>langtools-${_repo_ver}.tar.gz
- http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/nashorn/archive/${_repo_ver}.tar.gz>nashorn-${_repo_ver}.tar.gz"
+# we're using aarch64 port repo to get aarch64 JIT; the repo is
+# otherwise the same as the normal one, just with aarch64 port added
+distfiles="https://github.com/openjdk/shenandoah-jdk8u/archive/${_commit}.tar.gz"
+checksum=4c39be8454a1b8b10a9ff845a4e7e639808799d3d2eddb1484df80835d5e88e4
 
-checksum="8ef23f1fb449c50c7c71f58f9ec9e5ac6dd152f4c830408f5c02b77652d634cc
- 2680d968821fdd4363c68b1a835a9bbd76d6a94fdc0ab6e1b1aaadc5ccd1ed8a
- 5561c84e1d5111fff0142ba4d397b29d6dc9e3702955567bd5b4986e8cf4f2ef
- 7eb13948061d8ec98323fdac424955753f339c145af04a3f86100437dff60257
- fe21a137b6fb1881db1c5c01f372126f6b165c6d3b98421e6862255f456cbfd6
- 22a1b86820ef585c45bce36d822872354bc0dd183c5516f89da28e0666d3901b
- 34c306eadb436cd9f22f306f4f1d4ea4f167923e8affa2d2797d6c3de6da46ea
- 17730e5cc2a84c4680f692008f3805ce4e4edeb2008e2e6a4fb86b9dde06fe23"
+disable_parallel_build=yes
 
 build_options="docs"
 desc_option_docs="Build documentation"
 
+alternatives="jdk:/usr/lib/jvm/default-jdk:/${_jdk_home}"
+provides="java-environment-${version}_1"
+
 # no hotspot JIT for arm32 and ppc32
 case "$XBPS_TARGET_MACHINE" in
 	ppc64*) ;;
@@ -81,8 +67,6 @@ else
 	build_options_default+=" docs"
 fi
 
-provides="java-environment-${version}_1"
-
 if [ ! "$CROSS_BUILD" ]; then
 	hostmakedepends+=" openjdk7-bootstrap"
 	configure_args+=" --with-boot-jdk=/usr/lib/jvm/java-1.7-openjdk"
@@ -94,57 +78,11 @@ fi
 # enabling ccache segfaults gcc
 export CCACHE_DISABLE=1
 
-alternatives="
- jdk:/usr/bin/appletviewer:/${_jdk_home}/bin/appletviewer
- jdk:/usr/bin/extcheck:/${_jdk_home}/bin/extcheck
- jdk:/usr/bin/idlj:/${_jdk_home}/bin/idlj
- jdk:/usr/bin/jar:/${_jdk_home}/bin/jar
- jdk:/usr/bin/jarsigner:/${_jdk_home}/bin/jarsigner
- jdk:/usr/bin/java:/${_jdk_home}/bin/java
- jdk:/usr/bin/java-rmi.cgi:/${_jdk_home}/bin/java-rmi.cgi
- jdk:/usr/bin/javac:/${_jdk_home}/bin/javac
- jdk:/usr/bin/javadoc:/${_jdk_home}/bin/javadoc
- jdk:/usr/bin/javah:/${_jdk_home}/bin/javah
- jdk:/usr/bin/javap:/${_jdk_home}/bin/javap
- jdk:/usr/bin/jcmd:/${_jdk_home}/bin/jcmd
- jdk:/usr/bin/jconsole:/${_jdk_home}/bin/jconsole
- jdk:/usr/bin/jdb:/${_jdk_home}/bin/jdb
- jdk:/usr/bin/jdeps:/${_jdk_home}/bin/jdeps
- jdk:/usr/bin/jhat:/${_jdk_home}/bin/jhat
- jdk:/usr/bin/jinfo:/${_jdk_home}/bin/jinfo
- jdk:/usr/bin/jjs:/${_jdk_home}/bin/jjs
- jdk:/usr/bin/jmap:/${_jdk_home}/bin/jmap
- jdk:/usr/bin/jps:/${_jdk_home}/bin/jps
- jdk:/usr/bin/jrunscript:/${_jdk_home}/bin/jrunscript
- jdk:/usr/bin/jsadebugd:/${_jdk_home}/bin/jsadebugd
- jdk:/usr/bin/jstack:/${_jdk_home}/bin/jstack
- jdk:/usr/bin/jstat:/${_jdk_home}/bin/jstat
- jdk:/usr/bin/jstatd:/${_jdk_home}/bin/jstatd
- jdk:/usr/bin/keytool:/${_jdk_home}/bin/keytool
- jdk:/usr/bin/native2ascii:/${_jdk_home}/bin/native2ascii
- jdk:/usr/bin/orbd:/${_jdk_home}/bin/orbd
- jdk:/usr/bin/pack200:/${_jdk_home}/bin/pack200
- jdk:/usr/bin/policytool:/${_jdk_home}/bin/policytool
- jdk:/usr/bin/rmic:/${_jdk_home}/bin/rmic
- jdk:/usr/bin/rmid:/${_jdk_home}/bin/rmid
- jdk:/usr/bin/rmiregistry:/${_jdk_home}/bin/rmiregistry
- jdk:/usr/bin/schemagen:/${_jdk_home}/bin/schemagen
- jdk:/usr/bin/serialver:/${_jdk_home}/bin/serialver
- jdk:/usr/bin/servertool:/${_jdk_home}/bin/servertool
- jdk:/usr/bin/tnameserv:/${_jdk_home}/bin/tnameserv
- jdk:/usr/bin/unpack200:/${_jdk_home}/bin/unpack200
- jdk:/usr/bin/wsgen:/${_jdk_home}/bin/wsgen
- jdk:/usr/bin/wsimport:/${_jdk_home}/bin/wsimport
- jdk:/usr/bin/xjc:/${_jdk_home}/bin/xjc
-"
-
 post_extract() {
-	mv jdk8u*/* .
 	chmod +x configure
-	for subrepo in corba hotspot jdk jaxws jaxp langtools nashorn; do
-		mv ${subrepo}-${_repo_ver} ${subrepo}
-	done
+}
 
+post_patch() {
 	# gcc complains about the signed shift left
 	vsed -i jdk/src/share/native/com/sun/java/util/jar/pack/constants.h \
 		-e's;(-1)<<13;~0u<<13;g'
@@ -152,20 +90,22 @@ post_extract() {
 	# wrong "return false;" instead of "return null;"
 	vsed -i jdk/src/share/native/com/sun/java/util/jar/pack/jni.cpp \
 		-e"295s;false;null;"
-}
 
-post_patch() {
-	[ "$XBPS_TARGET_LIBC" != "musl" ] && return 0
+	# pretend we're a git checkout
+	echo "${_commit}" > .gittip
+	mkdir .git
 
-	for f in ${FILESDIR}/musl_*.patch; do
-		echo "Applying $f"
-		patch -sNp1 -i "$f"
-	done
+	if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+		for f in "${FILESDIR}"/musl_*.patch; do
+			echo "Applying $f"
+			patch -sNp1 -i "$f"
+		done
 
-	# add cross prefix for thread_db.h check, fix cross from glibc to musl
-	sed -i "s,/usr/include/thread_db.h,${XBPS_CROSS_BASE}/usr/include/thread_db.h," \
-	 hotspot/make/linux/makefiles/defs.make hotspot/make/linux/makefiles/sa.make \
-	 hotspot/make/linux/makefiles/saproc.make
+		# add cross prefix for thread_db.h check, fix cross from glibc to musl
+		sed -i "s,/usr/include/thread_db.h,${XBPS_CROSS_BASE}/usr/include/thread_db.h," \
+		 hotspot/make/linux/makefiles/defs.make hotspot/make/linux/makefiles/sa.make \
+		 hotspot/make/linux/makefiles/saproc.make
+	fi
 }
 
 do_configure() {
@@ -200,11 +140,6 @@ pre_build() {
 	unset CFLAGS CXXFLAGS LDFLAGS
 }
 
-do_build() {
-	# do not set disable_parallel_build in order to be able to read makejobs
-	make -j1 ${make_build_args} ${make_build_target}
-}
-
 post_install() {
 	# we manage this ourselves
 	rm -rf ${DESTDIR}/usr/lib/bin
@@ -213,6 +148,11 @@ post_install() {
 	mv ${DESTDIR}/usr/lib/jvm/openjdk-1.8.0_${_jdk_update} \
 	   ${DESTDIR}/${_jdk_home}
 
+	# don't duplicate binaries already in jre/bin
+	for bin in "${DESTDIR}/${_jdk_home}/jre/bin"/*; do
+		ln -srf "${bin}" "${bin/jre/}"
+	done
+
 	vmkdir ${_jdk_home}/lib/security
 	make-ca -g -f --destdir "${PWD}/ca" -k "${DESTDIR}/${_jdk_home}/bin/keytool"
 	mv ./ca/etc/pki/tls/java/cacerts ${DESTDIR}/${_jdk_home}/lib/security/
@@ -228,23 +168,15 @@ openjdk8-jre_package() {
 	shlib_provides="libawt.so libawt_xawt.so libjava.so libjli.so libjvm.so libjawt.so"
 	short_desc+=" - runtime components"
 	provides="java-runtime-${version}_1"
-	depends="xbps-triggers>=0.122_1"
-	triggers="openjdk-profile"
-	alternatives="
-	 java:/usr/bin/java:/${_jdk_home}/jre/bin/java
-	 java:/usr/bin/jjs:/${_jdk_home}/jre/bin/jjs
-	 java:/usr/bin/keytool:/${_jdk_home}/jre/bin/keytool
-	 java:/usr/bin/orbd:/${_jdk_home}/jre/bin/orbd
-	 java:/usr/bin/pack200:/${_jdk_home}/jre/bin/pack200
-	 java:/usr/bin/policytool:/${_jdk_home}/jre/bin/policytool
-	 java:/usr/bin/rmid:/${_jdk_home}/jre/bin/rmid
-	 java:/usr/bin/rmiregistry:/${_jdk_home}/jre/bin/rmiregistry
-	 java:/usr/bin/servertool:/${_jdk_home}/jre/bin/servertool
-	 java:/usr/bin/tnameserv:/${_jdk_home}/jre/bin/tnameserv
-	 java:/usr/bin/unpack200:/${_jdk_home}/jre/bin/unpack200
-	"
+	depends="openjdk-common"
+	alternatives="java:/usr/lib/jvm/default-jre:/${_jdk_home}/jre"
 	pkg_install() {
-		vmove ${_jdk_home}/jre
+		vmove "${_jdk_home}"/jre
+		for bin in "${PKGDESTDIR}/${_jdk_home}/jre/bin"/*; do
+			bin="$(basename "$bin")"
+			vmove "${_jdk_home}/man/man1/${bin}.1"
+			vmove "${_jdk_home}/man/ja_JP.UTF-8/man1/${bin}.1"
+		done
 	}
 }
 
@@ -263,12 +195,13 @@ openjdk8-doc_package() {
 	noverifyrdeps=yes
 	noshlibprovides=yes
 	short_desc+=" - documentation"
+	if [ -z "$build_option_docs" ]; then
+		build_style=meta
+	fi
 	pkg_install() {
-		cd ${wrksrc}
 		if [ "$build_option_docs" ]; then
 			vmkdir usr/share/doc/openjdk8
 			cp -a build/linux-*/docs/* ${PKGDESTDIR}/usr/share/doc/openjdk8
 		fi
-		vmove ${_jdk_home}/man/man1
 	}
 }

From fadf517717d77037fed7a1d8245098a8b219ec2c Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Thu, 21 Dec 2023 17:41:58 -0500
Subject: [PATCH 04/12] openjdk9-bootstrap: fix jdk8 path

---
 srcpkgs/openjdk9-bootstrap/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/openjdk9-bootstrap/template b/srcpkgs/openjdk9-bootstrap/template
index c50cc4adc7e18..2027d02781155 100644
--- a/srcpkgs/openjdk9-bootstrap/template
+++ b/srcpkgs/openjdk9-bootstrap/template
@@ -21,7 +21,7 @@ configure_args="
  --with-debug-level=release
  --with-version-pre=
  --with-version-build=${version#*p}
- --with-boot-jdk=/usr/lib/jvm/java-1.8-openjdk"
+ --with-boot-jdk=/usr/lib/jvm/openjdk8"
 make_build_args="images"
 hostmakedepends="pkg-config automake autoconf cpio tar unzip zip ca-certificates
  zlib-devel which openjdk8 make"

From 7caa5faa2ad698c19955c8a1206e574729ed236f Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Thu, 21 Dec 2023 17:40:49 -0500
Subject: [PATCH 05/12] openjdk11-bin: remove package

this package has been useless since 106a275ecd81e132cb80cc21c0ec96a336d16614
make it a transitional package on openjdk11
---
 srcpkgs/openjdk11-bin          |  1 +
 srcpkgs/openjdk11-bin/template | 70 ----------------------------------
 srcpkgs/openjdk11/template     |  9 ++++-
 3 files changed, 9 insertions(+), 71 deletions(-)
 create mode 120000 srcpkgs/openjdk11-bin
 delete mode 100644 srcpkgs/openjdk11-bin/template

diff --git a/srcpkgs/openjdk11-bin b/srcpkgs/openjdk11-bin
new file mode 120000
index 0000000000000..8213494c49ed5
--- /dev/null
+++ b/srcpkgs/openjdk11-bin
@@ -0,0 +1 @@
+openjdk11
\ No newline at end of file
diff --git a/srcpkgs/openjdk11-bin/template b/srcpkgs/openjdk11-bin/template
deleted file mode 100644
index 6dfbbb49fd45a..0000000000000
--- a/srcpkgs/openjdk11-bin/template
+++ /dev/null
@@ -1,70 +0,0 @@
-# Template file for 'openjdk11-bin'
-pkgname=openjdk11-bin
-version=11+28
-revision=2
-archs="x86_64"
-short_desc="Official Reference Implementation for Java SE 11"
-maintainer="Kyle Nusbaum <knusbaum+void@sdf.org>"
-license="GPL-2.0-only WITH Classpath-exception-2.0"
-homepage="https://jdk.java.net/java-se-ri/11"
-distfiles="https://download.java.net/openjdk/jdk11/ri/openjdk-${version}_linux-x64_bin.tar.gz"
-checksum=3784cfc4670f0d4c5482604c7c513beb1a92b005f569df9bf100e8bef6610f2e
-nopie=true
-
-alternatives="
- java:/usr/bin/java:/usr/lib/jvm/openjdk11-bin/bin/java
- java:/usr/bin/javaws:/usr/lib/jvm/openjdk11-bin/bin/javaws
- java:/usr/bin/jcontrol:/usr/lib/jvm/openjdk11-bin/bin/jcontrol
- java:/usr/bin/jjs:/usr/lib/jvm/openjdk11-bin/bin/jjs
- java:/usr/bin/keytool:/usr/lib/jvm/openjdk11-bin/bin/keytool
- java:/usr/bin/orbd:/usr/lib/jvm/openjdk11-bin/bin/orbd
- java:/usr/bin/pack200:/usr/lib/jvm/openjdk11-bin/bin/pack200
- java:/usr/bin/policytool:/usr/lib/jvm/openjdk11-bin/bin/policytool
- java:/usr/bin/rmid:/usr/lib/jvm/openjdk11-bin/bin/rmid
- java:/usr/bin/rmiregistry:/usr/lib/jvm/openjdk11-bin/bin/rmiregistry
- java:/usr/bin/servertool:/usr/lib/jvm/openjdk11-bin/bin/servertool
- java:/usr/bin/tnameserv:/usr/lib/jvm/openjdk11-bin/bin/tnameserv
- java:/usr/bin/unpack200:/usr/lib/jvm/openjdk11-bin/bin/unpack200
-
- jdk:/usr/bin/ControlPanel:/usr/lib/jvm/openjdk11-bin/bin/ControlPanel
- jdk:/usr/bin/appletviewer:/usr/lib/jvm/openjdk11-bin/bin/appletviewer
- jdk:/usr/bin/extcheck:/usr/lib/jvm/openjdk11-bin/bin/extcheck
- jdk:/usr/bin/idlj:/usr/lib/jvm/openjdk11-bin/bin/idlj
- jdk:/usr/bin/jar:/usr/lib/jvm/openjdk11-bin/bin/jar
- jdk:/usr/bin/jarsigner:/usr/lib/jvm/openjdk11-bin/bin/jarsigner
- jdk:/usr/bin/java-rmi.cgi:/usr/lib/jvm/openjdk11-bin/bin/java-rmi.cgi
- jdk:/usr/bin/javac:/usr/lib/jvm/openjdk11-bin/bin/javac
- jdk:/usr/bin/javadoc:/usr/lib/jvm/openjdk11-bin/bin/javadoc
- jdk:/usr/bin/javafxpackager:/usr/lib/jvm/openjdk11-bin/bin/javafxpackager
- jdk:/usr/bin/javah:/usr/lib/jvm/openjdk11-bin/bin/javah
- jdk:/usr/bin/javap:/usr/lib/jvm/openjdk11-bin/bin/javap
- jdk:/usr/bin/javapackager:/usr/lib/jvm/openjdk11-bin/bin/javapackager
- jdk:/usr/bin/jcmd:/usr/lib/jvm/openjdk11-bin/bin/jcmd
- jdk:/usr/bin/jconsole:/usr/lib/jvm/openjdk11-bin/bin/jconsole
- jdk:/usr/bin/jdb:/usr/lib/jvm/openjdk11-bin/bin/jdb
- jdk:/usr/bin/jdeps:/usr/lib/jvm/openjdk11-bin/bin/jdeps
- jdk:/usr/bin/jhat:/usr/lib/jvm/openjdk11-bin/bin/jhat
- jdk:/usr/bin/jinfo:/usr/lib/jvm/openjdk11-bin/bin/jinfo
- jdk:/usr/bin/jmap:/usr/lib/jvm/openjdk11-bin/bin/jmap
- jdk:/usr/bin/jmc:/usr/lib/jvm/openjdk11-bin/bin/jmc
- jdk:/usr/bin/jmc.ini:/usr/lib/jvm/openjdk11-bin/bin/jmc.ini
- jdk:/usr/bin/jps:/usr/lib/jvm/openjdk11-bin/bin/jps
- jdk:/usr/bin/jrunscript:/usr/lib/jvm/openjdk11-bin/bin/jrunscript
- jdk:/usr/bin/jsadebugd:/usr/lib/jvm/openjdk11-bin/bin/jsadebugd
- jdk:/usr/bin/jstack:/usr/lib/jvm/openjdk11-bin/bin/jstack
- jdk:/usr/bin/jstat:/usr/lib/jvm/openjdk11-bin/bin/jstat
- jdk:/usr/bin/jstatd:/usr/lib/jvm/openjdk11-bin/bin/jstatd
- jdk:/usr/bin/jvisualvm:/usr/lib/jvm/openjdk11-bin/bin/jvisualvm
- jdk:/usr/bin/native2ascii:/usr/lib/jvm/openjdk11-bin/bin/native2ascii
- jdk:/usr/bin/rmic:/usr/lib/jvm/openjdk11-bin/bin/rmic
- jdk:/usr/bin/schemagen:/usr/lib/jvm/openjdk11-bin/bin/schemagen
- jdk:/usr/bin/serialver:/usr/lib/jvm/openjdk11-bin/bin/serialver
- jdk:/usr/bin/wsgen:/usr/lib/jvm/openjdk11-bin/bin/wsgen
- jdk:/usr/bin/wsimport:/usr/lib/jvm/openjdk11-bin/bin/wsimport
- jdk:/usr/bin/xjc:/usr/lib/jvm/openjdk11-bin/bin/xjc
-"
-
-do_install() {
-	vmkdir /usr/lib/jvm/openjdk11-bin
-	cp -R ./* ${DESTDIR}/usr/lib/jvm/openjdk11-bin
-}
diff --git a/srcpkgs/openjdk11/template b/srcpkgs/openjdk11/template
index b5dd94241a0c8..783e7c28d72b5 100644
--- a/srcpkgs/openjdk11/template
+++ b/srcpkgs/openjdk11/template
@@ -156,7 +156,7 @@ do_install() {
 	vlicense LICENSE
 }
 
-subpackages="openjdk11-src openjdk11-jre openjdk11-doc openjdk11-jmods openjdk11-static-libs"
+subpackages="openjdk11-src openjdk11-jre openjdk11-doc openjdk11-jmods openjdk11-static-libs openjdk11-bin"
 
 openjdk11-jre_package() {
 	shlib_provides="libawt.so libawt_xawt.so libjava.so libjli.so libjvm.so libjawt.so"
@@ -227,3 +227,10 @@ openjdk11-jmods_package() {
 		vmove $_jdk_home/jmods
 	}
 }
+
+openjdk11-bin_package() {
+	reverts="11+28_1 11+28_2"
+	short_desc+=" (transitional dummy package)"
+	depends="${sourcepkg}>=${version}_${revision}"
+	build_style=meta
+}

From fda552537b92f55702e3ce55effed81453333bc9 Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Thu, 21 Dec 2023 17:42:46 -0500
Subject: [PATCH 06/12] openjdk11: update to 11.0.22+6.

- fix manpages
- fix alternatives
---
 srcpkgs/openjdk11/template | 63 ++++++++------------------------------
 1 file changed, 12 insertions(+), 51 deletions(-)

diff --git a/srcpkgs/openjdk11/template b/srcpkgs/openjdk11/template
index 783e7c28d72b5..64f43424204cc 100644
--- a/srcpkgs/openjdk11/template
+++ b/srcpkgs/openjdk11/template
@@ -1,6 +1,6 @@
 # Template file for 'openjdk11'
 pkgname=openjdk11
-version=11.0.20+8
+version=11.0.22+6
 revision=1
 _java_ver="${version%%.*}"
 _jdk_home="usr/lib/jvm/openjdk${_java_ver}"
@@ -38,7 +38,8 @@ maintainer="Kyle Nusbaum <knusbaum+void@sdf.org>"
 license="GPL-2.0-only WITH Classpath-exception-2.0"
 homepage="http://openjdk.java.net/"
 distfiles="https://github.com/openjdk/jdk${_java_ver}u/archive/jdk-${version}.tar.gz"
-checksum=b2a37ef209ae7eaf8f34182b7c9aa3252af20a214d02970f96ce62242c805479
+checksum=8bae7c5e608de84aa32010365514bb59cd0d8ba709f6730cc473e159c6bfb918
+alternatives="jdk:/usr/lib/jvm/default-jdk:/${_jdk_home}"
 provides="java-environment-${version}_1"
 
 # Build is still parallel, but don't use -jN.
@@ -73,41 +74,6 @@ else
 	configure_args+=" --with-boot-jdk=/${_jdk_home}"
 fi
 
-alternatives="
- jdk:/usr/bin/jaotc:/${_jdk_home}/bin/jaotc
- jdk:/usr/bin/jar:/${_jdk_home}/bin/jar
- jdk:/usr/bin/jarsigner:/${_jdk_home}/bin/jarsigner
- jdk:/usr/bin/java:/${_jdk_home}/bin/java
- jdk:/usr/bin/javac:/${_jdk_home}/bin/javac
- jdk:/usr/bin/javadoc:/${_jdk_home}/bin/javadoc
- jdk:/usr/bin/javap:/${_jdk_home}/bin/javap
- jdk:/usr/bin/jcmd:/${_jdk_home}/bin/jcmd
- jdk:/usr/bin/jconsole:/${_jdk_home}/bin/jconsole
- jdk:/usr/bin/jdb:/${_jdk_home}/bin/jdb
- jdk:/usr/bin/jdeprscan:/${_jdk_home}/bin/jdeprscan
- jdk:/usr/bin/jdeps:/${_jdk_home}/bin/jdeps
- jdk:/usr/bin/jhsdb:/${_jdk_home}/bin/jhsdb
- jdk:/usr/bin/jimage:/${_jdk_home}/bin/jimage
- jdk:/usr/bin/jinfo:/${_jdk_home}/bin/jinfo
- jdk:/usr/bin/jjs:/${_jdk_home}/bin/jjs
- jdk:/usr/bin/jlink:/${_jdk_home}/bin/jlink
- jdk:/usr/bin/jmap:/${_jdk_home}/bin/jmap
- jdk:/usr/bin/jmod:/${_jdk_home}/bin/jmod
- jdk:/usr/bin/jps:/${_jdk_home}/bin/jps
- jdk:/usr/bin/jrunscript:/${_jdk_home}/bin/jrunscript
- jdk:/usr/bin/jshell:/${_jdk_home}/bin/jshell
- jdk:/usr/bin/jstack:/${_jdk_home}/bin/jstack
- jdk:/usr/bin/jstat:/${_jdk_home}/bin/jstat
- jdk:/usr/bin/jstatd:/${_jdk_home}/bin/jstatd
- jdk:/usr/bin/keytool:/${_jdk_home}/bin/keytool
- jdk:/usr/bin/pack200:/${_jdk_home}/bin/pack200
- jdk:/usr/bin/rmic:/${_jdk_home}/bin/rmic
- jdk:/usr/bin/rmid:/${_jdk_home}/bin/rmid
- jdk:/usr/bin/rmiregistry:/${_jdk_home}/bin/rmiregistry
- jdk:/usr/bin/serialver:/${_jdk_home}/bin/serialver
- jdk:/usr/bin/unpack200:/${_jdk_home}/bin/unpack200
-"
-
 post_extract() {
 	chmod +x configure
 	if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
@@ -162,20 +128,13 @@ openjdk11-jre_package() {
 	shlib_provides="libawt.so libawt_xawt.so libjava.so libjli.so libjvm.so libjawt.so"
 	short_desc+=" - runtime components"
 	provides="java-runtime-${version}_1"
-	depends="fontconfig xbps-triggers>=0.122_1"
-	triggers="openjdk-profile"
-	alternatives="
-	 java:/usr/bin/java:/${_jdk_home}/bin/java
-	 java:/usr/bin/jjs:/${_jdk_home}/bin/jjs
-	 java:/usr/bin/keytool:/${_jdk_home}/bin/keytool
-	 java:/usr/bin/pack200:/${_jdk_home}/bin/pack200
-	 java:/usr/bin/rmid:/${_jdk_home}/bin/rmid
-	 java:/usr/bin/rmiregistry:/${_jdk_home}/bin/rmiregistry
-	 java:/usr/bin/unpack200:/${_jdk_home}/bin/unpack200
-	"
+	depends="fontconfig openjdk-common"
+	alternatives="java:/usr/lib/jvm/default-jre:/${_jdk_home}"
 	pkg_install() {
-		for bf in java jjs keytool pack200 rmid rmiregistry unpack200; do
-			vmove $_jdk_home/bin/$bf
+		for bin in java jjs keytool pack200 rmid rmiregistry unpack200; do
+			vmove "${_jdk_home}/bin/${bin}"
+			vmove "${_jdk_home}/man/man1/${bin}.1"
+			vmove "${_jdk_home}/man/ja_JP.UTF-8/man1/${bin}.1"
 		done
 
 		for f in lib legal conf release; do
@@ -192,13 +151,15 @@ openjdk11-doc_package() {
 	noverifyrdeps=yes
 	noshlibprovides=yes
 	short_desc+=" - documentation"
+	if [ -z "$build_option_docs" ]; then
+		build_style=meta
+	fi
 	pkg_install() {
 		cd ${wrksrc}
 		if [ "$build_option_docs" ]; then
 			vmkdir usr/share/doc/openjdk11
 			cp -a build/linux-*/images/docs/* $PKGDESTDIR/usr/share/doc/openjdk11
 		fi
-		vmove $_jdk_home/man/man1
 	}
 }
 

From dceac46f4d5686e7be45ddf2b9b3f047654b16a8 Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Thu, 21 Dec 2023 17:44:04 -0500
Subject: [PATCH 07/12] openjdk17: update to 17.0.10+6.

- fix manpages
- fix alternatives
---
 srcpkgs/openjdk17/template | 55 ++++++++------------------------------
 1 file changed, 11 insertions(+), 44 deletions(-)

diff --git a/srcpkgs/openjdk17/template b/srcpkgs/openjdk17/template
index bb72701f360e6..22fb16fbf9ec1 100644
--- a/srcpkgs/openjdk17/template
+++ b/srcpkgs/openjdk17/template
@@ -1,6 +1,6 @@
 # Template file for 'openjdk17'
 pkgname=openjdk17
-version=17.0.10+2
+version=17.0.10+6
 revision=1
 _gtest_ver=1.8.1
 _java_ver="${version%%.*}"
@@ -45,8 +45,9 @@ license="GPL-2.0-only WITH Classpath-exception-2.0"
 homepage="http://openjdk.java.net/"
 distfiles="https://github.com/openjdk/jdk${_java_ver}u/archive/jdk-${version}.tar.gz
  https://github.com/google/googletest/archive/refs/tags/release-${_gtest_ver}.tar.gz"
-checksum="dbe68a64c43c3e376abd9d03758a487ecfb9c7bf1fe71cf6c2ca113f909be1cb
+checksum="3d5ef3a18c4edfa6e2a16c74d9e771b09eed433006b1380df450aa88725c7238
  9bf1fe5182a604b4135edc1a425ae356c9ad15e9b23f9f12a02e80184c3a249c"
+alternatives="jdk:/usr/lib/jvm/default-jdk:/${_jdk_home}"
 provides="java-environment-${version}_1"
 patch_args="-Np1 --directory=$build_wrksrc"
 
@@ -83,37 +84,6 @@ else
 	configure_args+=" --with-boot-jdk=/usr/lib/jvm/openjdk17"
 fi
 
-alternatives="
- jdk:/usr/bin/jar:/${_jdk_home}/bin/jar
- jdk:/usr/bin/jarsigner:/${_jdk_home}/bin/jarsigner
- jdk:/usr/bin/java:/${_jdk_home}/bin/java
- jdk:/usr/bin/javac:/${_jdk_home}/bin/javac
- jdk:/usr/bin/javadoc:/${_jdk_home}/bin/javadoc
- jdk:/usr/bin/javap:/${_jdk_home}/bin/javap
- jdk:/usr/bin/jcmd:/${_jdk_home}/bin/jcmd
- jdk:/usr/bin/jconsole:/${_jdk_home}/bin/jconsole
- jdk:/usr/bin/jdb:/${_jdk_home}/bin/jdb
- jdk:/usr/bin/jdeprscan:/${_jdk_home}/bin/jdeprscan
- jdk:/usr/bin/jdeps:/${_jdk_home}/bin/jdeps
- jdk:/usr/bin/jfr:/${_jdk_home}/bin/jfr
- jdk:/usr/bin/jhsdb:/${_jdk_home}/bin/jhsdb
- jdk:/usr/bin/jimage:/${_jdk_home}/bin/jimage
- jdk:/usr/bin/jinfo:/${_jdk_home}/bin/jinfo
- jdk:/usr/bin/jlink:/${_jdk_home}/bin/jlink
- jdk:/usr/bin/jmap:/${_jdk_home}/bin/jmap
- jdk:/usr/bin/jmod:/${_jdk_home}/bin/jmod
- jdk:/usr/bin/jpackage:/${_jdk_home}/bin/jpackage
- jdk:/usr/bin/jps:/${_jdk_home}/bin/jps
- jdk:/usr/bin/jrunscript:/${_jdk_home}/bin/jrunscript
- jdk:/usr/bin/jshell:/${_jdk_home}/bin/jshell
- jdk:/usr/bin/jstack:/${_jdk_home}/bin/jstack
- jdk:/usr/bin/jstat:/${_jdk_home}/bin/jstat
- jdk:/usr/bin/jstatd:/${_jdk_home}/bin/jstatd
- jdk:/usr/bin/keytool:/${_jdk_home}/bin/keytool
- jdk:/usr/bin/rmiregistry:/${_jdk_home}/bin/rmiregistry
- jdk:/usr/bin/serialver:/${_jdk_home}/bin/serialver
-"
-
 post_extract() {
 	chmod +x $build_wrksrc/configure
 	if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
@@ -173,17 +143,12 @@ openjdk17-jre_package() {
 	shlib_provides="libawt.so libawt_xawt.so libjava.so libjli.so libjvm.so libjawt.so"
 	short_desc+=" - runtime components"
 	provides="java-runtime-${version}_1"
-	depends="xbps-triggers>=0.122_1"
-	triggers="openjdk-profile"
-	alternatives="
-	 java:/usr/bin/java:/${_jdk_home}/bin/java
-	 java:/usr/bin/jfr:/${_jdk_home}/bin/jfr
-	 java:/usr/bin/keytool:/${_jdk_home}/bin/keytool
-	 java:/usr/bin/rmiregistry:/${_jdk_home}/bin/rmiregistry
-	"
+	depends="openjdk-common"
+	alternatives="java:/usr/lib/jvm/default-jre:/${_jdk_home}"
 	pkg_install() {
-		for bf in java jfr keytool rmiregistry; do
-			vmove $_jdk_home/bin/$bf
+		for bin in java jfr keytool rmiregistry; do
+			vmove "${_jdk_home}/bin/${bin}"
+			vmove "${_jdk_home}/man/man1/${bin}.1"
 		done
 
 		for f in lib legal conf release; do
@@ -200,13 +165,15 @@ openjdk17-doc_package() {
 	noverifyrdeps=yes
 	noshlibprovides=yes
 	short_desc+=" - documentation"
+	if [ -z "$build_option_docs" ]; then
+		build_style=meta
+	fi
 	pkg_install() {
 		if [ "$build_option_docs" ]; then
 			local _docdir=usr/share/doc/openjdk$_java_ver
 			vmkdir $_docdir
 			cp -a $wrksrc/$build_wrksrc/build/linux-*/images/docs/* ${PKGDESTDIR}/$_docdir
 		fi
-		vmove $_jdk_home/man/man1
 	}
 }
 

From d6a86c808663f5cadf31416be02198284ddd60cb Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Fri, 22 Dec 2023 19:26:22 -0500
Subject: [PATCH 08/12] *: fix name of jdk profile script in templates

---
 srcpkgs/apache-fop/template      | 2 +-
 srcpkgs/apache-maven/template    | 2 +-
 srcpkgs/arduino/template         | 2 +-
 srcpkgs/bibletime/template       | 2 +-
 srcpkgs/davmail/template         | 2 +-
 srcpkgs/freeplane/template       | 2 +-
 srcpkgs/freerouting/template     | 2 +-
 srcpkgs/java-commons-io/template | 2 +-
 srcpkgs/jedit/template           | 2 +-
 srcpkgs/kodi/template            | 2 +-
 srcpkgs/lightzone/template       | 2 +-
 srcpkgs/plantuml/template        | 2 +-
 srcpkgs/turbovnc/template        | 2 +-
 13 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/srcpkgs/apache-fop/template b/srcpkgs/apache-fop/template
index 1dd6dd9854281..fe6a130c45c20 100644
--- a/srcpkgs/apache-fop/template
+++ b/srcpkgs/apache-fop/template
@@ -17,7 +17,7 @@ conf_files="/etc/fop.conf"
 
 do_build() {
 	. /etc/profile.d/apache-ant.sh
-	. /etc/profile.d/openjdk.sh
+	. /etc/profile.d/jdk.sh
 	ant package
 }
 do_install() {
diff --git a/srcpkgs/apache-maven/template b/srcpkgs/apache-maven/template
index 4b0995e11ba7d..27091a616c2e1 100644
--- a/srcpkgs/apache-maven/template
+++ b/srcpkgs/apache-maven/template
@@ -15,7 +15,7 @@ checksum="5f499a0c9263be556b03dd64002a1f99892eb50ee253aab81f1f338f3bc7abed
 replaces="apache-maven-bin>=0"
 
 do_build() {
-	source /etc/profile.d/openjdk.sh
+	source /etc/profile.d/jdk.sh
 	./bin/mvn package -DskipTests -Drat.skip=true -Dmaven.repo.local=repo -DdistributionTargetDir=${DESTDIR}/usr/lib/${pkgname}
 }
 
diff --git a/srcpkgs/arduino/template b/srcpkgs/arduino/template
index ad169d3faf3a7..b1cfcac0b2a20 100644
--- a/srcpkgs/arduino/template
+++ b/srcpkgs/arduino/template
@@ -26,7 +26,7 @@ fi
 
 do_build() {
 	. /etc/profile.d/apache-ant.sh
-	. /etc/profile.d/openjdk.sh
+	. /etc/profile.d/jdk.sh
 
 	export CFLAGS+=" -I${XBPS_CROSS_BASE}/usr/lib/jvm/java-1.8-openjdk/include/linux"
 	export CFLAGS+=" -I${XBPS_CROSS_BASE}/usr/lib/jvm/java-1.8-openjdk/include"
diff --git a/srcpkgs/bibletime/template b/srcpkgs/bibletime/template
index d8be23d33be61..fcff5e72752ba 100644
--- a/srcpkgs/bibletime/template
+++ b/srcpkgs/bibletime/template
@@ -20,7 +20,7 @@ distfiles="https://github.com/bibletime/bibletime/releases/download/v${version}/
 checksum=d6beef62ad44b255e3dc4c5e89214bf01a0e85c9136073b0be12fca3d2b22622
 
 pre_build() {
-	. /etc/profile.d/openjdk.sh
+	. /etc/profile.d/jdk.sh
 	if [ "$XBPS_WORDSIZE" = "32" ]; then
 		export _JAVA_OPTIONS="-Xmx1024m"
 	fi
diff --git a/srcpkgs/davmail/template b/srcpkgs/davmail/template
index 1652c266ecfe8..9bcc6dda9d1f2 100644
--- a/srcpkgs/davmail/template
+++ b/srcpkgs/davmail/template
@@ -14,7 +14,7 @@ distfiles="${SOURCEFORGE_SITE}/davmail/davmail-src-${version}-${_commit}.tgz"
 checksum=08e7103d14e9f05ec269caceef7585dcf8be202a35c471fa6fc12729cf99ef2f
 
 do_build() {
-	. /etc/profile.d/openjdk.sh
+	. /etc/profile.d/jdk.sh
 	. /etc/profile.d/apache-ant.sh
 
 	ant jar
diff --git a/srcpkgs/freeplane/template b/srcpkgs/freeplane/template
index 50fb28292152a..e98b19dc01e6a 100644
--- a/srcpkgs/freeplane/template
+++ b/srcpkgs/freeplane/template
@@ -22,7 +22,7 @@ esac
 
 do_build() {
 	. /etc/profile.d/apache-ant.sh
-	. /etc/profile.d/openjdk.sh
+	. /etc/profile.d/jdk.sh
 
 	gradle format_translation binZip -x test
 }
diff --git a/srcpkgs/freerouting/template b/srcpkgs/freerouting/template
index e128119f75cd1..414053ed6c620 100644
--- a/srcpkgs/freerouting/template
+++ b/srcpkgs/freerouting/template
@@ -12,7 +12,7 @@ distfiles="https://github.com/freerouting/${pkgname}/archive/v${version}.tar.gz"
 checksum=36742a91e492956e3adc5d75e542a40f3e03d15d69d15717a9d39c0585faac44
 
 do_build() {
-	. /etc/profile.d/openjdk.sh
+	. /etc/profile.d/jdk.sh
 	gradle assemble
 }
 
diff --git a/srcpkgs/java-commons-io/template b/srcpkgs/java-commons-io/template
index c07dcb187f9fe..945622a6004a4 100644
--- a/srcpkgs/java-commons-io/template
+++ b/srcpkgs/java-commons-io/template
@@ -18,7 +18,7 @@ case "$XBPS_MACHINE" in
 esac
 
 do_build() {
-	source /etc/profile.d/openjdk.sh
+	source /etc/profile.d/jdk.sh
 	mvn package -Dmaven.test.skip=true
 }
 
diff --git a/srcpkgs/jedit/template b/srcpkgs/jedit/template
index 094feb547d7a8..1f014fb04c8d0 100644
--- a/srcpkgs/jedit/template
+++ b/srcpkgs/jedit/template
@@ -18,7 +18,7 @@ post_patch() {
 
 do_build() {
 	. /etc/profile.d/apache-ant.sh
-	. /etc/profile.d/openjdk.sh
+	. /etc/profile.d/jdk.sh
 
 	ant -propertyfile ${FILESDIR}/build.properties build
 	ant -propertyfile ${FILESDIR}/build.properties docs-html
diff --git a/srcpkgs/kodi/template b/srcpkgs/kodi/template
index aa59324258a0d..d37a5918cd675 100644
--- a/srcpkgs/kodi/template
+++ b/srcpkgs/kodi/template
@@ -102,7 +102,7 @@ pre_configure() {
 		xargs sed -i  -e "s;-isystem;-I;g"
 	fi
 
-	. /etc/profile.d/openjdk.sh
+	. /etc/profile.d/jdk.sh
 
 	# Build tools needed to run on the host
 	if [ "$CROSS_BUILD" ]; then
diff --git a/srcpkgs/lightzone/template b/srcpkgs/lightzone/template
index b0c28a0c3a88a..7cfa27dd538ae 100644
--- a/srcpkgs/lightzone/template
+++ b/srcpkgs/lightzone/template
@@ -28,7 +28,7 @@ do_build() {
 	vsed -i lightcrafts/jnisrc/tiff/GNUmakefile \
 		-e "s;\./configure;& --host=${XBPS_MACHINE%-musl};"
 
-	. /etc/profile.d/openjdk.sh
+	. /etc/profile.d/jdk.sh
 	cd linux
 	TARGET=${XBPS_TARGET_MACHINE%-musl} ant jar
 }
diff --git a/srcpkgs/plantuml/template b/srcpkgs/plantuml/template
index 03318f4c07227..156db505a0484 100644
--- a/srcpkgs/plantuml/template
+++ b/srcpkgs/plantuml/template
@@ -14,7 +14,7 @@ distfiles="${SOURCEFORGE_SITE}/plantuml/plantuml-gplv2-${version}.tar.gz"
 checksum=c21bb155ecfc53f4f0a5924238069f0c979b0f426bfa44fd62ce73f2aa1b4339
 
 do_build() {
-	. /etc/profile.d/openjdk.sh
+	. /etc/profile.d/jdk.sh
 	. /etc/profile.d/apache-ant.sh
 	ant
 	mv ${pkgname}.jar ${pkgname}-${version}.jar
diff --git a/srcpkgs/turbovnc/template b/srcpkgs/turbovnc/template
index 287754ef9daa4..9dd794662b862 100644
--- a/srcpkgs/turbovnc/template
+++ b/srcpkgs/turbovnc/template
@@ -27,7 +27,7 @@ if [ "$CROSS_BUILD" ]; then
 fi
 
 pre_configure() {
-	. /etc/profile.d/openjdk.sh
+	. /etc/profile.d/jdk.sh
 }
 
 post_install() {

From 5d19f79087b15280459676a727223f0e2462ae5b Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Fri, 22 Dec 2023 00:44:06 -0500
Subject: [PATCH 09/12] New package: openjdk18-bootstrap-18.0.2.1+0

---
 .../patches/FixNullPtrCast.patch              | 104 +++++
 .../openjdk18-bootstrap/patches/cgroups.patch | 406 ++++++++++++++++++
 srcpkgs/openjdk18-bootstrap/template          | 101 +++++
 srcpkgs/openjdk18-bootstrap/update            |   4 +
 4 files changed, 615 insertions(+)
 create mode 100644 srcpkgs/openjdk18-bootstrap/patches/FixNullPtrCast.patch
 create mode 100644 srcpkgs/openjdk18-bootstrap/patches/cgroups.patch
 create mode 100644 srcpkgs/openjdk18-bootstrap/template
 create mode 100644 srcpkgs/openjdk18-bootstrap/update

diff --git a/srcpkgs/openjdk18-bootstrap/patches/FixNullPtrCast.patch b/srcpkgs/openjdk18-bootstrap/patches/FixNullPtrCast.patch
new file mode 100644
index 0000000000000..7fa335939e61d
--- /dev/null
+++ b/srcpkgs/openjdk18-bootstrap/patches/FixNullPtrCast.patch
@@ -0,0 +1,104 @@
+Subject: Fix cast errors with latest GCC (11.2)
+Upstream: No
+Author: Simon Frankenberger <simon-alpine@fraho.eu>
+
+This patch fixes multiple casting errors reported by GCC 11.2
+
+--- old/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp
++++ new/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp
+@@ -205,7 +205,7 @@
+ 
+   // Note: We don't need a keep-alive-barrier here. We already enqueue any loaded reference for SATB anyway,
+   // because it must be the previous value.
+-  res = load_reference_barrier(decorators, res, reinterpret_cast<T*>(NULL));
++  res = load_reference_barrier(decorators, res, static_cast<T*>(NULL));
+   satb_enqueue(res);
+   return res;
+ }
+@@ -216,7 +216,7 @@
+   oop previous = RawAccess<>::oop_atomic_xchg(addr, new_value);
+   // Note: We don't need a keep-alive-barrier here. We already enqueue any loaded reference for SATB anyway,
+   // because it must be the previous value.
+-  previous = load_reference_barrier<T>(decorators, previous, reinterpret_cast<T*>(NULL));
++  previous = load_reference_barrier<T>(decorators, previous, static_cast<T*>(NULL));
+   satb_enqueue(previous);
+   return previous;
+ }
+--- old/src/hotspot/share/oops/access.hpp
++++ new/src/hotspot/share/oops/access.hpp
+@@ -294,8 +294,8 @@
+   static inline void arraycopy(arrayOop src_obj, size_t src_offset_in_bytes,
+                                arrayOop dst_obj, size_t dst_offset_in_bytes,
+                                size_t length) {
+-    AccessT::arraycopy(src_obj, src_offset_in_bytes, reinterpret_cast<const T*>(NULL),
+-                       dst_obj, dst_offset_in_bytes, reinterpret_cast<T*>(NULL),
++    AccessT::arraycopy(src_obj, src_offset_in_bytes, static_cast<const T*>(NULL),
++                       dst_obj, dst_offset_in_bytes, static_cast<T*>(NULL),
+                        length);
+   }
+ 
+@@ -303,7 +303,7 @@
+   static inline void arraycopy_to_native(arrayOop src_obj, size_t src_offset_in_bytes,
+                                          T* dst,
+                                          size_t length) {
+-    AccessT::arraycopy(src_obj, src_offset_in_bytes, reinterpret_cast<const T*>(NULL),
++    AccessT::arraycopy(src_obj, src_offset_in_bytes, static_cast<const T*>(NULL),
+                        NULL, 0, dst,
+                        length);
+   }
+@@ -313,15 +313,15 @@
+                                            arrayOop dst_obj, size_t dst_offset_in_bytes,
+                                            size_t length) {
+     AccessT::arraycopy(NULL, 0, src,
+-                       dst_obj, dst_offset_in_bytes, reinterpret_cast<T*>(NULL),
++                       dst_obj, dst_offset_in_bytes, static_cast<T*>(NULL),
+                        length);
+   }
+ 
+   static inline bool oop_arraycopy(arrayOop src_obj, size_t src_offset_in_bytes,
+                                    arrayOop dst_obj, size_t dst_offset_in_bytes,
+                                    size_t length) {
+-    return AccessT::oop_arraycopy(src_obj, src_offset_in_bytes, reinterpret_cast<const HeapWord*>(NULL),
+-                                  dst_obj, dst_offset_in_bytes, reinterpret_cast<HeapWord*>(NULL),
++    return AccessT::oop_arraycopy(src_obj, src_offset_in_bytes, static_cast<const HeapWord*>(NULL),
++                                  dst_obj, dst_offset_in_bytes, static_cast<HeapWord*>(NULL),
+                                   length);
+   }
+ 
+--- old/src/hotspot/cpu/x86/interp_masm_x86.cpp
++++ new/src/hotspot/cpu/x86/interp_masm_x86.cpp
+@@ -1122,7 +1122,7 @@
+ 
+     bind(loop);
+     // check if current entry is used
+-    cmpptr(Address(rmon, BasicObjectLock::obj_offset_in_bytes()), (int32_t) NULL);
++    cmpptr(Address(rmon, BasicObjectLock::obj_offset_in_bytes()), 0);
+     jcc(Assembler::notEqual, exception);
+ 
+     addptr(rmon, entry_size); // otherwise advance to next entry
+--- old/src/hotspot/cpu/x86/interpreterRT_x86_64.cpp
++++ new/src/hotspot/cpu/x86/interpreterRT_x86_64.cpp
+@@ -443,10 +443,10 @@
+     _from -= Interpreter::stackElementSize;
+ 
+     if (_num_int_args < Argument::n_int_register_parameters_c-1) {
+-      *_int_args++ = (*from_addr == 0) ? NULL : (intptr_t)from_addr;
++      *_int_args++ = (*from_addr == 0) ? (intptr_t) 0 : (intptr_t) from_addr;
+       _num_int_args++;
+     } else {
+-      *_to++ = (*from_addr == 0) ? NULL : (intptr_t) from_addr;
++      *_to++ = (*from_addr == 0) ? (intptr_t) 0 : (intptr_t) from_addr;
+     }
+   }
+ 
+--- old/src/hotspot/cpu/aarch64/interpreterRT_aarch64.cpp
++++ new/src/hotspot/cpu/aarch64/interpreterRT_aarch64.cpp
+@@ -267,7 +267,7 @@
+ 
+   virtual void pass_object() {
+     intptr_t* addr = single_slot_addr();
+-    intptr_t value = *addr == 0 ? NULL : (intptr_t)addr;
++    intptr_t value = *addr == 0 ? (intptr_t) 0 : (intptr_t)addr;
+     if (pass_gpr(value) < 0) {
+       pass_stack<>(value);
+     }
diff --git a/srcpkgs/openjdk18-bootstrap/patches/cgroups.patch b/srcpkgs/openjdk18-bootstrap/patches/cgroups.patch
new file mode 100644
index 0000000000000..efeaa0871a03b
--- /dev/null
+++ b/srcpkgs/openjdk18-bootstrap/patches/cgroups.patch
@@ -0,0 +1,406 @@
+From 8f3bbe950fb5a3d9f6cae122209df01df0f342f0 Mon Sep 17 00:00:00 2001
+From: casparcwang <casparcwang@tencent.com>
+Date: Thu, 15 Sep 2022 08:47:05 +0000
+Subject: [PATCH] 8293472: Incorrect container resource limit detection if
+ manual cgroup fs mounts present
+
+Reviewed-by: sgehwolf, iklam
+---
+ .../os/linux/cgroupSubsystem_linux.cpp        | 69 +++++++++---------
+ .../os/linux/cgroupSubsystem_linux.hpp        |  5 ++
+ .../cgroup/CgroupSubsystemFactory.java        | 71 ++++++++++++++++---
+ .../containers/docker/DockerBasicTest.java    | 14 ++++
+ .../containers/docker/TestCPUAwareness.java   | 15 ++--
+ .../docker/TestMemoryAwareness.java           | 15 ++--
+ 6 files changed, 135 insertions(+), 54 deletions(-)
+
+diff --git a/src/hotspot/os/linux/cgroupSubsystem_linux.cpp b/src/hotspot/os/linux/cgroupSubsystem_linux.cpp
+index baa7a40a9146..1f3a6dfcaf6b 100644
+--- a/src/hotspot/os/linux/cgroupSubsystem_linux.cpp
++++ b/src/hotspot/os/linux/cgroupSubsystem_linux.cpp
+@@ -123,6 +123,32 @@ CgroupSubsystem* CgroupSubsystemFactory::create() {
+   return new CgroupV1Subsystem(cpuset, cpu, cpuacct, pids, memory);
+ }
+ 
++void CgroupSubsystemFactory::set_controller_paths(CgroupInfo* cg_infos,
++                                                  int controller,
++                                                  const char* name,
++                                                  char* mount_path,
++                                                  char* root_path) {
++  if (cg_infos[controller]._mount_path != NULL) {
++    // On some systems duplicate controllers get mounted in addition to
++    // the main cgroup controllers most likely under /sys/fs/cgroup. In that
++    // case pick the one under /sys/fs/cgroup and discard others.
++    if (strstr(cg_infos[controller]._mount_path, "/sys/fs/cgroup") != cg_infos[controller]._mount_path) {
++      log_debug(os, container)("Duplicate %s controllers detected. Picking %s, skipping %s.",
++                               name, mount_path, cg_infos[controller]._mount_path);
++      os::free(cg_infos[controller]._mount_path);
++      os::free(cg_infos[controller]._root_mount_path);
++      cg_infos[controller]._mount_path = os::strdup(mount_path);
++      cg_infos[controller]._root_mount_path = os::strdup(root_path);
++    } else {
++      log_debug(os, container)("Duplicate %s controllers detected. Picking %s, skipping %s.",
++                               name, cg_infos[controller]._mount_path, mount_path);
++    }
++  } else {
++    cg_infos[controller]._mount_path = os::strdup(mount_path);
++    cg_infos[controller]._root_mount_path = os::strdup(root_path);
++  }
++}
++
+ bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
+                                             const char* proc_cgroups,
+                                             const char* proc_self_cgroup,
+@@ -288,7 +314,6 @@ bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
+   bool cgroupv2_mount_point_found = false;
+   bool any_cgroup_mounts_found = false;
+   while ((p = fgets(buf, MAXPATHLEN, mntinfo)) != NULL) {
+-    char tmp_mount_point[MAXPATHLEN+1];
+     char tmp_fs_type[MAXPATHLEN+1];
+     char tmproot[MAXPATHLEN+1];
+     char tmpmount[MAXPATHLEN+1];
+@@ -299,15 +324,13 @@ bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
+     // Cgroup v2 relevant info. We only look for the _mount_path iff is_cgroupsV2 so
+     // as to avoid memory stomping of the _mount_path pointer later on in the cgroup v1
+     // block in the hybrid case.
+-    //
+-    if (is_cgroupsV2 && sscanf(p, "%*d %*d %*d:%*d %*s %s %*[^-]- %s %*s %*s", tmp_mount_point, tmp_fs_type) == 2) {
++    if (is_cgroupsV2 && sscanf(p, "%*d %*d %*d:%*d %s %s %*[^-]- %s %*s %*s", tmproot, tmpmount, tmp_fs_type) == 3) {
+       // we likely have an early match return (e.g. cgroup fs match), be sure we have cgroup2 as fstype
+-      if (!cgroupv2_mount_point_found && strcmp("cgroup2", tmp_fs_type) == 0) {
++      if (strcmp("cgroup2", tmp_fs_type) == 0) {
+         cgroupv2_mount_point_found = true;
+         any_cgroup_mounts_found = true;
+         for (int i = 0; i < CG_INFO_LENGTH; i++) {
+-          assert(cg_infos[i]._mount_path == NULL, "_mount_path memory stomping");
+-          cg_infos[i]._mount_path = os::strdup(tmp_mount_point);
++          set_controller_paths(cg_infos, i, "(cg2, unified)", tmpmount, tmproot);
+         }
+       }
+     }
+@@ -332,47 +355,23 @@ bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
+       while ((token = strsep(&cptr, ",")) != NULL) {
+         if (strcmp(token, "memory") == 0) {
+           any_cgroup_mounts_found = true;
+-          assert(cg_infos[MEMORY_IDX]._mount_path == NULL, "stomping of _mount_path");
+-          cg_infos[MEMORY_IDX]._mount_path = os::strdup(tmpmount);
+-          cg_infos[MEMORY_IDX]._root_mount_path = os::strdup(tmproot);
++          set_controller_paths(cg_infos, MEMORY_IDX, token, tmpmount, tmproot);
+           cg_infos[MEMORY_IDX]._data_complete = true;
+         } else if (strcmp(token, "cpuset") == 0) {
+           any_cgroup_mounts_found = true;
+-          if (cg_infos[CPUSET_IDX]._mount_path != NULL) {
+-            // On some systems duplicate cpuset controllers get mounted in addition to
+-            // the main cgroup controllers most likely under /sys/fs/cgroup. In that
+-            // case pick the one under /sys/fs/cgroup and discard others.
+-            if (strstr(cg_infos[CPUSET_IDX]._mount_path, "/sys/fs/cgroup") != cg_infos[CPUSET_IDX]._mount_path) {
+-              log_warning(os, container)("Duplicate cpuset controllers detected. Picking %s, skipping %s.",
+-                                         tmpmount, cg_infos[CPUSET_IDX]._mount_path);
+-              os::free(cg_infos[CPUSET_IDX]._mount_path);
+-              cg_infos[CPUSET_IDX]._mount_path = os::strdup(tmpmount);
+-            } else {
+-              log_warning(os, container)("Duplicate cpuset controllers detected. Picking %s, skipping %s.",
+-                                         cg_infos[CPUSET_IDX]._mount_path, tmpmount);
+-            }
+-          } else {
+-            cg_infos[CPUSET_IDX]._mount_path = os::strdup(tmpmount);
+-          }
+-          cg_infos[CPUSET_IDX]._root_mount_path = os::strdup(tmproot);
++          set_controller_paths(cg_infos, CPUSET_IDX, token, tmpmount, tmproot);
+           cg_infos[CPUSET_IDX]._data_complete = true;
+         } else if (strcmp(token, "cpu") == 0) {
+           any_cgroup_mounts_found = true;
+-          assert(cg_infos[CPU_IDX]._mount_path == NULL, "stomping of _mount_path");
+-          cg_infos[CPU_IDX]._mount_path = os::strdup(tmpmount);
+-          cg_infos[CPU_IDX]._root_mount_path = os::strdup(tmproot);
++          set_controller_paths(cg_infos, CPU_IDX, token, tmpmount, tmproot);
+           cg_infos[CPU_IDX]._data_complete = true;
+         } else if (strcmp(token, "cpuacct") == 0) {
+           any_cgroup_mounts_found = true;
+-          assert(cg_infos[CPUACCT_IDX]._mount_path == NULL, "stomping of _mount_path");
+-          cg_infos[CPUACCT_IDX]._mount_path = os::strdup(tmpmount);
+-          cg_infos[CPUACCT_IDX]._root_mount_path = os::strdup(tmproot);
++          set_controller_paths(cg_infos, CPUACCT_IDX, token, tmpmount, tmproot);
+           cg_infos[CPUACCT_IDX]._data_complete = true;
+         } else if (strcmp(token, "pids") == 0) {
+           any_cgroup_mounts_found = true;
+-          assert(cg_infos[PIDS_IDX]._mount_path == NULL, "stomping of _mount_path");
+-          cg_infos[PIDS_IDX]._mount_path = os::strdup(tmpmount);
+-          cg_infos[PIDS_IDX]._root_mount_path = os::strdup(tmproot);
++          set_controller_paths(cg_infos, PIDS_IDX, token, tmpmount, tmproot);
+           cg_infos[PIDS_IDX]._data_complete = true;
+         }
+       }
+diff --git a/src/hotspot/os/linux/cgroupSubsystem_linux.hpp b/src/hotspot/os/linux/cgroupSubsystem_linux.hpp
+index 2e3fc8e8bc78..91456b3d0e14 100644
+--- a/src/hotspot/os/linux/cgroupSubsystem_linux.hpp
++++ b/src/hotspot/os/linux/cgroupSubsystem_linux.hpp
+@@ -311,6 +311,11 @@ class CgroupSubsystemFactory: AllStatic {
+     }
+ #endif
+ 
++    static void set_controller_paths(CgroupInfo* cg_infos,
++                                     int controller,
++                                     const char* name,
++                                     char* mount_path,
++                                     char* root_path);
+     // Determine the cgroup type (version 1 or version 2), given
+     // relevant paths to files. Sets 'flags' accordingly.
+     static bool determine_type(CgroupInfo* cg_infos,
+diff --git a/test/hotspot/jtreg/containers/cgroup/CgroupSubsystemFactory.java b/test/hotspot/jtreg/containers/cgroup/CgroupSubsystemFactory.java
+index 54807119d82e..7eb78fa447fd 100644
+--- a/test/hotspot/jtreg/containers/cgroup/CgroupSubsystemFactory.java
++++ b/test/hotspot/jtreg/containers/cgroup/CgroupSubsystemFactory.java
+@@ -62,11 +62,19 @@ public class CgroupSubsystemFactory {
+     private Path cgroupv1MntInfoZeroHierarchy;
+     private Path cgroupv2CgInfoZeroHierarchy;
+     private Path cgroupv2MntInfoZeroHierarchy;
++    private Path cgroupv2MntInfoDouble;
++    private Path cgroupv2MntInfoDouble2;
+     private Path cgroupv1CgInfoNonZeroHierarchy;
+     private Path cgroupv1MntInfoNonZeroHierarchyOtherOrder;
+     private Path cgroupv1MntInfoNonZeroHierarchy;
+     private Path cgroupv1MntInfoDoubleCpuset;
+     private Path cgroupv1MntInfoDoubleCpuset2;
++    private Path cgroupv1MntInfoDoubleMemory;
++    private Path cgroupv1MntInfoDoubleMemory2;
++    private Path cgroupv1MntInfoDoubleCpu;
++    private Path cgroupv1MntInfoDoubleCpu2;
++    private Path cgroupv1MntInfoDoublePids;
++    private Path cgroupv1MntInfoDoublePids2;
+     private Path cgroupv1MntInfoSystemdOnly;
+     private String mntInfoEmpty = "";
+     private Path cgroupV1SelfCgroup;
+@@ -160,6 +168,15 @@ public class CgroupSubsystemFactory {
+     private String mntInfoCgroupv1MoreCpusetLine = "121 32 0:37 / /cpusets rw,relatime shared:69 - cgroup none rw,cpuset\n";
+     private String mntInfoCgroupv1DoubleCpuset = mntInfoCgroupv1MoreCpusetLine + mntInfoHybrid;
+     private String mntInfoCgroupv1DoubleCpuset2 =  mntInfoHybrid + mntInfoCgroupv1MoreCpusetLine;
++    private String mntInfoCgroupv1MoreMemoryLine = "1100 1098 0:28 / /memory rw,nosuid,nodev,noexec,relatime master:6 - cgroup cgroup rw,memory\n";
++    private String mntInfoCgroupv1DoubleMemory = mntInfoCgroupv1MoreMemoryLine + mntInfoHybrid;
++    private String mntInfoCgroupv1DoubleMemory2 = mntInfoHybrid + mntInfoCgroupv1MoreMemoryLine;
++    private String mntInfoCgroupv1DoubleCpuLine = "1101 1098 0:29 / /cpu,cpuacct rw,nosuid,nodev,noexec,relatime master:7 - cgroup cgroup rw,cpu,cpuacct\n";
++    private String mntInfoCgroupv1DoubleCpu = mntInfoCgroupv1DoubleCpuLine + mntInfoHybrid;
++    private String mntInfoCgroupv1DoubleCpu2 = mntInfoHybrid + mntInfoCgroupv1DoubleCpuLine;
++    private String mntInfoCgroupv1DoublePidsLine = "1107 1098 0:35 / /pids rw,nosuid,nodev,noexec,relatime master:13 - cgroup cgroup rw,pids\n";
++    private String mntInfoCgroupv1DoublePids = mntInfoCgroupv1DoublePidsLine + mntInfoHybrid;
++    private String mntInfoCgroupv1DoublePids2 = mntInfoHybrid + mntInfoCgroupv1DoublePidsLine;
+     private String cgroupsNonZeroHierarchy =
+             "#subsys_name hierarchy   num_cgroups enabled\n" +
+             "cpuset  3   1   1\n" +
+@@ -175,7 +192,11 @@ public class CgroupSubsystemFactory {
+             "hugetlb 6   1   1\n" +
+             "pids    9   80  1";  // hierarchy has to match procSelfCgroupHybridContent
+     private String mntInfoCgroupsV2Only =
+-            "28 21 0:25 / /sys/fs/cgroup rw,nosuid,nodev,noexec,relatime shared:4 - cgroup2 none rw,seclabel,nsdelegate";
++            "28 21 0:25 / /sys/fs/cgroup rw,nosuid,nodev,noexec,relatime shared:4 - cgroup2 none rw,seclabel,nsdelegate\n";
++    private String mntInfoCgroupsV2MoreLine =
++            "240 232 0:24 /../.. /cgroup-in ro,relatime - cgroup2 cgroup2 rw,nsdelegate\n";
++    private String mntInfoCgroupsV2Double = mntInfoCgroupsV2MoreLine + mntInfoCgroupsV2Only;
++    private String mntInfoCgroupsV2Double2 = mntInfoCgroupsV2Only + mntInfoCgroupsV2MoreLine;
+     private String mntInfoCgroupsV1SystemdOnly =
+             "35 26 0:26 / /sys/fs/cgroup/systemd rw,nosuid,nodev,noexec,relatime - cgroup systemd rw,name=systemd\n" +
+             "26 18 0:19 / /sys/fs/cgroup rw,relatime - tmpfs none rw,size=4k,mode=755\n";
+@@ -217,6 +238,12 @@ private void setup() {
+             cgroupv2MntInfoZeroHierarchy = Paths.get(existingDirectory.toString(), "mountinfo_cgroupv2");
+             Files.writeString(cgroupv2MntInfoZeroHierarchy, mntInfoCgroupsV2Only);
+ 
++            cgroupv2MntInfoDouble = Paths.get(existingDirectory.toString(), "mountinfo_cgroupv2_double");
++            Files.writeString(cgroupv2MntInfoDouble, mntInfoCgroupsV2Double);
++
++            cgroupv2MntInfoDouble2 = Paths.get(existingDirectory.toString(), "mountinfo_cgroupv2_double2");
++            Files.writeString(cgroupv2MntInfoDouble2, mntInfoCgroupsV2Double2);
++
+             cgroupv1CgInfoNonZeroHierarchy = Paths.get(existingDirectory.toString(), "cgroups_non_zero");
+             Files.writeString(cgroupv1CgInfoNonZeroHierarchy, cgroupsNonZeroHierarchy);
+ 
+@@ -244,6 +271,24 @@ private void setup() {
+             cgroupv1MntInfoDoubleCpuset2 = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_cpuset2");
+             Files.writeString(cgroupv1MntInfoDoubleCpuset2, mntInfoCgroupv1DoubleCpuset2);
+ 
++            cgroupv1MntInfoDoubleMemory = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_memory");
++            Files.writeString(cgroupv1MntInfoDoubleMemory, mntInfoCgroupv1DoubleMemory);
++
++            cgroupv1MntInfoDoubleMemory2 = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_memory2");
++            Files.writeString(cgroupv1MntInfoDoubleMemory2, mntInfoCgroupv1DoubleMemory2);
++
++            cgroupv1MntInfoDoubleCpu = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_cpu");
++            Files.writeString(cgroupv1MntInfoDoubleCpu, mntInfoCgroupv1DoubleCpu);
++
++            cgroupv1MntInfoDoubleCpu2 = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_cpu2");
++            Files.writeString(cgroupv1MntInfoDoubleCpu2, mntInfoCgroupv1DoubleCpu2);
++
++            cgroupv1MntInfoDoublePids = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_pids");
++            Files.writeString(cgroupv1MntInfoDoublePids, mntInfoCgroupv1DoublePids);
++
++            cgroupv1MntInfoDoublePids2 = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_pids2");
++            Files.writeString(cgroupv1MntInfoDoublePids2, mntInfoCgroupv1DoublePids2);
++
+             cgroupv1MntInfoSystemdOnly = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_systemd_only");
+             Files.writeString(cgroupv1MntInfoSystemdOnly, mntInfoCgroupsV1SystemdOnly);
+ 
+@@ -291,14 +336,14 @@ public void testCgroupv1JoinControllerCombo(WhiteBox wb) {
+         System.out.println("testCgroupv1JoinControllerMounts PASSED!");
+     }
+ 
+-    public void testCgroupv1MultipleCpusetMounts(WhiteBox wb, Path mountInfo) {
++    public void testCgroupv1MultipleControllerMounts(WhiteBox wb, Path mountInfo) {
+         String procCgroups = cgroupv1CgInfoNonZeroHierarchy.toString();
+         String procSelfCgroup = cgroupV1SelfCgroup.toString();
+         String procSelfMountinfo = mountInfo.toString();
+         int retval = wb.validateCgroup(procCgroups, procSelfCgroup, procSelfMountinfo);
+-        Asserts.assertEQ(CGROUPS_V1, retval, "Multiple cpuset controllers, but only one in /sys/fs/cgroup");
++        Asserts.assertEQ(CGROUPS_V1, retval, "Multiple controllers, but only one in /sys/fs/cgroup");
+         Asserts.assertTrue(isValidCgroup(retval));
+-        System.out.println("testCgroupv1MultipleCpusetMounts PASSED!");
++        System.out.println("testCgroupv1MultipleControllerMounts PASSED!");
+     }
+ 
+     public void testCgroupv1SystemdOnly(WhiteBox wb) {
+@@ -341,10 +386,10 @@ public void testCgroupv1MissingMemoryController(WhiteBox wb) {
+         System.out.println("testCgroupv1MissingMemoryController PASSED!");
+     }
+ 
+-    public void testCgroupv2(WhiteBox wb) {
++    public void testCgroupv2(WhiteBox wb, Path mountInfo) {
+         String procCgroups = cgroupv2CgInfoZeroHierarchy.toString();
+         String procSelfCgroup = cgroupV2SelfCgroup.toString();
+-        String procSelfMountinfo = cgroupv2MntInfoZeroHierarchy.toString();
++        String procSelfMountinfo = mountInfo.toString();
+         int retval = wb.validateCgroup(procCgroups, procSelfCgroup, procSelfMountinfo);
+         Asserts.assertEQ(CGROUPS_V2, retval, "Expected");
+         Asserts.assertTrue(isValidCgroup(retval));
+@@ -388,13 +433,21 @@ public static void main(String[] args) throws Exception {
+         try {
+             test.testCgroupv1SystemdOnly(wb);
+             test.testCgroupv1NoMounts(wb);
+-            test.testCgroupv2(wb);
++            test.testCgroupv2(wb, test.cgroupv2MntInfoZeroHierarchy);
++            test.testCgroupv2(wb, test.cgroupv2MntInfoDouble);
++            test.testCgroupv2(wb, test.cgroupv2MntInfoDouble2);
+             test.testCgroupV1Hybrid(wb);
+             test.testCgroupV1HybridMntInfoOrder(wb);
+             test.testCgroupv1MissingMemoryController(wb);
+             test.testCgroupv2NoCgroup2Fs(wb);
+-            test.testCgroupv1MultipleCpusetMounts(wb, test.cgroupv1MntInfoDoubleCpuset);
+-            test.testCgroupv1MultipleCpusetMounts(wb, test.cgroupv1MntInfoDoubleCpuset2);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleCpuset);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleCpuset2);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleMemory);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleMemory2);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleCpu);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleCpu2);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoublePids);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoublePids2);
+             test.testCgroupv1JoinControllerCombo(wb);
+             test.testNonZeroHierarchyOnlyFreezer(wb);
+         } finally {
+diff --git a/test/hotspot/jtreg/containers/docker/DockerBasicTest.java b/test/hotspot/jtreg/containers/docker/DockerBasicTest.java
+index bcbd2ffa21df..357eb3db4972 100644
+--- a/test/hotspot/jtreg/containers/docker/DockerBasicTest.java
++++ b/test/hotspot/jtreg/containers/docker/DockerBasicTest.java
+@@ -53,6 +53,7 @@ public static void main(String[] args) throws Exception {
+         try {
+             testJavaVersion();
+             testHelloDocker();
++            testJavaVersionWithCgMounts();
+         } finally {
+             if (!DockerTestUtils.RETAIN_IMAGE_AFTER_TEST) {
+                 DockerTestUtils.removeDockerImage(imageNameAndTag);
+@@ -81,4 +82,17 @@ private static void testHelloDocker() throws Exception {
+             .shouldHaveExitValue(0)
+             .shouldContain("Hello Docker");
+     }
++
++
++    private static void testJavaVersionWithCgMounts() throws Exception {
++        DockerRunOptions opts =
++            new DockerRunOptions(imageNameAndTag, "/jdk/bin/java", "-version")
++            .addDockerOpts("-v", "/sys/fs/cgroup:/cgroups-in:ro");
++
++        // Duplicated cgroup mounts should be handled by the container detection
++        // code and should not cause any error/warning output.
++        DockerTestUtils.dockerRunJava(opts)
++            .shouldHaveExitValue(0)
++            .shouldNotMatch("\\[os,container *\\]");
++    }
+ }
+diff --git a/test/hotspot/jtreg/containers/docker/TestCPUAwareness.java b/test/hotspot/jtreg/containers/docker/TestCPUAwareness.java
+index 93881c615bd9..a41dc9c39392 100644
+--- a/test/hotspot/jtreg/containers/docker/TestCPUAwareness.java
++++ b/test/hotspot/jtreg/containers/docker/TestCPUAwareness.java
+@@ -70,10 +70,11 @@ public static void main(String[] args) throws Exception {
+             testActiveProcessorCount(2, 2);
+ 
+             // cpu quota and period
+-            testCpuQuotaAndPeriod(50*1000, 100*1000);
+-            testCpuQuotaAndPeriod(100*1000, 100*1000);
+-            testCpuQuotaAndPeriod(150*1000, 100*1000);
+-            testCpuQuotaAndPeriod(400*1000, 100*1000);
++            testCpuQuotaAndPeriod(50*1000, 100*1000, false);
++            testCpuQuotaAndPeriod(100*1000, 100*1000, false);
++            testCpuQuotaAndPeriod(150*1000, 100*1000, false);
++            testCpuQuotaAndPeriod(400*1000, 100*1000, false);
++            testCpuQuotaAndPeriod(50*1000, 100*1000, true /* additional cgroup mount */);
+ 
+             testOperatingSystemMXBeanAwareness("0.5", "1");
+             testOperatingSystemMXBeanAwareness("1.0", "1");
+@@ -153,7 +154,7 @@ private static int adjustExpectedAPCForAvailableCPUs(int expectedAPC) {
+     }
+ 
+ 
+-    private static void testCpuQuotaAndPeriod(int quota, int period)
++    private static void testCpuQuotaAndPeriod(int quota, int period, boolean addCgmounts)
+         throws Exception {
+         Common.logNewTestCase("test cpu quota and period: ");
+         System.out.println("quota = " + quota);
+@@ -167,6 +168,10 @@ private static void testCpuQuotaAndPeriod(int quota, int period)
+             .addDockerOpts("--cpu-period=" + period)
+             .addDockerOpts("--cpu-quota=" + quota);
+ 
++        if (addCgmounts) {
++            opts = opts.addDockerOpts("--volume", "/sys/fs/cgroup:/cgroups-in:ro");
++        }
++
+         Common.run(opts)
+             .shouldMatch("CPU Period is.*" + period)
+             .shouldMatch("CPU Quota is.*" + quota)
+diff --git a/test/hotspot/jtreg/containers/docker/TestMemoryAwareness.java b/test/hotspot/jtreg/containers/docker/TestMemoryAwareness.java
+index ff5cd23cc65f..d6ff603157a6 100644
+--- a/test/hotspot/jtreg/containers/docker/TestMemoryAwareness.java
++++ b/test/hotspot/jtreg/containers/docker/TestMemoryAwareness.java
+@@ -63,10 +63,11 @@ public static void main(String[] args) throws Exception {
+         DockerTestUtils.buildJdkContainerImage(imageName);
+ 
+         try {
+-            testMemoryLimit("100m", "104857600");
+-            testMemoryLimit("500m", "524288000");
+-            testMemoryLimit("1g", "1073741824");
+-            testMemoryLimit("4g", "4294967296");
++            testMemoryLimit("100m", "104857600", false);
++            testMemoryLimit("500m", "524288000", false);
++            testMemoryLimit("1g", "1073741824", false);
++            testMemoryLimit("4g", "4294967296", false);
++            testMemoryLimit("100m", "104857600", true /* additional cgroup mount */);
+ 
+             testMemorySoftLimit("500m", "524288000");
+             testMemorySoftLimit("1g", "1073741824");
+@@ -98,7 +99,7 @@ public static void main(String[] args) throws Exception {
+     }
+ 
+ 
+-    private static void testMemoryLimit(String valueToSet, String expectedTraceValue)
++    private static void testMemoryLimit(String valueToSet, String expectedTraceValue, boolean addCgmounts)
+             throws Exception {
+ 
+         Common.logNewTestCase("memory limit: " + valueToSet);
+@@ -106,6 +107,10 @@ private static void testMemoryLimit(String valueToSet, String expectedTraceValue
+         DockerRunOptions opts = Common.newOpts(imageName)
+             .addDockerOpts("--memory", valueToSet);
+ 
++        if (addCgmounts) {
++            opts = opts.addDockerOpts("--volume", "/sys/fs/cgroup:/cgroups-in:ro");
++        }
++
+         Common.run(opts)
+             .shouldMatch("Memory Limit is:.*" + expectedTraceValue);
+     }
diff --git a/srcpkgs/openjdk18-bootstrap/template b/srcpkgs/openjdk18-bootstrap/template
new file mode 100644
index 0000000000000..ed4eb045ec054
--- /dev/null
+++ b/srcpkgs/openjdk18-bootstrap/template
@@ -0,0 +1,101 @@
+# Template file for 'openjdk18-bootstrap'
+pkgname=openjdk18-bootstrap
+version=18.0.2.1+0
+revision=1
+_gtest_ver=1.8.1
+_java_ver="${version%%.*}"
+_jdk_update="${version#*+}"
+_base_version="${version%.?+*}"
+_jdk_home="usr/lib/jvm/openjdk${_java_ver}"
+archs="x86_64* aarch64*"
+create_wrksrc=yes
+build_wrksrc="jdk${_java_ver}u-jdk-${version/+/-}"
+build_style=gnu-configure
+configure_args="--disable-warnings-as-errors
+ --enable-unlimited-crypto
+ --with-zlib=system
+ --with-libjpeg=system
+ --with-giflib=system
+ --with-libpng=system
+ --with-lcms=system
+ --with-jtreg=no
+ --with-gtest=../googletest-release-${_gtest_ver}
+ --with-debug-level=release
+ --with-native-debug-symbols=internal
+ --with-jobs=${XBPS_ORIG_MAKEJOBS}
+ --with-version-pre=
+ --with-version-build=${_jdk_update}
+ --with-version-opt=void-r${revision}
+ --with-vendor-name=Void
+ --with-vendor-url=https://voidlinux.org/
+ --with-vendor-bug-url=https://github.com/void-linux/void-packages/issues
+ --with-vendor-vm-bug-url=https://github.com/void-linux/void-packages/issues
+ --with-boot-jdk=/usr/lib/jvm/openjdk$(( _java_ver - 1 ))"
+make_build_args="images"
+make_check_target="test-hotspot-gtest"
+hostmakedepends="pkg-config automake autoconf cpio tar unzip zip ca-certificates
+ openssl zlib-devel which make-ca openjdk17"
+makedepends="libXrender-devel libXtst-devel libXt-devel libXrandr-devel
+ giflib-devel libjpeg-turbo-devel cups-devel freetype-devel alsa-lib-devel
+ fontconfig-devel zlib-devel lcms2-devel"
+short_desc="OpenJDK Java Development Kit (bootstrap version ${_java_ver})"
+maintainer="classabbyamp <void@placeviolette.net>"
+license="GPL-2.0-only WITH Classpath-exception-2.0"
+homepage="http://openjdk.java.net/"
+distfiles="https://github.com/openjdk/jdk${_java_ver}u/archive/jdk-${version}.tar.gz
+ https://github.com/google/googletest/archive/refs/tags/release-${_gtest_ver}.tar.gz"
+checksum="d3955839c1f566f949fbdf5d4f32a6fac2e57598fba2a1cbc8557c96df6ac8c4
+ 9bf1fe5182a604b4135edc1a425ae356c9ad15e9b23f9f12a02e80184c3a249c"
+nocross=yes
+repository=bootstrap
+patch_args="-Np1 --directory=$build_wrksrc"
+
+# Build and check are still parallel, but don't use -jN.
+disable_parallel_build=yes
+disable_parallel_check=yes
+
+case "$XBPS_TARGET_MACHINE" in
+	i686*|arm*) broken="Unsupported architecture" ;;
+esac
+
+post_extract() {
+	chmod +x "$build_wrksrc"/configure
+	if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+		rm -r "$build_wrksrc"/src/jdk.hotspot.agent
+	fi
+}
+
+do_configure() {
+	CFLAGS=${CFLAGS/-D_FORTIFY_SOURCE=2/}
+	CXXFLAGS=${CXXFLAGS/-D_FORTIFY_SOURCE=2/}
+
+	# force ELFv2 for ppc64 just in case
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*)
+			CFLAGS+=" -DABI_ELFv2"
+			CXXFLAGS+=" -DABI_ELFv2"
+			;;
+	esac
+
+	configure_args=${configure_args/--with-libtool-sysroot=$XBPS_CROSS_BASE}
+	if [ "$XBPS_CCACHE" ] && [ -z "$CROSS_BUILD" ]; then
+		configure_args+=" --enable-ccache"
+		CC="/usr/bin/cc"
+		CXX="/usr/bin/c++"
+	fi
+	./configure ${configure_args} \
+		--with-extra-cflags="$CFLAGS" \
+		--with-extra-cxxflags="$CXXFLAGS" \
+		--with-extra-ldflags="$LDFLAGS" \
+		READELF="$READELF" AR="$AR" STRIP="$STRIP" NM="$NM" \
+		OBJDUMP="$OBJDUMP" OBJCOPY="$OBJCOPY"
+}
+
+pre_install() {
+	make_install_args="INSTALL_PREFIX=${DESTDIR}/usr/lib"
+}
+
+post_install() {
+	rm -rf "${DESTDIR}"/usr/lib/bin
+	mv "${DESTDIR}"/usr/lib/jvm/openjdk-"${_base_version}" "${DESTDIR}/$_jdk_home"
+}
diff --git a/srcpkgs/openjdk18-bootstrap/update b/srcpkgs/openjdk18-bootstrap/update
new file mode 100644
index 0000000000000..0c349f69c7ba9
--- /dev/null
+++ b/srcpkgs/openjdk18-bootstrap/update
@@ -0,0 +1,4 @@
+site="https://github.com/openjdk/jdk18u/tags"
+pattern='jdk-\K18\.[\d.+]+(?=\.)'
+# don't need to update the bootstrap package
+ignore="*"

From 0d35e4879ad7146fae02fd8a31d750b9cf3261a6 Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Fri, 22 Dec 2023 00:46:39 -0500
Subject: [PATCH 10/12] New package: openjdk19-bootstrap-19.0.2+7

---
 .../patches/FixNullPtrCast.patch              |  36 ++
 .../openjdk19-bootstrap/patches/cgroups.patch | 406 ++++++++++++++++++
 srcpkgs/openjdk19-bootstrap/template          | 101 +++++
 srcpkgs/openjdk19-bootstrap/update            |   4 +
 4 files changed, 547 insertions(+)
 create mode 100644 srcpkgs/openjdk19-bootstrap/patches/FixNullPtrCast.patch
 create mode 100644 srcpkgs/openjdk19-bootstrap/patches/cgroups.patch
 create mode 100644 srcpkgs/openjdk19-bootstrap/template
 create mode 100644 srcpkgs/openjdk19-bootstrap/update

diff --git a/srcpkgs/openjdk19-bootstrap/patches/FixNullPtrCast.patch b/srcpkgs/openjdk19-bootstrap/patches/FixNullPtrCast.patch
new file mode 100644
index 0000000000000..6f05158792732
--- /dev/null
+++ b/srcpkgs/openjdk19-bootstrap/patches/FixNullPtrCast.patch
@@ -0,0 +1,36 @@
+Patch taken from Alpine: https://git.alpinelinux.org/aports/tree/community/openjdk17/FixNullPtrCast.patch
+
+same fix for armv7l-musl added
+
+Subject: Fix cast errors with latest GCC
+Upstream: No
+Author: Simon Frankenberger <simon-alpine@fraho.eu>
+
+This patch fixes one remaining casting error reported by GCC 12 for aarch64
+
+--- old/src/hotspot/cpu/aarch64/interpreterRT_aarch64.cpp
++++ new/src/hotspot/cpu/aarch64/interpreterRT_aarch64.cpp
+@@ -267,7 +267,7 @@
+ 
+   virtual void pass_object() {
+     intptr_t* addr = single_slot_addr();
+-    intptr_t value = *addr == 0 ? NULL : (intptr_t)addr;
++    intptr_t value = *addr == 0 ? (intptr_t) 0 : (intptr_t)addr;
+     if (pass_gpr(value) < 0) {
+       pass_stack<>(value);
+     }
+
+--- old/src/hotspot/cpu/arm/interpreterRT_arm.cpp
++++ new/src/hotspot/cpu/arm/interpreterRT_arm.cpp
+@@ -306,8 +306,8 @@
+   virtual void pass_object() {
+     intptr_t from_addr = (intptr_t)(_from + Interpreter::local_offset_in_bytes(0));
+     if(_last_gp < GPR_PARAMS) {
+-      _toGP[_last_gp++] = (*(intptr_t*)from_addr == 0) ? NULL : from_addr;
++      _toGP[_last_gp++] = (*(intptr_t*)from_addr == 0) ? (intptr_t) 0 : (intptr_t)from_addr;
+     } else {
+-      *_to++ = (*(intptr_t*)from_addr == 0) ? NULL : from_addr;
++      *_to++ = (*(intptr_t*)from_addr == 0) ? (intptr_t) 0 : (intptr_t)from_addr;
+     }
+     _from -= Interpreter::stackElementSize;
+   }
diff --git a/srcpkgs/openjdk19-bootstrap/patches/cgroups.patch b/srcpkgs/openjdk19-bootstrap/patches/cgroups.patch
new file mode 100644
index 0000000000000..efeaa0871a03b
--- /dev/null
+++ b/srcpkgs/openjdk19-bootstrap/patches/cgroups.patch
@@ -0,0 +1,406 @@
+From 8f3bbe950fb5a3d9f6cae122209df01df0f342f0 Mon Sep 17 00:00:00 2001
+From: casparcwang <casparcwang@tencent.com>
+Date: Thu, 15 Sep 2022 08:47:05 +0000
+Subject: [PATCH] 8293472: Incorrect container resource limit detection if
+ manual cgroup fs mounts present
+
+Reviewed-by: sgehwolf, iklam
+---
+ .../os/linux/cgroupSubsystem_linux.cpp        | 69 +++++++++---------
+ .../os/linux/cgroupSubsystem_linux.hpp        |  5 ++
+ .../cgroup/CgroupSubsystemFactory.java        | 71 ++++++++++++++++---
+ .../containers/docker/DockerBasicTest.java    | 14 ++++
+ .../containers/docker/TestCPUAwareness.java   | 15 ++--
+ .../docker/TestMemoryAwareness.java           | 15 ++--
+ 6 files changed, 135 insertions(+), 54 deletions(-)
+
+diff --git a/src/hotspot/os/linux/cgroupSubsystem_linux.cpp b/src/hotspot/os/linux/cgroupSubsystem_linux.cpp
+index baa7a40a9146..1f3a6dfcaf6b 100644
+--- a/src/hotspot/os/linux/cgroupSubsystem_linux.cpp
++++ b/src/hotspot/os/linux/cgroupSubsystem_linux.cpp
+@@ -123,6 +123,32 @@ CgroupSubsystem* CgroupSubsystemFactory::create() {
+   return new CgroupV1Subsystem(cpuset, cpu, cpuacct, pids, memory);
+ }
+ 
++void CgroupSubsystemFactory::set_controller_paths(CgroupInfo* cg_infos,
++                                                  int controller,
++                                                  const char* name,
++                                                  char* mount_path,
++                                                  char* root_path) {
++  if (cg_infos[controller]._mount_path != NULL) {
++    // On some systems duplicate controllers get mounted in addition to
++    // the main cgroup controllers most likely under /sys/fs/cgroup. In that
++    // case pick the one under /sys/fs/cgroup and discard others.
++    if (strstr(cg_infos[controller]._mount_path, "/sys/fs/cgroup") != cg_infos[controller]._mount_path) {
++      log_debug(os, container)("Duplicate %s controllers detected. Picking %s, skipping %s.",
++                               name, mount_path, cg_infos[controller]._mount_path);
++      os::free(cg_infos[controller]._mount_path);
++      os::free(cg_infos[controller]._root_mount_path);
++      cg_infos[controller]._mount_path = os::strdup(mount_path);
++      cg_infos[controller]._root_mount_path = os::strdup(root_path);
++    } else {
++      log_debug(os, container)("Duplicate %s controllers detected. Picking %s, skipping %s.",
++                               name, cg_infos[controller]._mount_path, mount_path);
++    }
++  } else {
++    cg_infos[controller]._mount_path = os::strdup(mount_path);
++    cg_infos[controller]._root_mount_path = os::strdup(root_path);
++  }
++}
++
+ bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
+                                             const char* proc_cgroups,
+                                             const char* proc_self_cgroup,
+@@ -288,7 +314,6 @@ bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
+   bool cgroupv2_mount_point_found = false;
+   bool any_cgroup_mounts_found = false;
+   while ((p = fgets(buf, MAXPATHLEN, mntinfo)) != NULL) {
+-    char tmp_mount_point[MAXPATHLEN+1];
+     char tmp_fs_type[MAXPATHLEN+1];
+     char tmproot[MAXPATHLEN+1];
+     char tmpmount[MAXPATHLEN+1];
+@@ -299,15 +324,13 @@ bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
+     // Cgroup v2 relevant info. We only look for the _mount_path iff is_cgroupsV2 so
+     // as to avoid memory stomping of the _mount_path pointer later on in the cgroup v1
+     // block in the hybrid case.
+-    //
+-    if (is_cgroupsV2 && sscanf(p, "%*d %*d %*d:%*d %*s %s %*[^-]- %s %*s %*s", tmp_mount_point, tmp_fs_type) == 2) {
++    if (is_cgroupsV2 && sscanf(p, "%*d %*d %*d:%*d %s %s %*[^-]- %s %*s %*s", tmproot, tmpmount, tmp_fs_type) == 3) {
+       // we likely have an early match return (e.g. cgroup fs match), be sure we have cgroup2 as fstype
+-      if (!cgroupv2_mount_point_found && strcmp("cgroup2", tmp_fs_type) == 0) {
++      if (strcmp("cgroup2", tmp_fs_type) == 0) {
+         cgroupv2_mount_point_found = true;
+         any_cgroup_mounts_found = true;
+         for (int i = 0; i < CG_INFO_LENGTH; i++) {
+-          assert(cg_infos[i]._mount_path == NULL, "_mount_path memory stomping");
+-          cg_infos[i]._mount_path = os::strdup(tmp_mount_point);
++          set_controller_paths(cg_infos, i, "(cg2, unified)", tmpmount, tmproot);
+         }
+       }
+     }
+@@ -332,47 +355,23 @@ bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
+       while ((token = strsep(&cptr, ",")) != NULL) {
+         if (strcmp(token, "memory") == 0) {
+           any_cgroup_mounts_found = true;
+-          assert(cg_infos[MEMORY_IDX]._mount_path == NULL, "stomping of _mount_path");
+-          cg_infos[MEMORY_IDX]._mount_path = os::strdup(tmpmount);
+-          cg_infos[MEMORY_IDX]._root_mount_path = os::strdup(tmproot);
++          set_controller_paths(cg_infos, MEMORY_IDX, token, tmpmount, tmproot);
+           cg_infos[MEMORY_IDX]._data_complete = true;
+         } else if (strcmp(token, "cpuset") == 0) {
+           any_cgroup_mounts_found = true;
+-          if (cg_infos[CPUSET_IDX]._mount_path != NULL) {
+-            // On some systems duplicate cpuset controllers get mounted in addition to
+-            // the main cgroup controllers most likely under /sys/fs/cgroup. In that
+-            // case pick the one under /sys/fs/cgroup and discard others.
+-            if (strstr(cg_infos[CPUSET_IDX]._mount_path, "/sys/fs/cgroup") != cg_infos[CPUSET_IDX]._mount_path) {
+-              log_warning(os, container)("Duplicate cpuset controllers detected. Picking %s, skipping %s.",
+-                                         tmpmount, cg_infos[CPUSET_IDX]._mount_path);
+-              os::free(cg_infos[CPUSET_IDX]._mount_path);
+-              cg_infos[CPUSET_IDX]._mount_path = os::strdup(tmpmount);
+-            } else {
+-              log_warning(os, container)("Duplicate cpuset controllers detected. Picking %s, skipping %s.",
+-                                         cg_infos[CPUSET_IDX]._mount_path, tmpmount);
+-            }
+-          } else {
+-            cg_infos[CPUSET_IDX]._mount_path = os::strdup(tmpmount);
+-          }
+-          cg_infos[CPUSET_IDX]._root_mount_path = os::strdup(tmproot);
++          set_controller_paths(cg_infos, CPUSET_IDX, token, tmpmount, tmproot);
+           cg_infos[CPUSET_IDX]._data_complete = true;
+         } else if (strcmp(token, "cpu") == 0) {
+           any_cgroup_mounts_found = true;
+-          assert(cg_infos[CPU_IDX]._mount_path == NULL, "stomping of _mount_path");
+-          cg_infos[CPU_IDX]._mount_path = os::strdup(tmpmount);
+-          cg_infos[CPU_IDX]._root_mount_path = os::strdup(tmproot);
++          set_controller_paths(cg_infos, CPU_IDX, token, tmpmount, tmproot);
+           cg_infos[CPU_IDX]._data_complete = true;
+         } else if (strcmp(token, "cpuacct") == 0) {
+           any_cgroup_mounts_found = true;
+-          assert(cg_infos[CPUACCT_IDX]._mount_path == NULL, "stomping of _mount_path");
+-          cg_infos[CPUACCT_IDX]._mount_path = os::strdup(tmpmount);
+-          cg_infos[CPUACCT_IDX]._root_mount_path = os::strdup(tmproot);
++          set_controller_paths(cg_infos, CPUACCT_IDX, token, tmpmount, tmproot);
+           cg_infos[CPUACCT_IDX]._data_complete = true;
+         } else if (strcmp(token, "pids") == 0) {
+           any_cgroup_mounts_found = true;
+-          assert(cg_infos[PIDS_IDX]._mount_path == NULL, "stomping of _mount_path");
+-          cg_infos[PIDS_IDX]._mount_path = os::strdup(tmpmount);
+-          cg_infos[PIDS_IDX]._root_mount_path = os::strdup(tmproot);
++          set_controller_paths(cg_infos, PIDS_IDX, token, tmpmount, tmproot);
+           cg_infos[PIDS_IDX]._data_complete = true;
+         }
+       }
+diff --git a/src/hotspot/os/linux/cgroupSubsystem_linux.hpp b/src/hotspot/os/linux/cgroupSubsystem_linux.hpp
+index 2e3fc8e8bc78..91456b3d0e14 100644
+--- a/src/hotspot/os/linux/cgroupSubsystem_linux.hpp
++++ b/src/hotspot/os/linux/cgroupSubsystem_linux.hpp
+@@ -311,6 +311,11 @@ class CgroupSubsystemFactory: AllStatic {
+     }
+ #endif
+ 
++    static void set_controller_paths(CgroupInfo* cg_infos,
++                                     int controller,
++                                     const char* name,
++                                     char* mount_path,
++                                     char* root_path);
+     // Determine the cgroup type (version 1 or version 2), given
+     // relevant paths to files. Sets 'flags' accordingly.
+     static bool determine_type(CgroupInfo* cg_infos,
+diff --git a/test/hotspot/jtreg/containers/cgroup/CgroupSubsystemFactory.java b/test/hotspot/jtreg/containers/cgroup/CgroupSubsystemFactory.java
+index 54807119d82e..7eb78fa447fd 100644
+--- a/test/hotspot/jtreg/containers/cgroup/CgroupSubsystemFactory.java
++++ b/test/hotspot/jtreg/containers/cgroup/CgroupSubsystemFactory.java
+@@ -62,11 +62,19 @@ public class CgroupSubsystemFactory {
+     private Path cgroupv1MntInfoZeroHierarchy;
+     private Path cgroupv2CgInfoZeroHierarchy;
+     private Path cgroupv2MntInfoZeroHierarchy;
++    private Path cgroupv2MntInfoDouble;
++    private Path cgroupv2MntInfoDouble2;
+     private Path cgroupv1CgInfoNonZeroHierarchy;
+     private Path cgroupv1MntInfoNonZeroHierarchyOtherOrder;
+     private Path cgroupv1MntInfoNonZeroHierarchy;
+     private Path cgroupv1MntInfoDoubleCpuset;
+     private Path cgroupv1MntInfoDoubleCpuset2;
++    private Path cgroupv1MntInfoDoubleMemory;
++    private Path cgroupv1MntInfoDoubleMemory2;
++    private Path cgroupv1MntInfoDoubleCpu;
++    private Path cgroupv1MntInfoDoubleCpu2;
++    private Path cgroupv1MntInfoDoublePids;
++    private Path cgroupv1MntInfoDoublePids2;
+     private Path cgroupv1MntInfoSystemdOnly;
+     private String mntInfoEmpty = "";
+     private Path cgroupV1SelfCgroup;
+@@ -160,6 +168,15 @@ public class CgroupSubsystemFactory {
+     private String mntInfoCgroupv1MoreCpusetLine = "121 32 0:37 / /cpusets rw,relatime shared:69 - cgroup none rw,cpuset\n";
+     private String mntInfoCgroupv1DoubleCpuset = mntInfoCgroupv1MoreCpusetLine + mntInfoHybrid;
+     private String mntInfoCgroupv1DoubleCpuset2 =  mntInfoHybrid + mntInfoCgroupv1MoreCpusetLine;
++    private String mntInfoCgroupv1MoreMemoryLine = "1100 1098 0:28 / /memory rw,nosuid,nodev,noexec,relatime master:6 - cgroup cgroup rw,memory\n";
++    private String mntInfoCgroupv1DoubleMemory = mntInfoCgroupv1MoreMemoryLine + mntInfoHybrid;
++    private String mntInfoCgroupv1DoubleMemory2 = mntInfoHybrid + mntInfoCgroupv1MoreMemoryLine;
++    private String mntInfoCgroupv1DoubleCpuLine = "1101 1098 0:29 / /cpu,cpuacct rw,nosuid,nodev,noexec,relatime master:7 - cgroup cgroup rw,cpu,cpuacct\n";
++    private String mntInfoCgroupv1DoubleCpu = mntInfoCgroupv1DoubleCpuLine + mntInfoHybrid;
++    private String mntInfoCgroupv1DoubleCpu2 = mntInfoHybrid + mntInfoCgroupv1DoubleCpuLine;
++    private String mntInfoCgroupv1DoublePidsLine = "1107 1098 0:35 / /pids rw,nosuid,nodev,noexec,relatime master:13 - cgroup cgroup rw,pids\n";
++    private String mntInfoCgroupv1DoublePids = mntInfoCgroupv1DoublePidsLine + mntInfoHybrid;
++    private String mntInfoCgroupv1DoublePids2 = mntInfoHybrid + mntInfoCgroupv1DoublePidsLine;
+     private String cgroupsNonZeroHierarchy =
+             "#subsys_name hierarchy   num_cgroups enabled\n" +
+             "cpuset  3   1   1\n" +
+@@ -175,7 +192,11 @@ public class CgroupSubsystemFactory {
+             "hugetlb 6   1   1\n" +
+             "pids    9   80  1";  // hierarchy has to match procSelfCgroupHybridContent
+     private String mntInfoCgroupsV2Only =
+-            "28 21 0:25 / /sys/fs/cgroup rw,nosuid,nodev,noexec,relatime shared:4 - cgroup2 none rw,seclabel,nsdelegate";
++            "28 21 0:25 / /sys/fs/cgroup rw,nosuid,nodev,noexec,relatime shared:4 - cgroup2 none rw,seclabel,nsdelegate\n";
++    private String mntInfoCgroupsV2MoreLine =
++            "240 232 0:24 /../.. /cgroup-in ro,relatime - cgroup2 cgroup2 rw,nsdelegate\n";
++    private String mntInfoCgroupsV2Double = mntInfoCgroupsV2MoreLine + mntInfoCgroupsV2Only;
++    private String mntInfoCgroupsV2Double2 = mntInfoCgroupsV2Only + mntInfoCgroupsV2MoreLine;
+     private String mntInfoCgroupsV1SystemdOnly =
+             "35 26 0:26 / /sys/fs/cgroup/systemd rw,nosuid,nodev,noexec,relatime - cgroup systemd rw,name=systemd\n" +
+             "26 18 0:19 / /sys/fs/cgroup rw,relatime - tmpfs none rw,size=4k,mode=755\n";
+@@ -217,6 +238,12 @@ private void setup() {
+             cgroupv2MntInfoZeroHierarchy = Paths.get(existingDirectory.toString(), "mountinfo_cgroupv2");
+             Files.writeString(cgroupv2MntInfoZeroHierarchy, mntInfoCgroupsV2Only);
+ 
++            cgroupv2MntInfoDouble = Paths.get(existingDirectory.toString(), "mountinfo_cgroupv2_double");
++            Files.writeString(cgroupv2MntInfoDouble, mntInfoCgroupsV2Double);
++
++            cgroupv2MntInfoDouble2 = Paths.get(existingDirectory.toString(), "mountinfo_cgroupv2_double2");
++            Files.writeString(cgroupv2MntInfoDouble2, mntInfoCgroupsV2Double2);
++
+             cgroupv1CgInfoNonZeroHierarchy = Paths.get(existingDirectory.toString(), "cgroups_non_zero");
+             Files.writeString(cgroupv1CgInfoNonZeroHierarchy, cgroupsNonZeroHierarchy);
+ 
+@@ -244,6 +271,24 @@ private void setup() {
+             cgroupv1MntInfoDoubleCpuset2 = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_cpuset2");
+             Files.writeString(cgroupv1MntInfoDoubleCpuset2, mntInfoCgroupv1DoubleCpuset2);
+ 
++            cgroupv1MntInfoDoubleMemory = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_memory");
++            Files.writeString(cgroupv1MntInfoDoubleMemory, mntInfoCgroupv1DoubleMemory);
++
++            cgroupv1MntInfoDoubleMemory2 = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_memory2");
++            Files.writeString(cgroupv1MntInfoDoubleMemory2, mntInfoCgroupv1DoubleMemory2);
++
++            cgroupv1MntInfoDoubleCpu = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_cpu");
++            Files.writeString(cgroupv1MntInfoDoubleCpu, mntInfoCgroupv1DoubleCpu);
++
++            cgroupv1MntInfoDoubleCpu2 = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_cpu2");
++            Files.writeString(cgroupv1MntInfoDoubleCpu2, mntInfoCgroupv1DoubleCpu2);
++
++            cgroupv1MntInfoDoublePids = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_pids");
++            Files.writeString(cgroupv1MntInfoDoublePids, mntInfoCgroupv1DoublePids);
++
++            cgroupv1MntInfoDoublePids2 = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_pids2");
++            Files.writeString(cgroupv1MntInfoDoublePids2, mntInfoCgroupv1DoublePids2);
++
+             cgroupv1MntInfoSystemdOnly = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_systemd_only");
+             Files.writeString(cgroupv1MntInfoSystemdOnly, mntInfoCgroupsV1SystemdOnly);
+ 
+@@ -291,14 +336,14 @@ public void testCgroupv1JoinControllerCombo(WhiteBox wb) {
+         System.out.println("testCgroupv1JoinControllerMounts PASSED!");
+     }
+ 
+-    public void testCgroupv1MultipleCpusetMounts(WhiteBox wb, Path mountInfo) {
++    public void testCgroupv1MultipleControllerMounts(WhiteBox wb, Path mountInfo) {
+         String procCgroups = cgroupv1CgInfoNonZeroHierarchy.toString();
+         String procSelfCgroup = cgroupV1SelfCgroup.toString();
+         String procSelfMountinfo = mountInfo.toString();
+         int retval = wb.validateCgroup(procCgroups, procSelfCgroup, procSelfMountinfo);
+-        Asserts.assertEQ(CGROUPS_V1, retval, "Multiple cpuset controllers, but only one in /sys/fs/cgroup");
++        Asserts.assertEQ(CGROUPS_V1, retval, "Multiple controllers, but only one in /sys/fs/cgroup");
+         Asserts.assertTrue(isValidCgroup(retval));
+-        System.out.println("testCgroupv1MultipleCpusetMounts PASSED!");
++        System.out.println("testCgroupv1MultipleControllerMounts PASSED!");
+     }
+ 
+     public void testCgroupv1SystemdOnly(WhiteBox wb) {
+@@ -341,10 +386,10 @@ public void testCgroupv1MissingMemoryController(WhiteBox wb) {
+         System.out.println("testCgroupv1MissingMemoryController PASSED!");
+     }
+ 
+-    public void testCgroupv2(WhiteBox wb) {
++    public void testCgroupv2(WhiteBox wb, Path mountInfo) {
+         String procCgroups = cgroupv2CgInfoZeroHierarchy.toString();
+         String procSelfCgroup = cgroupV2SelfCgroup.toString();
+-        String procSelfMountinfo = cgroupv2MntInfoZeroHierarchy.toString();
++        String procSelfMountinfo = mountInfo.toString();
+         int retval = wb.validateCgroup(procCgroups, procSelfCgroup, procSelfMountinfo);
+         Asserts.assertEQ(CGROUPS_V2, retval, "Expected");
+         Asserts.assertTrue(isValidCgroup(retval));
+@@ -388,13 +433,21 @@ public static void main(String[] args) throws Exception {
+         try {
+             test.testCgroupv1SystemdOnly(wb);
+             test.testCgroupv1NoMounts(wb);
+-            test.testCgroupv2(wb);
++            test.testCgroupv2(wb, test.cgroupv2MntInfoZeroHierarchy);
++            test.testCgroupv2(wb, test.cgroupv2MntInfoDouble);
++            test.testCgroupv2(wb, test.cgroupv2MntInfoDouble2);
+             test.testCgroupV1Hybrid(wb);
+             test.testCgroupV1HybridMntInfoOrder(wb);
+             test.testCgroupv1MissingMemoryController(wb);
+             test.testCgroupv2NoCgroup2Fs(wb);
+-            test.testCgroupv1MultipleCpusetMounts(wb, test.cgroupv1MntInfoDoubleCpuset);
+-            test.testCgroupv1MultipleCpusetMounts(wb, test.cgroupv1MntInfoDoubleCpuset2);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleCpuset);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleCpuset2);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleMemory);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleMemory2);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleCpu);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleCpu2);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoublePids);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoublePids2);
+             test.testCgroupv1JoinControllerCombo(wb);
+             test.testNonZeroHierarchyOnlyFreezer(wb);
+         } finally {
+diff --git a/test/hotspot/jtreg/containers/docker/DockerBasicTest.java b/test/hotspot/jtreg/containers/docker/DockerBasicTest.java
+index bcbd2ffa21df..357eb3db4972 100644
+--- a/test/hotspot/jtreg/containers/docker/DockerBasicTest.java
++++ b/test/hotspot/jtreg/containers/docker/DockerBasicTest.java
+@@ -53,6 +53,7 @@ public static void main(String[] args) throws Exception {
+         try {
+             testJavaVersion();
+             testHelloDocker();
++            testJavaVersionWithCgMounts();
+         } finally {
+             if (!DockerTestUtils.RETAIN_IMAGE_AFTER_TEST) {
+                 DockerTestUtils.removeDockerImage(imageNameAndTag);
+@@ -81,4 +82,17 @@ private static void testHelloDocker() throws Exception {
+             .shouldHaveExitValue(0)
+             .shouldContain("Hello Docker");
+     }
++
++
++    private static void testJavaVersionWithCgMounts() throws Exception {
++        DockerRunOptions opts =
++            new DockerRunOptions(imageNameAndTag, "/jdk/bin/java", "-version")
++            .addDockerOpts("-v", "/sys/fs/cgroup:/cgroups-in:ro");
++
++        // Duplicated cgroup mounts should be handled by the container detection
++        // code and should not cause any error/warning output.
++        DockerTestUtils.dockerRunJava(opts)
++            .shouldHaveExitValue(0)
++            .shouldNotMatch("\\[os,container *\\]");
++    }
+ }
+diff --git a/test/hotspot/jtreg/containers/docker/TestCPUAwareness.java b/test/hotspot/jtreg/containers/docker/TestCPUAwareness.java
+index 93881c615bd9..a41dc9c39392 100644
+--- a/test/hotspot/jtreg/containers/docker/TestCPUAwareness.java
++++ b/test/hotspot/jtreg/containers/docker/TestCPUAwareness.java
+@@ -70,10 +70,11 @@ public static void main(String[] args) throws Exception {
+             testActiveProcessorCount(2, 2);
+ 
+             // cpu quota and period
+-            testCpuQuotaAndPeriod(50*1000, 100*1000);
+-            testCpuQuotaAndPeriod(100*1000, 100*1000);
+-            testCpuQuotaAndPeriod(150*1000, 100*1000);
+-            testCpuQuotaAndPeriod(400*1000, 100*1000);
++            testCpuQuotaAndPeriod(50*1000, 100*1000, false);
++            testCpuQuotaAndPeriod(100*1000, 100*1000, false);
++            testCpuQuotaAndPeriod(150*1000, 100*1000, false);
++            testCpuQuotaAndPeriod(400*1000, 100*1000, false);
++            testCpuQuotaAndPeriod(50*1000, 100*1000, true /* additional cgroup mount */);
+ 
+             testOperatingSystemMXBeanAwareness("0.5", "1");
+             testOperatingSystemMXBeanAwareness("1.0", "1");
+@@ -153,7 +154,7 @@ private static int adjustExpectedAPCForAvailableCPUs(int expectedAPC) {
+     }
+ 
+ 
+-    private static void testCpuQuotaAndPeriod(int quota, int period)
++    private static void testCpuQuotaAndPeriod(int quota, int period, boolean addCgmounts)
+         throws Exception {
+         Common.logNewTestCase("test cpu quota and period: ");
+         System.out.println("quota = " + quota);
+@@ -167,6 +168,10 @@ private static void testCpuQuotaAndPeriod(int quota, int period)
+             .addDockerOpts("--cpu-period=" + period)
+             .addDockerOpts("--cpu-quota=" + quota);
+ 
++        if (addCgmounts) {
++            opts = opts.addDockerOpts("--volume", "/sys/fs/cgroup:/cgroups-in:ro");
++        }
++
+         Common.run(opts)
+             .shouldMatch("CPU Period is.*" + period)
+             .shouldMatch("CPU Quota is.*" + quota)
+diff --git a/test/hotspot/jtreg/containers/docker/TestMemoryAwareness.java b/test/hotspot/jtreg/containers/docker/TestMemoryAwareness.java
+index ff5cd23cc65f..d6ff603157a6 100644
+--- a/test/hotspot/jtreg/containers/docker/TestMemoryAwareness.java
++++ b/test/hotspot/jtreg/containers/docker/TestMemoryAwareness.java
+@@ -63,10 +63,11 @@ public static void main(String[] args) throws Exception {
+         DockerTestUtils.buildJdkContainerImage(imageName);
+ 
+         try {
+-            testMemoryLimit("100m", "104857600");
+-            testMemoryLimit("500m", "524288000");
+-            testMemoryLimit("1g", "1073741824");
+-            testMemoryLimit("4g", "4294967296");
++            testMemoryLimit("100m", "104857600", false);
++            testMemoryLimit("500m", "524288000", false);
++            testMemoryLimit("1g", "1073741824", false);
++            testMemoryLimit("4g", "4294967296", false);
++            testMemoryLimit("100m", "104857600", true /* additional cgroup mount */);
+ 
+             testMemorySoftLimit("500m", "524288000");
+             testMemorySoftLimit("1g", "1073741824");
+@@ -98,7 +99,7 @@ public static void main(String[] args) throws Exception {
+     }
+ 
+ 
+-    private static void testMemoryLimit(String valueToSet, String expectedTraceValue)
++    private static void testMemoryLimit(String valueToSet, String expectedTraceValue, boolean addCgmounts)
+             throws Exception {
+ 
+         Common.logNewTestCase("memory limit: " + valueToSet);
+@@ -106,6 +107,10 @@ private static void testMemoryLimit(String valueToSet, String expectedTraceValue
+         DockerRunOptions opts = Common.newOpts(imageName)
+             .addDockerOpts("--memory", valueToSet);
+ 
++        if (addCgmounts) {
++            opts = opts.addDockerOpts("--volume", "/sys/fs/cgroup:/cgroups-in:ro");
++        }
++
+         Common.run(opts)
+             .shouldMatch("Memory Limit is:.*" + expectedTraceValue);
+     }
diff --git a/srcpkgs/openjdk19-bootstrap/template b/srcpkgs/openjdk19-bootstrap/template
new file mode 100644
index 0000000000000..25ac0a7a17a2c
--- /dev/null
+++ b/srcpkgs/openjdk19-bootstrap/template
@@ -0,0 +1,101 @@
+# Template file for 'openjdk19-bootstrap'
+pkgname=openjdk19-bootstrap
+version=19.0.2+7
+revision=1
+_gtest_ver=1.8.1
+_java_ver="${version%%.*}"
+_jdk_update="${version#*+}"
+_base_version="${version%+*}"
+_jdk_home="usr/lib/jvm/openjdk${_java_ver}"
+archs="x86_64* aarch64*"
+create_wrksrc=yes
+build_wrksrc="jdk${_java_ver}u-jdk-${version/+/-}"
+build_style=gnu-configure
+configure_args="--disable-warnings-as-errors
+ --enable-unlimited-crypto
+ --with-zlib=system
+ --with-libjpeg=system
+ --with-giflib=system
+ --with-libpng=system
+ --with-lcms=system
+ --with-jtreg=no
+ --with-gtest=../googletest-release-${_gtest_ver}
+ --with-debug-level=release
+ --with-native-debug-symbols=internal
+ --with-jobs=${XBPS_ORIG_MAKEJOBS}
+ --with-version-pre=
+ --with-version-build=${_jdk_update}
+ --with-version-opt=void-r${revision}
+ --with-vendor-name=Void
+ --with-vendor-url=https://voidlinux.org/
+ --with-vendor-bug-url=https://github.com/void-linux/void-packages/issues
+ --with-vendor-vm-bug-url=https://github.com/void-linux/void-packages/issues
+ --with-boot-jdk=/usr/lib/jvm/openjdk$(( _java_ver - 1 ))"
+make_build_args="images"
+make_check_target="test-hotspot-gtest"
+hostmakedepends="pkg-config automake autoconf cpio tar unzip zip ca-certificates
+ openssl zlib-devel which make-ca openjdk$(( _java_ver - 1 ))-bootstrap"
+makedepends="libXrender-devel libXtst-devel libXt-devel libXrandr-devel
+ giflib-devel libjpeg-turbo-devel cups-devel freetype-devel alsa-lib-devel
+ fontconfig-devel zlib-devel lcms2-devel"
+short_desc="OpenJDK Java Development Kit (bootstrap version ${_java_ver})"
+maintainer="classabbyamp <void@placeviolette.net>"
+license="GPL-2.0-only WITH Classpath-exception-2.0"
+homepage="http://openjdk.java.net/"
+distfiles="https://github.com/openjdk/jdk${_java_ver}u/archive/jdk-${version}.tar.gz
+ https://github.com/google/googletest/archive/refs/tags/release-${_gtest_ver}.tar.gz"
+checksum="5903efd527dd08e9c235c8822e3d5699c3d18a8618c3e533307e8d6491ffbbf0
+ 9bf1fe5182a604b4135edc1a425ae356c9ad15e9b23f9f12a02e80184c3a249c"
+nocross=yes
+repository=bootstrap
+patch_args="-Np1 --directory=$build_wrksrc"
+
+# Build and check are still parallel, but don't use -jN.
+disable_parallel_build=yes
+disable_parallel_check=yes
+
+case "$XBPS_TARGET_MACHINE" in
+	i686*|arm*) broken="Unsupported architecture" ;;
+esac
+
+post_extract() {
+	chmod +x "$build_wrksrc"/configure
+	if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+		rm -r "$build_wrksrc"/src/jdk.hotspot.agent
+	fi
+}
+
+do_configure() {
+	CFLAGS=${CFLAGS/-D_FORTIFY_SOURCE=2/}
+	CXXFLAGS=${CXXFLAGS/-D_FORTIFY_SOURCE=2/}
+
+	# force ELFv2 for ppc64 just in case
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*)
+			CFLAGS+=" -DABI_ELFv2"
+			CXXFLAGS+=" -DABI_ELFv2"
+			;;
+	esac
+
+	configure_args=${configure_args/--with-libtool-sysroot=$XBPS_CROSS_BASE}
+	if [ "$XBPS_CCACHE" ] && [ -z "$CROSS_BUILD" ]; then
+		configure_args+=" --enable-ccache"
+		CC="/usr/bin/cc"
+		CXX="/usr/bin/c++"
+	fi
+	./configure ${configure_args} \
+		--with-extra-cflags="$CFLAGS" \
+		--with-extra-cxxflags="$CXXFLAGS" \
+		--with-extra-ldflags="$LDFLAGS" \
+		READELF="$READELF" AR="$AR" STRIP="$STRIP" NM="$NM" \
+		OBJDUMP="$OBJDUMP" OBJCOPY="$OBJCOPY"
+}
+
+pre_install() {
+	make_install_args="INSTALL_PREFIX=${DESTDIR}/usr/lib"
+}
+
+post_install() {
+	rm -rf "${DESTDIR}"/usr/lib/bin
+	mv "${DESTDIR}"/usr/lib/jvm/openjdk-"${_base_version}" "${DESTDIR}/$_jdk_home"
+}
diff --git a/srcpkgs/openjdk19-bootstrap/update b/srcpkgs/openjdk19-bootstrap/update
new file mode 100644
index 0000000000000..d8abe90aa84d2
--- /dev/null
+++ b/srcpkgs/openjdk19-bootstrap/update
@@ -0,0 +1,4 @@
+site="https://github.com/openjdk/jdk19u/tags"
+pattern='jdk-\K19\.[\d.+]+(?=\.)'
+# don't need to update the bootstrap package
+ignore="*"

From e7c786c6622121a2b804a8e04d4aa51a46780d0d Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Fri, 22 Dec 2023 00:47:05 -0500
Subject: [PATCH 11/12] New package: openjdk20-bootstrap-20.0.2+9

---
 .../patches/FixNullPtrCast.patch              |  36 +++++++
 srcpkgs/openjdk20-bootstrap/template          | 101 ++++++++++++++++++
 srcpkgs/openjdk20-bootstrap/update            |   4 +
 3 files changed, 141 insertions(+)
 create mode 100644 srcpkgs/openjdk20-bootstrap/patches/FixNullPtrCast.patch
 create mode 100644 srcpkgs/openjdk20-bootstrap/template
 create mode 100644 srcpkgs/openjdk20-bootstrap/update

diff --git a/srcpkgs/openjdk20-bootstrap/patches/FixNullPtrCast.patch b/srcpkgs/openjdk20-bootstrap/patches/FixNullPtrCast.patch
new file mode 100644
index 0000000000000..6f05158792732
--- /dev/null
+++ b/srcpkgs/openjdk20-bootstrap/patches/FixNullPtrCast.patch
@@ -0,0 +1,36 @@
+Patch taken from Alpine: https://git.alpinelinux.org/aports/tree/community/openjdk17/FixNullPtrCast.patch
+
+same fix for armv7l-musl added
+
+Subject: Fix cast errors with latest GCC
+Upstream: No
+Author: Simon Frankenberger <simon-alpine@fraho.eu>
+
+This patch fixes one remaining casting error reported by GCC 12 for aarch64
+
+--- old/src/hotspot/cpu/aarch64/interpreterRT_aarch64.cpp
++++ new/src/hotspot/cpu/aarch64/interpreterRT_aarch64.cpp
+@@ -267,7 +267,7 @@
+ 
+   virtual void pass_object() {
+     intptr_t* addr = single_slot_addr();
+-    intptr_t value = *addr == 0 ? NULL : (intptr_t)addr;
++    intptr_t value = *addr == 0 ? (intptr_t) 0 : (intptr_t)addr;
+     if (pass_gpr(value) < 0) {
+       pass_stack<>(value);
+     }
+
+--- old/src/hotspot/cpu/arm/interpreterRT_arm.cpp
++++ new/src/hotspot/cpu/arm/interpreterRT_arm.cpp
+@@ -306,8 +306,8 @@
+   virtual void pass_object() {
+     intptr_t from_addr = (intptr_t)(_from + Interpreter::local_offset_in_bytes(0));
+     if(_last_gp < GPR_PARAMS) {
+-      _toGP[_last_gp++] = (*(intptr_t*)from_addr == 0) ? NULL : from_addr;
++      _toGP[_last_gp++] = (*(intptr_t*)from_addr == 0) ? (intptr_t) 0 : (intptr_t)from_addr;
+     } else {
+-      *_to++ = (*(intptr_t*)from_addr == 0) ? NULL : from_addr;
++      *_to++ = (*(intptr_t*)from_addr == 0) ? (intptr_t) 0 : (intptr_t)from_addr;
+     }
+     _from -= Interpreter::stackElementSize;
+   }
diff --git a/srcpkgs/openjdk20-bootstrap/template b/srcpkgs/openjdk20-bootstrap/template
new file mode 100644
index 0000000000000..a23849827ce9a
--- /dev/null
+++ b/srcpkgs/openjdk20-bootstrap/template
@@ -0,0 +1,101 @@
+# Template file for 'openjdk20-bootstrap'
+pkgname=openjdk20-bootstrap
+version=20.0.2+9
+revision=1
+_gtest_ver=1.8.1
+_java_ver="${version%%.*}"
+_jdk_update="${version#*+}"
+_base_version="${version%+*}"
+_jdk_home="usr/lib/jvm/openjdk${_java_ver}"
+archs="x86_64* aarch64*"
+create_wrksrc=yes
+build_wrksrc="jdk${_java_ver}u-jdk-${version/+/-}"
+build_style=gnu-configure
+configure_args="--disable-warnings-as-errors
+ --enable-unlimited-crypto
+ --with-zlib=system
+ --with-libjpeg=system
+ --with-giflib=system
+ --with-libpng=system
+ --with-lcms=system
+ --with-jtreg=no
+ --with-gtest=../googletest-release-${_gtest_ver}
+ --with-debug-level=release
+ --with-native-debug-symbols=internal
+ --with-jobs=${XBPS_ORIG_MAKEJOBS}
+ --with-version-pre=
+ --with-version-build=${_jdk_update}
+ --with-version-opt=void-r${revision}
+ --with-vendor-name=Void
+ --with-vendor-url=https://voidlinux.org/
+ --with-vendor-bug-url=https://github.com/void-linux/void-packages/issues
+ --with-vendor-vm-bug-url=https://github.com/void-linux/void-packages/issues
+ --with-boot-jdk=/usr/lib/jvm/openjdk$(( _java_ver - 1 ))"
+make_build_args="images"
+make_check_target="test-hotspot-gtest"
+hostmakedepends="pkg-config automake autoconf cpio tar unzip zip ca-certificates
+ openssl zlib-devel which make-ca openjdk$(( _java_ver - 1 ))-bootstrap"
+makedepends="libXrender-devel libXtst-devel libXt-devel libXrandr-devel
+ giflib-devel libjpeg-turbo-devel cups-devel freetype-devel alsa-lib-devel
+ fontconfig-devel zlib-devel lcms2-devel"
+short_desc="OpenJDK Java Development Kit (bootstrap version ${_java_ver})"
+maintainer="classabbyamp <void@placeviolette.net>"
+license="GPL-2.0-only WITH Classpath-exception-2.0"
+homepage="http://openjdk.java.net/"
+distfiles="https://github.com/openjdk/jdk${_java_ver}u/archive/jdk-${version}.tar.gz
+ https://github.com/google/googletest/archive/refs/tags/release-${_gtest_ver}.tar.gz"
+checksum="4d6f176075d5f2ce62fd16ebd5cc4c27a3e551ce4d3d3bc0e9946454e52fc88d
+ 9bf1fe5182a604b4135edc1a425ae356c9ad15e9b23f9f12a02e80184c3a249c"
+nocross=yes
+repository=bootstrap
+patch_args="-Np1 --directory=$build_wrksrc"
+
+# Build and check are still parallel, but don't use -jN.
+disable_parallel_build=yes
+disable_parallel_check=yes
+
+case "$XBPS_TARGET_MACHINE" in
+	i686*|arm*) broken="Unsupported architecture" ;;
+esac
+
+post_extract() {
+	chmod +x "$build_wrksrc"/configure
+	if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+		rm -r "$build_wrksrc"/src/jdk.hotspot.agent
+	fi
+}
+
+do_configure() {
+	CFLAGS=${CFLAGS/-D_FORTIFY_SOURCE=2/}
+	CXXFLAGS=${CXXFLAGS/-D_FORTIFY_SOURCE=2/}
+
+	# force ELFv2 for ppc64 just in case
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*)
+			CFLAGS+=" -DABI_ELFv2"
+			CXXFLAGS+=" -DABI_ELFv2"
+			;;
+	esac
+
+	configure_args=${configure_args/--with-libtool-sysroot=$XBPS_CROSS_BASE}
+	if [ "$XBPS_CCACHE" ] && [ -z "$CROSS_BUILD" ]; then
+		configure_args+=" --enable-ccache"
+		CC="/usr/bin/cc"
+		CXX="/usr/bin/c++"
+	fi
+	./configure ${configure_args} \
+		--with-extra-cflags="$CFLAGS" \
+		--with-extra-cxxflags="$CXXFLAGS" \
+		--with-extra-ldflags="$LDFLAGS" \
+		READELF="$READELF" AR="$AR" STRIP="$STRIP" NM="$NM" \
+		OBJDUMP="$OBJDUMP" OBJCOPY="$OBJCOPY"
+}
+
+pre_install() {
+	make_install_args="INSTALL_PREFIX=${DESTDIR}/usr/lib"
+}
+
+post_install() {
+	rm -rf "${DESTDIR}"/usr/lib/bin
+	mv "${DESTDIR}"/usr/lib/jvm/openjdk-"${_base_version}" "${DESTDIR}/$_jdk_home"
+}
diff --git a/srcpkgs/openjdk20-bootstrap/update b/srcpkgs/openjdk20-bootstrap/update
new file mode 100644
index 0000000000000..825bd945bfc9a
--- /dev/null
+++ b/srcpkgs/openjdk20-bootstrap/update
@@ -0,0 +1,4 @@
+site="https://github.com/openjdk/jdk20u/tags"
+pattern='jdk-\K20\.[\d.+]+(?=\.)'
+# don't need to update the bootstrap package
+ignore="*"

From 10a4161a7c6645c9587d89646e14e9b691e73b2c Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Fri, 22 Dec 2023 00:47:14 -0500
Subject: [PATCH 12/12] New package: openjdk21-21.0.1+12

---
 srcpkgs/openjdk21-doc         |   1 +
 srcpkgs/openjdk21-jmods       |   1 +
 srcpkgs/openjdk21-jre         |   1 +
 srcpkgs/openjdk21-src         |   1 +
 srcpkgs/openjdk21-static-libs |   1 +
 srcpkgs/openjdk21/template    | 194 ++++++++++++++++++++++++++++++++++
 srcpkgs/openjdk21/update      |   1 +
 7 files changed, 200 insertions(+)
 create mode 120000 srcpkgs/openjdk21-doc
 create mode 120000 srcpkgs/openjdk21-jmods
 create mode 120000 srcpkgs/openjdk21-jre
 create mode 120000 srcpkgs/openjdk21-src
 create mode 120000 srcpkgs/openjdk21-static-libs
 create mode 100644 srcpkgs/openjdk21/template
 create mode 100644 srcpkgs/openjdk21/update

diff --git a/srcpkgs/openjdk21-doc b/srcpkgs/openjdk21-doc
new file mode 120000
index 0000000000000..57e991f86dff5
--- /dev/null
+++ b/srcpkgs/openjdk21-doc
@@ -0,0 +1 @@
+openjdk21
\ No newline at end of file
diff --git a/srcpkgs/openjdk21-jmods b/srcpkgs/openjdk21-jmods
new file mode 120000
index 0000000000000..57e991f86dff5
--- /dev/null
+++ b/srcpkgs/openjdk21-jmods
@@ -0,0 +1 @@
+openjdk21
\ No newline at end of file
diff --git a/srcpkgs/openjdk21-jre b/srcpkgs/openjdk21-jre
new file mode 120000
index 0000000000000..57e991f86dff5
--- /dev/null
+++ b/srcpkgs/openjdk21-jre
@@ -0,0 +1 @@
+openjdk21
\ No newline at end of file
diff --git a/srcpkgs/openjdk21-src b/srcpkgs/openjdk21-src
new file mode 120000
index 0000000000000..57e991f86dff5
--- /dev/null
+++ b/srcpkgs/openjdk21-src
@@ -0,0 +1 @@
+openjdk21
\ No newline at end of file
diff --git a/srcpkgs/openjdk21-static-libs b/srcpkgs/openjdk21-static-libs
new file mode 120000
index 0000000000000..57e991f86dff5
--- /dev/null
+++ b/srcpkgs/openjdk21-static-libs
@@ -0,0 +1 @@
+openjdk21
\ No newline at end of file
diff --git a/srcpkgs/openjdk21/template b/srcpkgs/openjdk21/template
new file mode 100644
index 0000000000000..87099542c3373
--- /dev/null
+++ b/srcpkgs/openjdk21/template
@@ -0,0 +1,194 @@
+# Template file for 'openjdk21'
+pkgname=openjdk21
+version=21.0.1+12
+revision=1
+_gtest_ver=1.13.0
+_java_ver="${version%%.*}"
+_jdk_update="${version#*+}"
+_base_version="${version%+*}"
+_jdk_home="usr/lib/jvm/openjdk${_java_ver}"
+archs="x86_64* aarch64*"
+create_wrksrc=yes
+build_wrksrc="jdk${_java_ver}u-jdk-${version/+/-}"
+build_style=gnu-configure
+configure_args="--disable-warnings-as-errors
+ --enable-unlimited-crypto
+ --with-zlib=system
+ --with-libjpeg=system
+ --with-giflib=system
+ --with-libpng=system
+ --with-lcms=system
+ --with-jtreg=no
+ --with-gtest=../googletest-${_gtest_ver}
+ --with-debug-level=release
+ --with-native-debug-symbols=internal
+ --with-jobs=${XBPS_ORIG_MAKEJOBS}
+ --with-version-pre=
+ --with-version-build=${_jdk_update}
+ --with-version-opt=void-r${revision}
+ --with-vendor-name=Void
+ --with-vendor-url=https://voidlinux.org/
+ --with-vendor-bug-url=https://github.com/void-linux/void-packages/issues
+ --with-vendor-vm-bug-url=https://github.com/void-linux/void-packages/issues"
+make_build_args="images static-libs-image $(vopt_if docs docs)"
+make_install_args="INSTALL_PREFIX=\"${DESTDIR}/usr/lib\""
+make_check_target="test-hotspot-gtest"
+hostmakedepends="pkg-config automake autoconf cpio tar unzip zip ca-certificates
+ openssl zlib-devel which make-ca openjdk20-bootstrap"
+makedepends="libXrender-devel libXtst-devel libXt-devel libXrandr-devel
+ giflib-devel libjpeg-turbo-devel cups-devel freetype-devel alsa-lib-devel
+ fontconfig-devel zlib-devel lcms2-devel"
+depends="${pkgname}-jre-${version}_${revision}"
+short_desc="OpenJDK Java Development Kit (version ${_java_ver})"
+maintainer="classabbyamp <void@placeviolette.net>"
+license="GPL-2.0-only WITH Classpath-exception-2.0"
+homepage="http://openjdk.java.net/"
+distfiles="https://github.com/openjdk/jdk${_java_ver}u/archive/jdk-${version}.tar.gz
+ https://github.com/google/googletest/archive/refs/tags/v${_gtest_ver}.tar.gz"
+checksum="9943e3814d3c1a31f1449f09a8b67df54841944f855a1d372be892c5e6b19217
+ ad7fdba11ea011c1d925b3289cf4af2c66a352e18d4c7264392fead75e919363"
+alternatives="jdk:/usr/lib/jvm/default-jdk:/${_jdk_home}"
+provides="java-environment-${version}_1"
+patch_args="-Np1 --directory=$build_wrksrc"
+
+# Build and check are still parallel, but don't use -jN.
+disable_parallel_build=yes
+disable_parallel_check=yes
+build_options="docs"
+
+case "$XBPS_TARGET_MACHINE" in
+	ppc64*) ;;
+	# no hotspot JIT for ppc32
+	ppc*) _use_zero=yes ;;
+	i686*|arm*) broken="Unsupported architecture" ;;
+esac
+
+if [ -n "$_use_zero" ]; then
+	makedepends+=" libffi-devel"
+	configure_args+=" --with-jvm-variants=zero"
+	case "$XBPS_TARGET_MACHINE" in
+	ppc*) configure_args+=" --with-boot-jdk-jvmargs=-XX:ThreadStackSize=2560";;
+	esac
+fi
+configure_args+=" --with-boot-jdk-jvmargs=-Xlog:disable"
+
+case "$XBPS_TARGET_LIBC" in
+	glibc) build_options_default+=" docs";;
+esac
+
+if [ ! "$CROSS_BUILD" ]; then
+	hostmakedepends+=" openjdk20-bootstrap"
+	configure_args+=" --with-boot-jdk=/usr/lib/jvm/openjdk20"
+else
+	hostmakedepends+=" openjdk21"
+	configure_args+=" --with-boot-jdk=/usr/lib/jvm/openjdk21"
+fi
+
+post_extract() {
+	chmod +x $build_wrksrc/configure
+	if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+		rm -r $build_wrksrc/src/jdk.hotspot.agent
+	fi
+}
+
+do_configure() {
+	CFLAGS=${CFLAGS/-D_FORTIFY_SOURCE=2/}
+	CXXFLAGS=${CXXFLAGS/-D_FORTIFY_SOURCE=2/}
+
+	# force ELFv2 for ppc64 just in case
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*)
+			CFLAGS+=" -DABI_ELFv2"
+			CXXFLAGS+=" -DABI_ELFv2"
+			;;
+	esac
+
+	configure_args=${configure_args/--with-libtool-sysroot=$XBPS_CROSS_BASE}
+	if [ "$XBPS_CCACHE" ] && [ -z "$CROSS_BUILD" ]; then
+		configure_args+=" --enable-ccache"
+		CC="/usr/bin/cc"
+		CXX="/usr/bin/c++"
+	fi
+	./configure ${configure_args} \
+		--with-extra-cflags="$CFLAGS" \
+		--with-extra-cxxflags="$CXXFLAGS" \
+		--with-extra-ldflags="$LDFLAGS" \
+		READELF=$READELF AR=$AR STRIP=$STRIP NM=$NM \
+		OBJDUMP=$OBJDUMP OBJCOPY=$OBJCOPY
+}
+
+post_install() {
+	rm -rf ${DESTDIR}/usr/lib/bin
+	mv ${DESTDIR}/usr/lib/jvm/openjdk-${_base_version} ${DESTDIR}/$_jdk_home
+	vcopy build/*-release/images/static-libs/lib $_jdk_home
+	vmkdir $_jdk_home/lib/security
+	make-ca -g -f --destdir "${PWD}/ca" -k "${DESTDIR}/$_jdk_home/bin/keytool"
+	mv ./ca/etc/pki/tls/java/cacerts ${DESTDIR}/$_jdk_home/lib/security/
+	chmod -R ugo+rw ./ca
+	rm -rf ./ca
+}
+
+subpackages="openjdk21-static-libs openjdk21-src openjdk21-jre openjdk21-doc openjdk21-jmods"
+
+openjdk21-jre_package() {
+	shlib_provides="libawt.so libawt_xawt.so libjava.so libjli.so libjvm.so libjawt.so"
+	short_desc+=" - runtime components"
+	provides="java-runtime-${version}_1"
+	depends="openjdk-common"
+	alternatives="java:/usr/lib/jvm/default-jre:/${_jdk_home}"
+	pkg_install() {
+		for bin in java jfr keytool rmiregistry; do
+			vmove "${_jdk_home}/bin/${bin}"
+			vmove "${_jdk_home}/man/man1/${bin}.1"
+		done
+
+		for f in lib legal conf release; do
+			vmove $_jdk_home/$f
+		done
+
+		vlicense ASSEMBLY_EXCEPTION
+		vlicense LICENSE
+	}
+}
+
+openjdk21-doc_package() {
+	nostrip=yes
+	noverifyrdeps=yes
+	noshlibprovides=yes
+	short_desc+=" - documentation"
+	if [ -z "$build_option_docs" ]; then
+		build_style=meta
+	fi
+	pkg_install() {
+		if [ "$build_option_docs" ]; then
+			local _docdir=usr/share/doc/openjdk$_java_ver
+			vmkdir $_docdir
+			cp -a $wrksrc/$build_wrksrc/build/linux-*/images/docs/* ${PKGDESTDIR}/$_docdir
+		fi
+	}
+}
+
+openjdk21-src_package() {
+	nostrip=yes
+	noverifyrdeps=yes
+	noshlibprovides=yes
+	short_desc+=" - source code"
+	pkg_install() {
+		vmove "$_jdk_home/lib/src.zip"
+	}
+}
+
+openjdk21-static-libs_package() {
+	short_desc+=" - static libs"
+	pkg_install() {
+		vmove "$_jdk_home/lib/*.a"
+	}
+}
+
+openjdk21-jmods_package() {
+	short_desc+=" - JMODs"
+	depends="${sourcepkg}-${version}_${revision}"
+	pkg_install() {
+		vmove $_jdk_home/jmods
+	}
+}
diff --git a/srcpkgs/openjdk21/update b/srcpkgs/openjdk21/update
new file mode 100644
index 0000000000000..0090f26b68e1b
--- /dev/null
+++ b/srcpkgs/openjdk21/update
@@ -0,0 +1 @@
+pattern='jdk-\K21\.[\d.+]+(?=\.)'

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PR PATCH] [Updated] jdk21
  2023-12-23  0:38 [PR PATCH] jdk21 classabbyamp
@ 2023-12-23  0:41 ` classabbyamp
  2023-12-24  4:16 ` classabbyamp
  2023-12-24 14:55 ` [PR PATCH] [Merged]: jdk21 classabbyamp
  2 siblings, 0 replies; 4+ messages in thread
From: classabbyamp @ 2023-12-23  0:41 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 443 bytes --]

There is an updated pull request by classabbyamp against master on the void-packages repository

https://github.com/classabbyamp/void-packages jdk21
https://github.com/void-linux/void-packages/pull/47882

jdk21
#### Testing the changes
- I tested the changes in this PR: **YES**

test please: https://files.placeviolette.net/jdk21/

[ci skip]



A patch file from https://github.com/void-linux/void-packages/pull/47882.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-jdk21-47882.patch --]
[-- Type: text/x-diff, Size: 118502 bytes --]

From 1b6d702ca2c9c6b434eb3d4688f0d66811567d39 Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Thu, 21 Dec 2023 17:36:47 -0500
Subject: [PATCH 01/12] xbps-triggers: update to 0.127.

get rid of the openjdk profile hook. it should not have been done like this.
---
 Manual.md                                   |  8 -----
 srcpkgs/xbps-triggers/files/openjdk-profile | 39 ---------------------
 srcpkgs/xbps-triggers/template              |  2 +-
 3 files changed, 1 insertion(+), 48 deletions(-)
 delete mode 100755 srcpkgs/xbps-triggers/files/openjdk-profile

diff --git a/Manual.md b/Manual.md
index 667ab634f9713..e6a98551eee30 100644
--- a/Manual.md
+++ b/Manual.md
@@ -62,7 +62,6 @@ packages for XBPS, the `Void Linux` native packaging system.
 		* [kernel-hooks](#triggers_kernel_hooks)
 		* [mimedb](#triggers_mimedb)
 		* [mkdirs](#triggers_mkdirs)
-		* [openjdk-profile](#triggers_openjdk_profile)
 		* [pango-modules](#triggers_pango_module)
 		* [pycompile](#triggers_pycompile)
 		* [register-shell](#triggers_register_shell)
@@ -2016,13 +2015,6 @@ During removal it will delete the directory using `rmdir`.
 To include this trigger use the `make_dirs` variable, as the trigger won't do anything
 unless it is defined.
 
-<a id="triggers_openjdk_profile"></a>
-#### openjdk-profile
-
-The openjdk-profile trigger is responsible for creating an entry in /etc/profile.d that
-sets the `JAVA_HOME` environment variable to the currently-selected alternative for
-`/usr/bin/java` on installation. This trigger must be manually requested.
-
 <a id="triggers_pango_module"></a>
 #### pango-modules
 
diff --git a/srcpkgs/xbps-triggers/files/openjdk-profile b/srcpkgs/xbps-triggers/files/openjdk-profile
deleted file mode 100755
index 007d9cd9eedf4..0000000000000
--- a/srcpkgs/xbps-triggers/files/openjdk-profile
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/sh
-#
-# Adds an entry to /etc/profile.d for setting $JAVA_HOME.
-#
-# Arguments:	$ACTION = [run/targets]
-#		$TARGET = [post-install/pre-remove]
-#		$PKGNAME
-#		$VERSION
-#		$UPDATE = [yes/no]
-#
-ACTION="$1"
-TARGET="$2"
-PKGNAME="$3"
-VERSION="$4"
-UPDATE="$5"
-
-jdkprofile=etc/profile.d/openjdk.sh
-
-case "$ACTION" in
-targets)
-	echo "post-install"
-	;;
-run)
-	[ -f "$jdkprofile" ] && exit 0
-
-	cat > "$jdkprofile" <<'EOF'
-if _java_bin=$(readlink -e /usr/bin/java); then
-	_java_bin="${_java_bin%/bin/java}"
-	[ -d "${_java_bin}" ] && export JAVA_HOME="${JAVA_HOME:=${_java_bin}}"
-fi
-unset _java_bin
-EOF
-	;;
-*)
-	exit 1
-	;;
-esac
-
-exit 0
diff --git a/srcpkgs/xbps-triggers/template b/srcpkgs/xbps-triggers/template
index 76c3a6b27fad4..66936411a4258 100644
--- a/srcpkgs/xbps-triggers/template
+++ b/srcpkgs/xbps-triggers/template
@@ -1,6 +1,6 @@
 # Template file for 'xbps-triggers'
 pkgname=xbps-triggers
-version=0.126
+version=0.127
 revision=1
 bootstrap=yes
 short_desc="XBPS triggers for Void Linux"

From dab30131acacf6337adb288395952a8c131dfa4a Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Thu, 21 Dec 2023 17:32:52 -0500
Subject: [PATCH 02/12] New package: openjdk-common-1

Replaces the xbps trigger that added the profile script for openjdk,
which was really a mistake.

Instead of using alternative groups for specific JRE/JDK binaries, use
two symlinks: /usr/lib/jvm/default-jdk and /usr/lib/jvm/default-jre,
which point to /usr/lib/jvm/${version}. Prefer default-jdk to default-jre,
and just add them to PATH and MANPATH instead of putting things in /usr/bin.
---
 srcpkgs/openjdk-common/INSTALL          |  9 +++++++++
 srcpkgs/openjdk-common/INSTALL.msg      |  2 ++
 srcpkgs/openjdk-common/files/profile.sh | 12 ++++++++++++
 srcpkgs/openjdk-common/template         | 12 ++++++++++++
 4 files changed, 35 insertions(+)
 create mode 100644 srcpkgs/openjdk-common/INSTALL
 create mode 100644 srcpkgs/openjdk-common/INSTALL.msg
 create mode 100644 srcpkgs/openjdk-common/files/profile.sh
 create mode 100644 srcpkgs/openjdk-common/template

diff --git a/srcpkgs/openjdk-common/INSTALL b/srcpkgs/openjdk-common/INSTALL
new file mode 100644
index 0000000000000..e0e155cc208ab
--- /dev/null
+++ b/srcpkgs/openjdk-common/INSTALL
@@ -0,0 +1,9 @@
+#!/bin/sh
+case "$ACTION" in
+pre)
+	# remove the openjdk.sh from xbps-triggers
+	if [ -e "./etc/profile.d/openjdk.sh" ]; then
+		rm "./etc/profile.d/openjdk.sh"
+	fi
+	;;
+esac
diff --git a/srcpkgs/openjdk-common/INSTALL.msg b/srcpkgs/openjdk-common/INSTALL.msg
new file mode 100644
index 0000000000000..7e75b5abe457b
--- /dev/null
+++ b/srcpkgs/openjdk-common/INSTALL.msg
@@ -0,0 +1,2 @@
+The way the default OpenJDK version is selected has changed.
+You may need to re-login for this change to take effect.
diff --git a/srcpkgs/openjdk-common/files/profile.sh b/srcpkgs/openjdk-common/files/profile.sh
new file mode 100644
index 0000000000000..e9c9a6042eea7
--- /dev/null
+++ b/srcpkgs/openjdk-common/files/profile.sh
@@ -0,0 +1,12 @@
+# only modify the environment if an openjdk*-jre package is installed
+if [ -e "/usr/lib/jvm/default-jre" ]; then
+	# if an openjdk* package is installed, prefer it to the selected jre
+	if [ -e "/usr/lib/jvm/default-jdk" ]; then
+		export JAVA_HOME="/usr/lib/jvm/default-jdk"
+	else
+		export JAVA_HOME="/usr/lib/jvm/default-jre"
+	fi
+	# append the select jdk and jre bin and man dirs to the relevant PATHs
+	export PATH="$PATH:/usr/lib/jvm/default-jdk/bin:/usr/lib/jvm/default-jre/bin"
+	export MANPATH="$MANPATH:/usr/lib/jvm/default-jdk/man:/usr/lib/jvm/default-jre/man"
+fi
diff --git a/srcpkgs/openjdk-common/template b/srcpkgs/openjdk-common/template
new file mode 100644
index 0000000000000..e0d3d53d55004
--- /dev/null
+++ b/srcpkgs/openjdk-common/template
@@ -0,0 +1,12 @@
+# Template file for 'openjdk-common'
+pkgname=openjdk-common
+version=1
+revision=1
+short_desc="Common files for OpenJDK packages"
+maintainer="classabbyamp <void@placeviolette.net>"
+license="Public Domain"
+homepage="https://www.voidlinux.org"
+
+do_install() {
+	vinstall "${FILESDIR}"/profile.sh 644 /etc/profile.d jdk.sh
+}

From b226850ac3c3e3134bce965b9dd625de3b1d75a8 Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Thu, 21 Dec 2023 17:37:34 -0500
Subject: [PATCH 03/12] openjdk8: update to 8u332b05.

- various template cleanups
- rename /usr/lib/jvm/java-1.8-openjdk to /usr/lib/jvm/openjdk8
  for consistency
- fix manpages
- fix alternatives
---
 srcpkgs/openjdk8/template | 167 ++++++++++++--------------------------
 1 file changed, 50 insertions(+), 117 deletions(-)

diff --git a/srcpkgs/openjdk8/template b/srcpkgs/openjdk8/template
index 8266daff8d8a2..966f5c3703f01 100644
--- a/srcpkgs/openjdk8/template
+++ b/srcpkgs/openjdk8/template
@@ -1,19 +1,13 @@
 # Template file for 'openjdk8'
-# TODO: better places for bin and man?
-# TODO: make -headless versions
-# TODO: config files?
 pkgname=openjdk8
-version=8u322b04
-revision=5
+version=8u332b05
+revision=1
 _jdk_update="${version#*u}"
 _jdk_update="${_jdk_update%b*}"
 _jdk_build="${version#*b}"
-_jdk_home="usr/lib/jvm/java-1.8-openjdk"
-# we're using aarch64 port repo to get aarch64 JIT; the repo is
-# otherwise the same as the normal one, just with aarch64 port added
-_repo_ver="aarch64-shenandoah-jdk${version/b/-b}"
+_jdk_home="usr/lib/jvm/openjdk8"
+_commit="bdc2203a44df159d94ecd0e04a230e65cb84297e"
 archs="x86_64* i686* aarch64* arm* ppc64*"
-create_wrksrc=yes
 build_style=gnu-configure
 configure_args="
  --prefix=${XBPS_DESTDIR}/${XBPS_CROSS_TRIPLET}/${pkgname}-${version}/usr/lib
@@ -28,13 +22,14 @@ configure_args="
  --with-freetype-lib=${XBPS_CROSS_BASE}/usr/lib
  --with-freetype-include=${XBPS_CROSS_BASE}/usr/include/freetype2
  --with-jtreg=no
- --with-jobs=${XBPS_MAKEJOBS}
- --with-vendor-name="Void"
- --with-vendor-url="https://voidlinux.org/"
- --with-vendor-bug-url="https://github.com/void-linux/void-packages/issues"
- --with-vendor-vm-bug-url="https://github.com/void-linux/void-packages/issues"
+ --with-jobs=${XBPS_ORIG_MAKEJOBS}
+ --with-vendor-name=Void
+ --with-vendor-url=https://voidlinux.org/
+ --with-vendor-bug-url=https://github.com/void-linux/void-packages/issues
+ --with-vendor-vm-bug-url=https://github.com/void-linux/void-packages/issues
  --disable-option-checking"
-make_build_args="images $(vopt_if docs docs) COMPILER_WARNINGS_FATAL=false"
+make_build_args="images $(vopt_if docs docs) COMPILER_WARNINGS_FATAL=false GIT=true"
+make_install_args="GIT=true"
 hostmakedepends="pkg-config automake autoconf cpio tar unzip zip ca-certificates
  zlib-devel make-ca which"
 makedepends="libXrender-devel libXtst-devel libXt-devel libXrandr-devel
@@ -45,28 +40,19 @@ short_desc="OpenJDK Java Development Kit (version 8)"
 maintainer="Toyam Cox <Vaelatern@voidlinux.org>"
 license="GPL-2.0-only WITH Classpath-exception-2.0"
 homepage="http://openjdk.java.net/"
-distfiles="
- http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/archive/${_repo_ver}.tar.gz>jdk8u-${_repo_ver}.tar.gz
- http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/corba/archive/${_repo_ver}.tar.gz>corba-${_repo_ver}.tar.gz
- http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/hotspot/archive/${_repo_ver}.tar.gz>hotspot-${_repo_ver}.tar.gz
- http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/jdk/archive/${_repo_ver}.tar.gz>jdk-${_repo_ver}.tar.gz
- http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/jaxws/archive/${_repo_ver}.tar.gz>jaxws-${_repo_ver}.tar.gz
- http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/jaxp/archive/${_repo_ver}.tar.gz>jaxp-${_repo_ver}.tar.gz
- http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/langtools/archive/${_repo_ver}.tar.gz>langtools-${_repo_ver}.tar.gz
- http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/nashorn/archive/${_repo_ver}.tar.gz>nashorn-${_repo_ver}.tar.gz"
+# we're using aarch64 port repo to get aarch64 JIT; the repo is
+# otherwise the same as the normal one, just with aarch64 port added
+distfiles="https://github.com/openjdk/shenandoah-jdk8u/archive/${_commit}.tar.gz"
+checksum=4c39be8454a1b8b10a9ff845a4e7e639808799d3d2eddb1484df80835d5e88e4
 
-checksum="8ef23f1fb449c50c7c71f58f9ec9e5ac6dd152f4c830408f5c02b77652d634cc
- 2680d968821fdd4363c68b1a835a9bbd76d6a94fdc0ab6e1b1aaadc5ccd1ed8a
- 5561c84e1d5111fff0142ba4d397b29d6dc9e3702955567bd5b4986e8cf4f2ef
- 7eb13948061d8ec98323fdac424955753f339c145af04a3f86100437dff60257
- fe21a137b6fb1881db1c5c01f372126f6b165c6d3b98421e6862255f456cbfd6
- 22a1b86820ef585c45bce36d822872354bc0dd183c5516f89da28e0666d3901b
- 34c306eadb436cd9f22f306f4f1d4ea4f167923e8affa2d2797d6c3de6da46ea
- 17730e5cc2a84c4680f692008f3805ce4e4edeb2008e2e6a4fb86b9dde06fe23"
+disable_parallel_build=yes
 
 build_options="docs"
 desc_option_docs="Build documentation"
 
+alternatives="jdk:/usr/lib/jvm/default-jdk:/${_jdk_home}"
+provides="java-environment-${version}_1"
+
 # no hotspot JIT for arm32 and ppc32
 case "$XBPS_TARGET_MACHINE" in
 	ppc64*) ;;
@@ -81,8 +67,6 @@ else
 	build_options_default+=" docs"
 fi
 
-provides="java-environment-${version}_1"
-
 if [ ! "$CROSS_BUILD" ]; then
 	hostmakedepends+=" openjdk7-bootstrap"
 	configure_args+=" --with-boot-jdk=/usr/lib/jvm/java-1.7-openjdk"
@@ -94,57 +78,11 @@ fi
 # enabling ccache segfaults gcc
 export CCACHE_DISABLE=1
 
-alternatives="
- jdk:/usr/bin/appletviewer:/${_jdk_home}/bin/appletviewer
- jdk:/usr/bin/extcheck:/${_jdk_home}/bin/extcheck
- jdk:/usr/bin/idlj:/${_jdk_home}/bin/idlj
- jdk:/usr/bin/jar:/${_jdk_home}/bin/jar
- jdk:/usr/bin/jarsigner:/${_jdk_home}/bin/jarsigner
- jdk:/usr/bin/java:/${_jdk_home}/bin/java
- jdk:/usr/bin/java-rmi.cgi:/${_jdk_home}/bin/java-rmi.cgi
- jdk:/usr/bin/javac:/${_jdk_home}/bin/javac
- jdk:/usr/bin/javadoc:/${_jdk_home}/bin/javadoc
- jdk:/usr/bin/javah:/${_jdk_home}/bin/javah
- jdk:/usr/bin/javap:/${_jdk_home}/bin/javap
- jdk:/usr/bin/jcmd:/${_jdk_home}/bin/jcmd
- jdk:/usr/bin/jconsole:/${_jdk_home}/bin/jconsole
- jdk:/usr/bin/jdb:/${_jdk_home}/bin/jdb
- jdk:/usr/bin/jdeps:/${_jdk_home}/bin/jdeps
- jdk:/usr/bin/jhat:/${_jdk_home}/bin/jhat
- jdk:/usr/bin/jinfo:/${_jdk_home}/bin/jinfo
- jdk:/usr/bin/jjs:/${_jdk_home}/bin/jjs
- jdk:/usr/bin/jmap:/${_jdk_home}/bin/jmap
- jdk:/usr/bin/jps:/${_jdk_home}/bin/jps
- jdk:/usr/bin/jrunscript:/${_jdk_home}/bin/jrunscript
- jdk:/usr/bin/jsadebugd:/${_jdk_home}/bin/jsadebugd
- jdk:/usr/bin/jstack:/${_jdk_home}/bin/jstack
- jdk:/usr/bin/jstat:/${_jdk_home}/bin/jstat
- jdk:/usr/bin/jstatd:/${_jdk_home}/bin/jstatd
- jdk:/usr/bin/keytool:/${_jdk_home}/bin/keytool
- jdk:/usr/bin/native2ascii:/${_jdk_home}/bin/native2ascii
- jdk:/usr/bin/orbd:/${_jdk_home}/bin/orbd
- jdk:/usr/bin/pack200:/${_jdk_home}/bin/pack200
- jdk:/usr/bin/policytool:/${_jdk_home}/bin/policytool
- jdk:/usr/bin/rmic:/${_jdk_home}/bin/rmic
- jdk:/usr/bin/rmid:/${_jdk_home}/bin/rmid
- jdk:/usr/bin/rmiregistry:/${_jdk_home}/bin/rmiregistry
- jdk:/usr/bin/schemagen:/${_jdk_home}/bin/schemagen
- jdk:/usr/bin/serialver:/${_jdk_home}/bin/serialver
- jdk:/usr/bin/servertool:/${_jdk_home}/bin/servertool
- jdk:/usr/bin/tnameserv:/${_jdk_home}/bin/tnameserv
- jdk:/usr/bin/unpack200:/${_jdk_home}/bin/unpack200
- jdk:/usr/bin/wsgen:/${_jdk_home}/bin/wsgen
- jdk:/usr/bin/wsimport:/${_jdk_home}/bin/wsimport
- jdk:/usr/bin/xjc:/${_jdk_home}/bin/xjc
-"
-
 post_extract() {
-	mv jdk8u*/* .
 	chmod +x configure
-	for subrepo in corba hotspot jdk jaxws jaxp langtools nashorn; do
-		mv ${subrepo}-${_repo_ver} ${subrepo}
-	done
+}
 
+post_patch() {
 	# gcc complains about the signed shift left
 	vsed -i jdk/src/share/native/com/sun/java/util/jar/pack/constants.h \
 		-e's;(-1)<<13;~0u<<13;g'
@@ -152,20 +90,22 @@ post_extract() {
 	# wrong "return false;" instead of "return null;"
 	vsed -i jdk/src/share/native/com/sun/java/util/jar/pack/jni.cpp \
 		-e"295s;false;null;"
-}
 
-post_patch() {
-	[ "$XBPS_TARGET_LIBC" != "musl" ] && return 0
+	# pretend we're a git checkout
+	echo "${_commit}" > .gittip
+	mkdir .git
 
-	for f in ${FILESDIR}/musl_*.patch; do
-		echo "Applying $f"
-		patch -sNp1 -i "$f"
-	done
+	if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+		for f in "${FILESDIR}"/musl_*.patch; do
+			echo "Applying $f"
+			patch -sNp1 -i "$f"
+		done
 
-	# add cross prefix for thread_db.h check, fix cross from glibc to musl
-	sed -i "s,/usr/include/thread_db.h,${XBPS_CROSS_BASE}/usr/include/thread_db.h," \
-	 hotspot/make/linux/makefiles/defs.make hotspot/make/linux/makefiles/sa.make \
-	 hotspot/make/linux/makefiles/saproc.make
+		# add cross prefix for thread_db.h check, fix cross from glibc to musl
+		sed -i "s,/usr/include/thread_db.h,${XBPS_CROSS_BASE}/usr/include/thread_db.h," \
+		 hotspot/make/linux/makefiles/defs.make hotspot/make/linux/makefiles/sa.make \
+		 hotspot/make/linux/makefiles/saproc.make
+	fi
 }
 
 do_configure() {
@@ -200,11 +140,6 @@ pre_build() {
 	unset CFLAGS CXXFLAGS LDFLAGS
 }
 
-do_build() {
-	# do not set disable_parallel_build in order to be able to read makejobs
-	make -j1 ${make_build_args} ${make_build_target}
-}
-
 post_install() {
 	# we manage this ourselves
 	rm -rf ${DESTDIR}/usr/lib/bin
@@ -213,6 +148,11 @@ post_install() {
 	mv ${DESTDIR}/usr/lib/jvm/openjdk-1.8.0_${_jdk_update} \
 	   ${DESTDIR}/${_jdk_home}
 
+	# don't duplicate binaries already in jre/bin
+	for bin in "${DESTDIR}/${_jdk_home}/jre/bin"/*; do
+		ln -srf "${bin}" "${bin/jre/}"
+	done
+
 	vmkdir ${_jdk_home}/lib/security
 	make-ca -g -f --destdir "${PWD}/ca" -k "${DESTDIR}/${_jdk_home}/bin/keytool"
 	mv ./ca/etc/pki/tls/java/cacerts ${DESTDIR}/${_jdk_home}/lib/security/
@@ -228,23 +168,15 @@ openjdk8-jre_package() {
 	shlib_provides="libawt.so libawt_xawt.so libjava.so libjli.so libjvm.so libjawt.so"
 	short_desc+=" - runtime components"
 	provides="java-runtime-${version}_1"
-	depends="xbps-triggers>=0.122_1"
-	triggers="openjdk-profile"
-	alternatives="
-	 java:/usr/bin/java:/${_jdk_home}/jre/bin/java
-	 java:/usr/bin/jjs:/${_jdk_home}/jre/bin/jjs
-	 java:/usr/bin/keytool:/${_jdk_home}/jre/bin/keytool
-	 java:/usr/bin/orbd:/${_jdk_home}/jre/bin/orbd
-	 java:/usr/bin/pack200:/${_jdk_home}/jre/bin/pack200
-	 java:/usr/bin/policytool:/${_jdk_home}/jre/bin/policytool
-	 java:/usr/bin/rmid:/${_jdk_home}/jre/bin/rmid
-	 java:/usr/bin/rmiregistry:/${_jdk_home}/jre/bin/rmiregistry
-	 java:/usr/bin/servertool:/${_jdk_home}/jre/bin/servertool
-	 java:/usr/bin/tnameserv:/${_jdk_home}/jre/bin/tnameserv
-	 java:/usr/bin/unpack200:/${_jdk_home}/jre/bin/unpack200
-	"
+	depends="openjdk-common"
+	alternatives="java:/usr/lib/jvm/default-jre:/${_jdk_home}/jre"
 	pkg_install() {
-		vmove ${_jdk_home}/jre
+		vmove "${_jdk_home}"/jre
+		for bin in "${PKGDESTDIR}/${_jdk_home}/jre/bin"/*; do
+			bin="$(basename "$bin")"
+			vmove "${_jdk_home}/man/man1/${bin}.1"
+			vmove "${_jdk_home}/man/ja_JP.UTF-8/man1/${bin}.1"
+		done
 	}
 }
 
@@ -263,12 +195,13 @@ openjdk8-doc_package() {
 	noverifyrdeps=yes
 	noshlibprovides=yes
 	short_desc+=" - documentation"
+	if [ -z "$build_option_docs" ]; then
+		build_style=meta
+	fi
 	pkg_install() {
-		cd ${wrksrc}
 		if [ "$build_option_docs" ]; then
 			vmkdir usr/share/doc/openjdk8
 			cp -a build/linux-*/docs/* ${PKGDESTDIR}/usr/share/doc/openjdk8
 		fi
-		vmove ${_jdk_home}/man/man1
 	}
 }

From fadf517717d77037fed7a1d8245098a8b219ec2c Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Thu, 21 Dec 2023 17:41:58 -0500
Subject: [PATCH 04/12] openjdk9-bootstrap: fix jdk8 path

---
 srcpkgs/openjdk9-bootstrap/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/openjdk9-bootstrap/template b/srcpkgs/openjdk9-bootstrap/template
index c50cc4adc7e18..2027d02781155 100644
--- a/srcpkgs/openjdk9-bootstrap/template
+++ b/srcpkgs/openjdk9-bootstrap/template
@@ -21,7 +21,7 @@ configure_args="
  --with-debug-level=release
  --with-version-pre=
  --with-version-build=${version#*p}
- --with-boot-jdk=/usr/lib/jvm/java-1.8-openjdk"
+ --with-boot-jdk=/usr/lib/jvm/openjdk8"
 make_build_args="images"
 hostmakedepends="pkg-config automake autoconf cpio tar unzip zip ca-certificates
  zlib-devel which openjdk8 make"

From 7caa5faa2ad698c19955c8a1206e574729ed236f Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Thu, 21 Dec 2023 17:40:49 -0500
Subject: [PATCH 05/12] openjdk11-bin: remove package

this package has been useless since 106a275ecd81e132cb80cc21c0ec96a336d16614
make it a transitional package on openjdk11
---
 srcpkgs/openjdk11-bin          |  1 +
 srcpkgs/openjdk11-bin/template | 70 ----------------------------------
 srcpkgs/openjdk11/template     |  9 ++++-
 3 files changed, 9 insertions(+), 71 deletions(-)
 create mode 120000 srcpkgs/openjdk11-bin
 delete mode 100644 srcpkgs/openjdk11-bin/template

diff --git a/srcpkgs/openjdk11-bin b/srcpkgs/openjdk11-bin
new file mode 120000
index 0000000000000..8213494c49ed5
--- /dev/null
+++ b/srcpkgs/openjdk11-bin
@@ -0,0 +1 @@
+openjdk11
\ No newline at end of file
diff --git a/srcpkgs/openjdk11-bin/template b/srcpkgs/openjdk11-bin/template
deleted file mode 100644
index 6dfbbb49fd45a..0000000000000
--- a/srcpkgs/openjdk11-bin/template
+++ /dev/null
@@ -1,70 +0,0 @@
-# Template file for 'openjdk11-bin'
-pkgname=openjdk11-bin
-version=11+28
-revision=2
-archs="x86_64"
-short_desc="Official Reference Implementation for Java SE 11"
-maintainer="Kyle Nusbaum <knusbaum+void@sdf.org>"
-license="GPL-2.0-only WITH Classpath-exception-2.0"
-homepage="https://jdk.java.net/java-se-ri/11"
-distfiles="https://download.java.net/openjdk/jdk11/ri/openjdk-${version}_linux-x64_bin.tar.gz"
-checksum=3784cfc4670f0d4c5482604c7c513beb1a92b005f569df9bf100e8bef6610f2e
-nopie=true
-
-alternatives="
- java:/usr/bin/java:/usr/lib/jvm/openjdk11-bin/bin/java
- java:/usr/bin/javaws:/usr/lib/jvm/openjdk11-bin/bin/javaws
- java:/usr/bin/jcontrol:/usr/lib/jvm/openjdk11-bin/bin/jcontrol
- java:/usr/bin/jjs:/usr/lib/jvm/openjdk11-bin/bin/jjs
- java:/usr/bin/keytool:/usr/lib/jvm/openjdk11-bin/bin/keytool
- java:/usr/bin/orbd:/usr/lib/jvm/openjdk11-bin/bin/orbd
- java:/usr/bin/pack200:/usr/lib/jvm/openjdk11-bin/bin/pack200
- java:/usr/bin/policytool:/usr/lib/jvm/openjdk11-bin/bin/policytool
- java:/usr/bin/rmid:/usr/lib/jvm/openjdk11-bin/bin/rmid
- java:/usr/bin/rmiregistry:/usr/lib/jvm/openjdk11-bin/bin/rmiregistry
- java:/usr/bin/servertool:/usr/lib/jvm/openjdk11-bin/bin/servertool
- java:/usr/bin/tnameserv:/usr/lib/jvm/openjdk11-bin/bin/tnameserv
- java:/usr/bin/unpack200:/usr/lib/jvm/openjdk11-bin/bin/unpack200
-
- jdk:/usr/bin/ControlPanel:/usr/lib/jvm/openjdk11-bin/bin/ControlPanel
- jdk:/usr/bin/appletviewer:/usr/lib/jvm/openjdk11-bin/bin/appletviewer
- jdk:/usr/bin/extcheck:/usr/lib/jvm/openjdk11-bin/bin/extcheck
- jdk:/usr/bin/idlj:/usr/lib/jvm/openjdk11-bin/bin/idlj
- jdk:/usr/bin/jar:/usr/lib/jvm/openjdk11-bin/bin/jar
- jdk:/usr/bin/jarsigner:/usr/lib/jvm/openjdk11-bin/bin/jarsigner
- jdk:/usr/bin/java-rmi.cgi:/usr/lib/jvm/openjdk11-bin/bin/java-rmi.cgi
- jdk:/usr/bin/javac:/usr/lib/jvm/openjdk11-bin/bin/javac
- jdk:/usr/bin/javadoc:/usr/lib/jvm/openjdk11-bin/bin/javadoc
- jdk:/usr/bin/javafxpackager:/usr/lib/jvm/openjdk11-bin/bin/javafxpackager
- jdk:/usr/bin/javah:/usr/lib/jvm/openjdk11-bin/bin/javah
- jdk:/usr/bin/javap:/usr/lib/jvm/openjdk11-bin/bin/javap
- jdk:/usr/bin/javapackager:/usr/lib/jvm/openjdk11-bin/bin/javapackager
- jdk:/usr/bin/jcmd:/usr/lib/jvm/openjdk11-bin/bin/jcmd
- jdk:/usr/bin/jconsole:/usr/lib/jvm/openjdk11-bin/bin/jconsole
- jdk:/usr/bin/jdb:/usr/lib/jvm/openjdk11-bin/bin/jdb
- jdk:/usr/bin/jdeps:/usr/lib/jvm/openjdk11-bin/bin/jdeps
- jdk:/usr/bin/jhat:/usr/lib/jvm/openjdk11-bin/bin/jhat
- jdk:/usr/bin/jinfo:/usr/lib/jvm/openjdk11-bin/bin/jinfo
- jdk:/usr/bin/jmap:/usr/lib/jvm/openjdk11-bin/bin/jmap
- jdk:/usr/bin/jmc:/usr/lib/jvm/openjdk11-bin/bin/jmc
- jdk:/usr/bin/jmc.ini:/usr/lib/jvm/openjdk11-bin/bin/jmc.ini
- jdk:/usr/bin/jps:/usr/lib/jvm/openjdk11-bin/bin/jps
- jdk:/usr/bin/jrunscript:/usr/lib/jvm/openjdk11-bin/bin/jrunscript
- jdk:/usr/bin/jsadebugd:/usr/lib/jvm/openjdk11-bin/bin/jsadebugd
- jdk:/usr/bin/jstack:/usr/lib/jvm/openjdk11-bin/bin/jstack
- jdk:/usr/bin/jstat:/usr/lib/jvm/openjdk11-bin/bin/jstat
- jdk:/usr/bin/jstatd:/usr/lib/jvm/openjdk11-bin/bin/jstatd
- jdk:/usr/bin/jvisualvm:/usr/lib/jvm/openjdk11-bin/bin/jvisualvm
- jdk:/usr/bin/native2ascii:/usr/lib/jvm/openjdk11-bin/bin/native2ascii
- jdk:/usr/bin/rmic:/usr/lib/jvm/openjdk11-bin/bin/rmic
- jdk:/usr/bin/schemagen:/usr/lib/jvm/openjdk11-bin/bin/schemagen
- jdk:/usr/bin/serialver:/usr/lib/jvm/openjdk11-bin/bin/serialver
- jdk:/usr/bin/wsgen:/usr/lib/jvm/openjdk11-bin/bin/wsgen
- jdk:/usr/bin/wsimport:/usr/lib/jvm/openjdk11-bin/bin/wsimport
- jdk:/usr/bin/xjc:/usr/lib/jvm/openjdk11-bin/bin/xjc
-"
-
-do_install() {
-	vmkdir /usr/lib/jvm/openjdk11-bin
-	cp -R ./* ${DESTDIR}/usr/lib/jvm/openjdk11-bin
-}
diff --git a/srcpkgs/openjdk11/template b/srcpkgs/openjdk11/template
index b5dd94241a0c8..783e7c28d72b5 100644
--- a/srcpkgs/openjdk11/template
+++ b/srcpkgs/openjdk11/template
@@ -156,7 +156,7 @@ do_install() {
 	vlicense LICENSE
 }
 
-subpackages="openjdk11-src openjdk11-jre openjdk11-doc openjdk11-jmods openjdk11-static-libs"
+subpackages="openjdk11-src openjdk11-jre openjdk11-doc openjdk11-jmods openjdk11-static-libs openjdk11-bin"
 
 openjdk11-jre_package() {
 	shlib_provides="libawt.so libawt_xawt.so libjava.so libjli.so libjvm.so libjawt.so"
@@ -227,3 +227,10 @@ openjdk11-jmods_package() {
 		vmove $_jdk_home/jmods
 	}
 }
+
+openjdk11-bin_package() {
+	reverts="11+28_1 11+28_2"
+	short_desc+=" (transitional dummy package)"
+	depends="${sourcepkg}>=${version}_${revision}"
+	build_style=meta
+}

From fda552537b92f55702e3ce55effed81453333bc9 Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Thu, 21 Dec 2023 17:42:46 -0500
Subject: [PATCH 06/12] openjdk11: update to 11.0.22+6.

- fix manpages
- fix alternatives
---
 srcpkgs/openjdk11/template | 63 ++++++++------------------------------
 1 file changed, 12 insertions(+), 51 deletions(-)

diff --git a/srcpkgs/openjdk11/template b/srcpkgs/openjdk11/template
index 783e7c28d72b5..64f43424204cc 100644
--- a/srcpkgs/openjdk11/template
+++ b/srcpkgs/openjdk11/template
@@ -1,6 +1,6 @@
 # Template file for 'openjdk11'
 pkgname=openjdk11
-version=11.0.20+8
+version=11.0.22+6
 revision=1
 _java_ver="${version%%.*}"
 _jdk_home="usr/lib/jvm/openjdk${_java_ver}"
@@ -38,7 +38,8 @@ maintainer="Kyle Nusbaum <knusbaum+void@sdf.org>"
 license="GPL-2.0-only WITH Classpath-exception-2.0"
 homepage="http://openjdk.java.net/"
 distfiles="https://github.com/openjdk/jdk${_java_ver}u/archive/jdk-${version}.tar.gz"
-checksum=b2a37ef209ae7eaf8f34182b7c9aa3252af20a214d02970f96ce62242c805479
+checksum=8bae7c5e608de84aa32010365514bb59cd0d8ba709f6730cc473e159c6bfb918
+alternatives="jdk:/usr/lib/jvm/default-jdk:/${_jdk_home}"
 provides="java-environment-${version}_1"
 
 # Build is still parallel, but don't use -jN.
@@ -73,41 +74,6 @@ else
 	configure_args+=" --with-boot-jdk=/${_jdk_home}"
 fi
 
-alternatives="
- jdk:/usr/bin/jaotc:/${_jdk_home}/bin/jaotc
- jdk:/usr/bin/jar:/${_jdk_home}/bin/jar
- jdk:/usr/bin/jarsigner:/${_jdk_home}/bin/jarsigner
- jdk:/usr/bin/java:/${_jdk_home}/bin/java
- jdk:/usr/bin/javac:/${_jdk_home}/bin/javac
- jdk:/usr/bin/javadoc:/${_jdk_home}/bin/javadoc
- jdk:/usr/bin/javap:/${_jdk_home}/bin/javap
- jdk:/usr/bin/jcmd:/${_jdk_home}/bin/jcmd
- jdk:/usr/bin/jconsole:/${_jdk_home}/bin/jconsole
- jdk:/usr/bin/jdb:/${_jdk_home}/bin/jdb
- jdk:/usr/bin/jdeprscan:/${_jdk_home}/bin/jdeprscan
- jdk:/usr/bin/jdeps:/${_jdk_home}/bin/jdeps
- jdk:/usr/bin/jhsdb:/${_jdk_home}/bin/jhsdb
- jdk:/usr/bin/jimage:/${_jdk_home}/bin/jimage
- jdk:/usr/bin/jinfo:/${_jdk_home}/bin/jinfo
- jdk:/usr/bin/jjs:/${_jdk_home}/bin/jjs
- jdk:/usr/bin/jlink:/${_jdk_home}/bin/jlink
- jdk:/usr/bin/jmap:/${_jdk_home}/bin/jmap
- jdk:/usr/bin/jmod:/${_jdk_home}/bin/jmod
- jdk:/usr/bin/jps:/${_jdk_home}/bin/jps
- jdk:/usr/bin/jrunscript:/${_jdk_home}/bin/jrunscript
- jdk:/usr/bin/jshell:/${_jdk_home}/bin/jshell
- jdk:/usr/bin/jstack:/${_jdk_home}/bin/jstack
- jdk:/usr/bin/jstat:/${_jdk_home}/bin/jstat
- jdk:/usr/bin/jstatd:/${_jdk_home}/bin/jstatd
- jdk:/usr/bin/keytool:/${_jdk_home}/bin/keytool
- jdk:/usr/bin/pack200:/${_jdk_home}/bin/pack200
- jdk:/usr/bin/rmic:/${_jdk_home}/bin/rmic
- jdk:/usr/bin/rmid:/${_jdk_home}/bin/rmid
- jdk:/usr/bin/rmiregistry:/${_jdk_home}/bin/rmiregistry
- jdk:/usr/bin/serialver:/${_jdk_home}/bin/serialver
- jdk:/usr/bin/unpack200:/${_jdk_home}/bin/unpack200
-"
-
 post_extract() {
 	chmod +x configure
 	if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
@@ -162,20 +128,13 @@ openjdk11-jre_package() {
 	shlib_provides="libawt.so libawt_xawt.so libjava.so libjli.so libjvm.so libjawt.so"
 	short_desc+=" - runtime components"
 	provides="java-runtime-${version}_1"
-	depends="fontconfig xbps-triggers>=0.122_1"
-	triggers="openjdk-profile"
-	alternatives="
-	 java:/usr/bin/java:/${_jdk_home}/bin/java
-	 java:/usr/bin/jjs:/${_jdk_home}/bin/jjs
-	 java:/usr/bin/keytool:/${_jdk_home}/bin/keytool
-	 java:/usr/bin/pack200:/${_jdk_home}/bin/pack200
-	 java:/usr/bin/rmid:/${_jdk_home}/bin/rmid
-	 java:/usr/bin/rmiregistry:/${_jdk_home}/bin/rmiregistry
-	 java:/usr/bin/unpack200:/${_jdk_home}/bin/unpack200
-	"
+	depends="fontconfig openjdk-common"
+	alternatives="java:/usr/lib/jvm/default-jre:/${_jdk_home}"
 	pkg_install() {
-		for bf in java jjs keytool pack200 rmid rmiregistry unpack200; do
-			vmove $_jdk_home/bin/$bf
+		for bin in java jjs keytool pack200 rmid rmiregistry unpack200; do
+			vmove "${_jdk_home}/bin/${bin}"
+			vmove "${_jdk_home}/man/man1/${bin}.1"
+			vmove "${_jdk_home}/man/ja_JP.UTF-8/man1/${bin}.1"
 		done
 
 		for f in lib legal conf release; do
@@ -192,13 +151,15 @@ openjdk11-doc_package() {
 	noverifyrdeps=yes
 	noshlibprovides=yes
 	short_desc+=" - documentation"
+	if [ -z "$build_option_docs" ]; then
+		build_style=meta
+	fi
 	pkg_install() {
 		cd ${wrksrc}
 		if [ "$build_option_docs" ]; then
 			vmkdir usr/share/doc/openjdk11
 			cp -a build/linux-*/images/docs/* $PKGDESTDIR/usr/share/doc/openjdk11
 		fi
-		vmove $_jdk_home/man/man1
 	}
 }
 

From dceac46f4d5686e7be45ddf2b9b3f047654b16a8 Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Thu, 21 Dec 2023 17:44:04 -0500
Subject: [PATCH 07/12] openjdk17: update to 17.0.10+6.

- fix manpages
- fix alternatives
---
 srcpkgs/openjdk17/template | 55 ++++++++------------------------------
 1 file changed, 11 insertions(+), 44 deletions(-)

diff --git a/srcpkgs/openjdk17/template b/srcpkgs/openjdk17/template
index bb72701f360e6..22fb16fbf9ec1 100644
--- a/srcpkgs/openjdk17/template
+++ b/srcpkgs/openjdk17/template
@@ -1,6 +1,6 @@
 # Template file for 'openjdk17'
 pkgname=openjdk17
-version=17.0.10+2
+version=17.0.10+6
 revision=1
 _gtest_ver=1.8.1
 _java_ver="${version%%.*}"
@@ -45,8 +45,9 @@ license="GPL-2.0-only WITH Classpath-exception-2.0"
 homepage="http://openjdk.java.net/"
 distfiles="https://github.com/openjdk/jdk${_java_ver}u/archive/jdk-${version}.tar.gz
  https://github.com/google/googletest/archive/refs/tags/release-${_gtest_ver}.tar.gz"
-checksum="dbe68a64c43c3e376abd9d03758a487ecfb9c7bf1fe71cf6c2ca113f909be1cb
+checksum="3d5ef3a18c4edfa6e2a16c74d9e771b09eed433006b1380df450aa88725c7238
  9bf1fe5182a604b4135edc1a425ae356c9ad15e9b23f9f12a02e80184c3a249c"
+alternatives="jdk:/usr/lib/jvm/default-jdk:/${_jdk_home}"
 provides="java-environment-${version}_1"
 patch_args="-Np1 --directory=$build_wrksrc"
 
@@ -83,37 +84,6 @@ else
 	configure_args+=" --with-boot-jdk=/usr/lib/jvm/openjdk17"
 fi
 
-alternatives="
- jdk:/usr/bin/jar:/${_jdk_home}/bin/jar
- jdk:/usr/bin/jarsigner:/${_jdk_home}/bin/jarsigner
- jdk:/usr/bin/java:/${_jdk_home}/bin/java
- jdk:/usr/bin/javac:/${_jdk_home}/bin/javac
- jdk:/usr/bin/javadoc:/${_jdk_home}/bin/javadoc
- jdk:/usr/bin/javap:/${_jdk_home}/bin/javap
- jdk:/usr/bin/jcmd:/${_jdk_home}/bin/jcmd
- jdk:/usr/bin/jconsole:/${_jdk_home}/bin/jconsole
- jdk:/usr/bin/jdb:/${_jdk_home}/bin/jdb
- jdk:/usr/bin/jdeprscan:/${_jdk_home}/bin/jdeprscan
- jdk:/usr/bin/jdeps:/${_jdk_home}/bin/jdeps
- jdk:/usr/bin/jfr:/${_jdk_home}/bin/jfr
- jdk:/usr/bin/jhsdb:/${_jdk_home}/bin/jhsdb
- jdk:/usr/bin/jimage:/${_jdk_home}/bin/jimage
- jdk:/usr/bin/jinfo:/${_jdk_home}/bin/jinfo
- jdk:/usr/bin/jlink:/${_jdk_home}/bin/jlink
- jdk:/usr/bin/jmap:/${_jdk_home}/bin/jmap
- jdk:/usr/bin/jmod:/${_jdk_home}/bin/jmod
- jdk:/usr/bin/jpackage:/${_jdk_home}/bin/jpackage
- jdk:/usr/bin/jps:/${_jdk_home}/bin/jps
- jdk:/usr/bin/jrunscript:/${_jdk_home}/bin/jrunscript
- jdk:/usr/bin/jshell:/${_jdk_home}/bin/jshell
- jdk:/usr/bin/jstack:/${_jdk_home}/bin/jstack
- jdk:/usr/bin/jstat:/${_jdk_home}/bin/jstat
- jdk:/usr/bin/jstatd:/${_jdk_home}/bin/jstatd
- jdk:/usr/bin/keytool:/${_jdk_home}/bin/keytool
- jdk:/usr/bin/rmiregistry:/${_jdk_home}/bin/rmiregistry
- jdk:/usr/bin/serialver:/${_jdk_home}/bin/serialver
-"
-
 post_extract() {
 	chmod +x $build_wrksrc/configure
 	if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
@@ -173,17 +143,12 @@ openjdk17-jre_package() {
 	shlib_provides="libawt.so libawt_xawt.so libjava.so libjli.so libjvm.so libjawt.so"
 	short_desc+=" - runtime components"
 	provides="java-runtime-${version}_1"
-	depends="xbps-triggers>=0.122_1"
-	triggers="openjdk-profile"
-	alternatives="
-	 java:/usr/bin/java:/${_jdk_home}/bin/java
-	 java:/usr/bin/jfr:/${_jdk_home}/bin/jfr
-	 java:/usr/bin/keytool:/${_jdk_home}/bin/keytool
-	 java:/usr/bin/rmiregistry:/${_jdk_home}/bin/rmiregistry
-	"
+	depends="openjdk-common"
+	alternatives="java:/usr/lib/jvm/default-jre:/${_jdk_home}"
 	pkg_install() {
-		for bf in java jfr keytool rmiregistry; do
-			vmove $_jdk_home/bin/$bf
+		for bin in java jfr keytool rmiregistry; do
+			vmove "${_jdk_home}/bin/${bin}"
+			vmove "${_jdk_home}/man/man1/${bin}.1"
 		done
 
 		for f in lib legal conf release; do
@@ -200,13 +165,15 @@ openjdk17-doc_package() {
 	noverifyrdeps=yes
 	noshlibprovides=yes
 	short_desc+=" - documentation"
+	if [ -z "$build_option_docs" ]; then
+		build_style=meta
+	fi
 	pkg_install() {
 		if [ "$build_option_docs" ]; then
 			local _docdir=usr/share/doc/openjdk$_java_ver
 			vmkdir $_docdir
 			cp -a $wrksrc/$build_wrksrc/build/linux-*/images/docs/* ${PKGDESTDIR}/$_docdir
 		fi
-		vmove $_jdk_home/man/man1
 	}
 }
 

From d6a86c808663f5cadf31416be02198284ddd60cb Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Fri, 22 Dec 2023 19:26:22 -0500
Subject: [PATCH 08/12] *: fix name of jdk profile script in templates

---
 srcpkgs/apache-fop/template      | 2 +-
 srcpkgs/apache-maven/template    | 2 +-
 srcpkgs/arduino/template         | 2 +-
 srcpkgs/bibletime/template       | 2 +-
 srcpkgs/davmail/template         | 2 +-
 srcpkgs/freeplane/template       | 2 +-
 srcpkgs/freerouting/template     | 2 +-
 srcpkgs/java-commons-io/template | 2 +-
 srcpkgs/jedit/template           | 2 +-
 srcpkgs/kodi/template            | 2 +-
 srcpkgs/lightzone/template       | 2 +-
 srcpkgs/plantuml/template        | 2 +-
 srcpkgs/turbovnc/template        | 2 +-
 13 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/srcpkgs/apache-fop/template b/srcpkgs/apache-fop/template
index 1dd6dd9854281..fe6a130c45c20 100644
--- a/srcpkgs/apache-fop/template
+++ b/srcpkgs/apache-fop/template
@@ -17,7 +17,7 @@ conf_files="/etc/fop.conf"
 
 do_build() {
 	. /etc/profile.d/apache-ant.sh
-	. /etc/profile.d/openjdk.sh
+	. /etc/profile.d/jdk.sh
 	ant package
 }
 do_install() {
diff --git a/srcpkgs/apache-maven/template b/srcpkgs/apache-maven/template
index 4b0995e11ba7d..27091a616c2e1 100644
--- a/srcpkgs/apache-maven/template
+++ b/srcpkgs/apache-maven/template
@@ -15,7 +15,7 @@ checksum="5f499a0c9263be556b03dd64002a1f99892eb50ee253aab81f1f338f3bc7abed
 replaces="apache-maven-bin>=0"
 
 do_build() {
-	source /etc/profile.d/openjdk.sh
+	source /etc/profile.d/jdk.sh
 	./bin/mvn package -DskipTests -Drat.skip=true -Dmaven.repo.local=repo -DdistributionTargetDir=${DESTDIR}/usr/lib/${pkgname}
 }
 
diff --git a/srcpkgs/arduino/template b/srcpkgs/arduino/template
index ad169d3faf3a7..b1cfcac0b2a20 100644
--- a/srcpkgs/arduino/template
+++ b/srcpkgs/arduino/template
@@ -26,7 +26,7 @@ fi
 
 do_build() {
 	. /etc/profile.d/apache-ant.sh
-	. /etc/profile.d/openjdk.sh
+	. /etc/profile.d/jdk.sh
 
 	export CFLAGS+=" -I${XBPS_CROSS_BASE}/usr/lib/jvm/java-1.8-openjdk/include/linux"
 	export CFLAGS+=" -I${XBPS_CROSS_BASE}/usr/lib/jvm/java-1.8-openjdk/include"
diff --git a/srcpkgs/bibletime/template b/srcpkgs/bibletime/template
index d8be23d33be61..fcff5e72752ba 100644
--- a/srcpkgs/bibletime/template
+++ b/srcpkgs/bibletime/template
@@ -20,7 +20,7 @@ distfiles="https://github.com/bibletime/bibletime/releases/download/v${version}/
 checksum=d6beef62ad44b255e3dc4c5e89214bf01a0e85c9136073b0be12fca3d2b22622
 
 pre_build() {
-	. /etc/profile.d/openjdk.sh
+	. /etc/profile.d/jdk.sh
 	if [ "$XBPS_WORDSIZE" = "32" ]; then
 		export _JAVA_OPTIONS="-Xmx1024m"
 	fi
diff --git a/srcpkgs/davmail/template b/srcpkgs/davmail/template
index 1652c266ecfe8..9bcc6dda9d1f2 100644
--- a/srcpkgs/davmail/template
+++ b/srcpkgs/davmail/template
@@ -14,7 +14,7 @@ distfiles="${SOURCEFORGE_SITE}/davmail/davmail-src-${version}-${_commit}.tgz"
 checksum=08e7103d14e9f05ec269caceef7585dcf8be202a35c471fa6fc12729cf99ef2f
 
 do_build() {
-	. /etc/profile.d/openjdk.sh
+	. /etc/profile.d/jdk.sh
 	. /etc/profile.d/apache-ant.sh
 
 	ant jar
diff --git a/srcpkgs/freeplane/template b/srcpkgs/freeplane/template
index 50fb28292152a..e98b19dc01e6a 100644
--- a/srcpkgs/freeplane/template
+++ b/srcpkgs/freeplane/template
@@ -22,7 +22,7 @@ esac
 
 do_build() {
 	. /etc/profile.d/apache-ant.sh
-	. /etc/profile.d/openjdk.sh
+	. /etc/profile.d/jdk.sh
 
 	gradle format_translation binZip -x test
 }
diff --git a/srcpkgs/freerouting/template b/srcpkgs/freerouting/template
index e128119f75cd1..414053ed6c620 100644
--- a/srcpkgs/freerouting/template
+++ b/srcpkgs/freerouting/template
@@ -12,7 +12,7 @@ distfiles="https://github.com/freerouting/${pkgname}/archive/v${version}.tar.gz"
 checksum=36742a91e492956e3adc5d75e542a40f3e03d15d69d15717a9d39c0585faac44
 
 do_build() {
-	. /etc/profile.d/openjdk.sh
+	. /etc/profile.d/jdk.sh
 	gradle assemble
 }
 
diff --git a/srcpkgs/java-commons-io/template b/srcpkgs/java-commons-io/template
index c07dcb187f9fe..945622a6004a4 100644
--- a/srcpkgs/java-commons-io/template
+++ b/srcpkgs/java-commons-io/template
@@ -18,7 +18,7 @@ case "$XBPS_MACHINE" in
 esac
 
 do_build() {
-	source /etc/profile.d/openjdk.sh
+	source /etc/profile.d/jdk.sh
 	mvn package -Dmaven.test.skip=true
 }
 
diff --git a/srcpkgs/jedit/template b/srcpkgs/jedit/template
index 094feb547d7a8..1f014fb04c8d0 100644
--- a/srcpkgs/jedit/template
+++ b/srcpkgs/jedit/template
@@ -18,7 +18,7 @@ post_patch() {
 
 do_build() {
 	. /etc/profile.d/apache-ant.sh
-	. /etc/profile.d/openjdk.sh
+	. /etc/profile.d/jdk.sh
 
 	ant -propertyfile ${FILESDIR}/build.properties build
 	ant -propertyfile ${FILESDIR}/build.properties docs-html
diff --git a/srcpkgs/kodi/template b/srcpkgs/kodi/template
index aa59324258a0d..d37a5918cd675 100644
--- a/srcpkgs/kodi/template
+++ b/srcpkgs/kodi/template
@@ -102,7 +102,7 @@ pre_configure() {
 		xargs sed -i  -e "s;-isystem;-I;g"
 	fi
 
-	. /etc/profile.d/openjdk.sh
+	. /etc/profile.d/jdk.sh
 
 	# Build tools needed to run on the host
 	if [ "$CROSS_BUILD" ]; then
diff --git a/srcpkgs/lightzone/template b/srcpkgs/lightzone/template
index b0c28a0c3a88a..7cfa27dd538ae 100644
--- a/srcpkgs/lightzone/template
+++ b/srcpkgs/lightzone/template
@@ -28,7 +28,7 @@ do_build() {
 	vsed -i lightcrafts/jnisrc/tiff/GNUmakefile \
 		-e "s;\./configure;& --host=${XBPS_MACHINE%-musl};"
 
-	. /etc/profile.d/openjdk.sh
+	. /etc/profile.d/jdk.sh
 	cd linux
 	TARGET=${XBPS_TARGET_MACHINE%-musl} ant jar
 }
diff --git a/srcpkgs/plantuml/template b/srcpkgs/plantuml/template
index 03318f4c07227..156db505a0484 100644
--- a/srcpkgs/plantuml/template
+++ b/srcpkgs/plantuml/template
@@ -14,7 +14,7 @@ distfiles="${SOURCEFORGE_SITE}/plantuml/plantuml-gplv2-${version}.tar.gz"
 checksum=c21bb155ecfc53f4f0a5924238069f0c979b0f426bfa44fd62ce73f2aa1b4339
 
 do_build() {
-	. /etc/profile.d/openjdk.sh
+	. /etc/profile.d/jdk.sh
 	. /etc/profile.d/apache-ant.sh
 	ant
 	mv ${pkgname}.jar ${pkgname}-${version}.jar
diff --git a/srcpkgs/turbovnc/template b/srcpkgs/turbovnc/template
index 287754ef9daa4..9dd794662b862 100644
--- a/srcpkgs/turbovnc/template
+++ b/srcpkgs/turbovnc/template
@@ -27,7 +27,7 @@ if [ "$CROSS_BUILD" ]; then
 fi
 
 pre_configure() {
-	. /etc/profile.d/openjdk.sh
+	. /etc/profile.d/jdk.sh
 }
 
 post_install() {

From 5d19f79087b15280459676a727223f0e2462ae5b Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Fri, 22 Dec 2023 00:44:06 -0500
Subject: [PATCH 09/12] New package: openjdk18-bootstrap-18.0.2.1+0

---
 .../patches/FixNullPtrCast.patch              | 104 +++++
 .../openjdk18-bootstrap/patches/cgroups.patch | 406 ++++++++++++++++++
 srcpkgs/openjdk18-bootstrap/template          | 101 +++++
 srcpkgs/openjdk18-bootstrap/update            |   4 +
 4 files changed, 615 insertions(+)
 create mode 100644 srcpkgs/openjdk18-bootstrap/patches/FixNullPtrCast.patch
 create mode 100644 srcpkgs/openjdk18-bootstrap/patches/cgroups.patch
 create mode 100644 srcpkgs/openjdk18-bootstrap/template
 create mode 100644 srcpkgs/openjdk18-bootstrap/update

diff --git a/srcpkgs/openjdk18-bootstrap/patches/FixNullPtrCast.patch b/srcpkgs/openjdk18-bootstrap/patches/FixNullPtrCast.patch
new file mode 100644
index 0000000000000..7fa335939e61d
--- /dev/null
+++ b/srcpkgs/openjdk18-bootstrap/patches/FixNullPtrCast.patch
@@ -0,0 +1,104 @@
+Subject: Fix cast errors with latest GCC (11.2)
+Upstream: No
+Author: Simon Frankenberger <simon-alpine@fraho.eu>
+
+This patch fixes multiple casting errors reported by GCC 11.2
+
+--- old/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp
++++ new/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp
+@@ -205,7 +205,7 @@
+ 
+   // Note: We don't need a keep-alive-barrier here. We already enqueue any loaded reference for SATB anyway,
+   // because it must be the previous value.
+-  res = load_reference_barrier(decorators, res, reinterpret_cast<T*>(NULL));
++  res = load_reference_barrier(decorators, res, static_cast<T*>(NULL));
+   satb_enqueue(res);
+   return res;
+ }
+@@ -216,7 +216,7 @@
+   oop previous = RawAccess<>::oop_atomic_xchg(addr, new_value);
+   // Note: We don't need a keep-alive-barrier here. We already enqueue any loaded reference for SATB anyway,
+   // because it must be the previous value.
+-  previous = load_reference_barrier<T>(decorators, previous, reinterpret_cast<T*>(NULL));
++  previous = load_reference_barrier<T>(decorators, previous, static_cast<T*>(NULL));
+   satb_enqueue(previous);
+   return previous;
+ }
+--- old/src/hotspot/share/oops/access.hpp
++++ new/src/hotspot/share/oops/access.hpp
+@@ -294,8 +294,8 @@
+   static inline void arraycopy(arrayOop src_obj, size_t src_offset_in_bytes,
+                                arrayOop dst_obj, size_t dst_offset_in_bytes,
+                                size_t length) {
+-    AccessT::arraycopy(src_obj, src_offset_in_bytes, reinterpret_cast<const T*>(NULL),
+-                       dst_obj, dst_offset_in_bytes, reinterpret_cast<T*>(NULL),
++    AccessT::arraycopy(src_obj, src_offset_in_bytes, static_cast<const T*>(NULL),
++                       dst_obj, dst_offset_in_bytes, static_cast<T*>(NULL),
+                        length);
+   }
+ 
+@@ -303,7 +303,7 @@
+   static inline void arraycopy_to_native(arrayOop src_obj, size_t src_offset_in_bytes,
+                                          T* dst,
+                                          size_t length) {
+-    AccessT::arraycopy(src_obj, src_offset_in_bytes, reinterpret_cast<const T*>(NULL),
++    AccessT::arraycopy(src_obj, src_offset_in_bytes, static_cast<const T*>(NULL),
+                        NULL, 0, dst,
+                        length);
+   }
+@@ -313,15 +313,15 @@
+                                            arrayOop dst_obj, size_t dst_offset_in_bytes,
+                                            size_t length) {
+     AccessT::arraycopy(NULL, 0, src,
+-                       dst_obj, dst_offset_in_bytes, reinterpret_cast<T*>(NULL),
++                       dst_obj, dst_offset_in_bytes, static_cast<T*>(NULL),
+                        length);
+   }
+ 
+   static inline bool oop_arraycopy(arrayOop src_obj, size_t src_offset_in_bytes,
+                                    arrayOop dst_obj, size_t dst_offset_in_bytes,
+                                    size_t length) {
+-    return AccessT::oop_arraycopy(src_obj, src_offset_in_bytes, reinterpret_cast<const HeapWord*>(NULL),
+-                                  dst_obj, dst_offset_in_bytes, reinterpret_cast<HeapWord*>(NULL),
++    return AccessT::oop_arraycopy(src_obj, src_offset_in_bytes, static_cast<const HeapWord*>(NULL),
++                                  dst_obj, dst_offset_in_bytes, static_cast<HeapWord*>(NULL),
+                                   length);
+   }
+ 
+--- old/src/hotspot/cpu/x86/interp_masm_x86.cpp
++++ new/src/hotspot/cpu/x86/interp_masm_x86.cpp
+@@ -1122,7 +1122,7 @@
+ 
+     bind(loop);
+     // check if current entry is used
+-    cmpptr(Address(rmon, BasicObjectLock::obj_offset_in_bytes()), (int32_t) NULL);
++    cmpptr(Address(rmon, BasicObjectLock::obj_offset_in_bytes()), 0);
+     jcc(Assembler::notEqual, exception);
+ 
+     addptr(rmon, entry_size); // otherwise advance to next entry
+--- old/src/hotspot/cpu/x86/interpreterRT_x86_64.cpp
++++ new/src/hotspot/cpu/x86/interpreterRT_x86_64.cpp
+@@ -443,10 +443,10 @@
+     _from -= Interpreter::stackElementSize;
+ 
+     if (_num_int_args < Argument::n_int_register_parameters_c-1) {
+-      *_int_args++ = (*from_addr == 0) ? NULL : (intptr_t)from_addr;
++      *_int_args++ = (*from_addr == 0) ? (intptr_t) 0 : (intptr_t) from_addr;
+       _num_int_args++;
+     } else {
+-      *_to++ = (*from_addr == 0) ? NULL : (intptr_t) from_addr;
++      *_to++ = (*from_addr == 0) ? (intptr_t) 0 : (intptr_t) from_addr;
+     }
+   }
+ 
+--- old/src/hotspot/cpu/aarch64/interpreterRT_aarch64.cpp
++++ new/src/hotspot/cpu/aarch64/interpreterRT_aarch64.cpp
+@@ -267,7 +267,7 @@
+ 
+   virtual void pass_object() {
+     intptr_t* addr = single_slot_addr();
+-    intptr_t value = *addr == 0 ? NULL : (intptr_t)addr;
++    intptr_t value = *addr == 0 ? (intptr_t) 0 : (intptr_t)addr;
+     if (pass_gpr(value) < 0) {
+       pass_stack<>(value);
+     }
diff --git a/srcpkgs/openjdk18-bootstrap/patches/cgroups.patch b/srcpkgs/openjdk18-bootstrap/patches/cgroups.patch
new file mode 100644
index 0000000000000..efeaa0871a03b
--- /dev/null
+++ b/srcpkgs/openjdk18-bootstrap/patches/cgroups.patch
@@ -0,0 +1,406 @@
+From 8f3bbe950fb5a3d9f6cae122209df01df0f342f0 Mon Sep 17 00:00:00 2001
+From: casparcwang <casparcwang@tencent.com>
+Date: Thu, 15 Sep 2022 08:47:05 +0000
+Subject: [PATCH] 8293472: Incorrect container resource limit detection if
+ manual cgroup fs mounts present
+
+Reviewed-by: sgehwolf, iklam
+---
+ .../os/linux/cgroupSubsystem_linux.cpp        | 69 +++++++++---------
+ .../os/linux/cgroupSubsystem_linux.hpp        |  5 ++
+ .../cgroup/CgroupSubsystemFactory.java        | 71 ++++++++++++++++---
+ .../containers/docker/DockerBasicTest.java    | 14 ++++
+ .../containers/docker/TestCPUAwareness.java   | 15 ++--
+ .../docker/TestMemoryAwareness.java           | 15 ++--
+ 6 files changed, 135 insertions(+), 54 deletions(-)
+
+diff --git a/src/hotspot/os/linux/cgroupSubsystem_linux.cpp b/src/hotspot/os/linux/cgroupSubsystem_linux.cpp
+index baa7a40a9146..1f3a6dfcaf6b 100644
+--- a/src/hotspot/os/linux/cgroupSubsystem_linux.cpp
++++ b/src/hotspot/os/linux/cgroupSubsystem_linux.cpp
+@@ -123,6 +123,32 @@ CgroupSubsystem* CgroupSubsystemFactory::create() {
+   return new CgroupV1Subsystem(cpuset, cpu, cpuacct, pids, memory);
+ }
+ 
++void CgroupSubsystemFactory::set_controller_paths(CgroupInfo* cg_infos,
++                                                  int controller,
++                                                  const char* name,
++                                                  char* mount_path,
++                                                  char* root_path) {
++  if (cg_infos[controller]._mount_path != NULL) {
++    // On some systems duplicate controllers get mounted in addition to
++    // the main cgroup controllers most likely under /sys/fs/cgroup. In that
++    // case pick the one under /sys/fs/cgroup and discard others.
++    if (strstr(cg_infos[controller]._mount_path, "/sys/fs/cgroup") != cg_infos[controller]._mount_path) {
++      log_debug(os, container)("Duplicate %s controllers detected. Picking %s, skipping %s.",
++                               name, mount_path, cg_infos[controller]._mount_path);
++      os::free(cg_infos[controller]._mount_path);
++      os::free(cg_infos[controller]._root_mount_path);
++      cg_infos[controller]._mount_path = os::strdup(mount_path);
++      cg_infos[controller]._root_mount_path = os::strdup(root_path);
++    } else {
++      log_debug(os, container)("Duplicate %s controllers detected. Picking %s, skipping %s.",
++                               name, cg_infos[controller]._mount_path, mount_path);
++    }
++  } else {
++    cg_infos[controller]._mount_path = os::strdup(mount_path);
++    cg_infos[controller]._root_mount_path = os::strdup(root_path);
++  }
++}
++
+ bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
+                                             const char* proc_cgroups,
+                                             const char* proc_self_cgroup,
+@@ -288,7 +314,6 @@ bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
+   bool cgroupv2_mount_point_found = false;
+   bool any_cgroup_mounts_found = false;
+   while ((p = fgets(buf, MAXPATHLEN, mntinfo)) != NULL) {
+-    char tmp_mount_point[MAXPATHLEN+1];
+     char tmp_fs_type[MAXPATHLEN+1];
+     char tmproot[MAXPATHLEN+1];
+     char tmpmount[MAXPATHLEN+1];
+@@ -299,15 +324,13 @@ bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
+     // Cgroup v2 relevant info. We only look for the _mount_path iff is_cgroupsV2 so
+     // as to avoid memory stomping of the _mount_path pointer later on in the cgroup v1
+     // block in the hybrid case.
+-    //
+-    if (is_cgroupsV2 && sscanf(p, "%*d %*d %*d:%*d %*s %s %*[^-]- %s %*s %*s", tmp_mount_point, tmp_fs_type) == 2) {
++    if (is_cgroupsV2 && sscanf(p, "%*d %*d %*d:%*d %s %s %*[^-]- %s %*s %*s", tmproot, tmpmount, tmp_fs_type) == 3) {
+       // we likely have an early match return (e.g. cgroup fs match), be sure we have cgroup2 as fstype
+-      if (!cgroupv2_mount_point_found && strcmp("cgroup2", tmp_fs_type) == 0) {
++      if (strcmp("cgroup2", tmp_fs_type) == 0) {
+         cgroupv2_mount_point_found = true;
+         any_cgroup_mounts_found = true;
+         for (int i = 0; i < CG_INFO_LENGTH; i++) {
+-          assert(cg_infos[i]._mount_path == NULL, "_mount_path memory stomping");
+-          cg_infos[i]._mount_path = os::strdup(tmp_mount_point);
++          set_controller_paths(cg_infos, i, "(cg2, unified)", tmpmount, tmproot);
+         }
+       }
+     }
+@@ -332,47 +355,23 @@ bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
+       while ((token = strsep(&cptr, ",")) != NULL) {
+         if (strcmp(token, "memory") == 0) {
+           any_cgroup_mounts_found = true;
+-          assert(cg_infos[MEMORY_IDX]._mount_path == NULL, "stomping of _mount_path");
+-          cg_infos[MEMORY_IDX]._mount_path = os::strdup(tmpmount);
+-          cg_infos[MEMORY_IDX]._root_mount_path = os::strdup(tmproot);
++          set_controller_paths(cg_infos, MEMORY_IDX, token, tmpmount, tmproot);
+           cg_infos[MEMORY_IDX]._data_complete = true;
+         } else if (strcmp(token, "cpuset") == 0) {
+           any_cgroup_mounts_found = true;
+-          if (cg_infos[CPUSET_IDX]._mount_path != NULL) {
+-            // On some systems duplicate cpuset controllers get mounted in addition to
+-            // the main cgroup controllers most likely under /sys/fs/cgroup. In that
+-            // case pick the one under /sys/fs/cgroup and discard others.
+-            if (strstr(cg_infos[CPUSET_IDX]._mount_path, "/sys/fs/cgroup") != cg_infos[CPUSET_IDX]._mount_path) {
+-              log_warning(os, container)("Duplicate cpuset controllers detected. Picking %s, skipping %s.",
+-                                         tmpmount, cg_infos[CPUSET_IDX]._mount_path);
+-              os::free(cg_infos[CPUSET_IDX]._mount_path);
+-              cg_infos[CPUSET_IDX]._mount_path = os::strdup(tmpmount);
+-            } else {
+-              log_warning(os, container)("Duplicate cpuset controllers detected. Picking %s, skipping %s.",
+-                                         cg_infos[CPUSET_IDX]._mount_path, tmpmount);
+-            }
+-          } else {
+-            cg_infos[CPUSET_IDX]._mount_path = os::strdup(tmpmount);
+-          }
+-          cg_infos[CPUSET_IDX]._root_mount_path = os::strdup(tmproot);
++          set_controller_paths(cg_infos, CPUSET_IDX, token, tmpmount, tmproot);
+           cg_infos[CPUSET_IDX]._data_complete = true;
+         } else if (strcmp(token, "cpu") == 0) {
+           any_cgroup_mounts_found = true;
+-          assert(cg_infos[CPU_IDX]._mount_path == NULL, "stomping of _mount_path");
+-          cg_infos[CPU_IDX]._mount_path = os::strdup(tmpmount);
+-          cg_infos[CPU_IDX]._root_mount_path = os::strdup(tmproot);
++          set_controller_paths(cg_infos, CPU_IDX, token, tmpmount, tmproot);
+           cg_infos[CPU_IDX]._data_complete = true;
+         } else if (strcmp(token, "cpuacct") == 0) {
+           any_cgroup_mounts_found = true;
+-          assert(cg_infos[CPUACCT_IDX]._mount_path == NULL, "stomping of _mount_path");
+-          cg_infos[CPUACCT_IDX]._mount_path = os::strdup(tmpmount);
+-          cg_infos[CPUACCT_IDX]._root_mount_path = os::strdup(tmproot);
++          set_controller_paths(cg_infos, CPUACCT_IDX, token, tmpmount, tmproot);
+           cg_infos[CPUACCT_IDX]._data_complete = true;
+         } else if (strcmp(token, "pids") == 0) {
+           any_cgroup_mounts_found = true;
+-          assert(cg_infos[PIDS_IDX]._mount_path == NULL, "stomping of _mount_path");
+-          cg_infos[PIDS_IDX]._mount_path = os::strdup(tmpmount);
+-          cg_infos[PIDS_IDX]._root_mount_path = os::strdup(tmproot);
++          set_controller_paths(cg_infos, PIDS_IDX, token, tmpmount, tmproot);
+           cg_infos[PIDS_IDX]._data_complete = true;
+         }
+       }
+diff --git a/src/hotspot/os/linux/cgroupSubsystem_linux.hpp b/src/hotspot/os/linux/cgroupSubsystem_linux.hpp
+index 2e3fc8e8bc78..91456b3d0e14 100644
+--- a/src/hotspot/os/linux/cgroupSubsystem_linux.hpp
++++ b/src/hotspot/os/linux/cgroupSubsystem_linux.hpp
+@@ -311,6 +311,11 @@ class CgroupSubsystemFactory: AllStatic {
+     }
+ #endif
+ 
++    static void set_controller_paths(CgroupInfo* cg_infos,
++                                     int controller,
++                                     const char* name,
++                                     char* mount_path,
++                                     char* root_path);
+     // Determine the cgroup type (version 1 or version 2), given
+     // relevant paths to files. Sets 'flags' accordingly.
+     static bool determine_type(CgroupInfo* cg_infos,
+diff --git a/test/hotspot/jtreg/containers/cgroup/CgroupSubsystemFactory.java b/test/hotspot/jtreg/containers/cgroup/CgroupSubsystemFactory.java
+index 54807119d82e..7eb78fa447fd 100644
+--- a/test/hotspot/jtreg/containers/cgroup/CgroupSubsystemFactory.java
++++ b/test/hotspot/jtreg/containers/cgroup/CgroupSubsystemFactory.java
+@@ -62,11 +62,19 @@ public class CgroupSubsystemFactory {
+     private Path cgroupv1MntInfoZeroHierarchy;
+     private Path cgroupv2CgInfoZeroHierarchy;
+     private Path cgroupv2MntInfoZeroHierarchy;
++    private Path cgroupv2MntInfoDouble;
++    private Path cgroupv2MntInfoDouble2;
+     private Path cgroupv1CgInfoNonZeroHierarchy;
+     private Path cgroupv1MntInfoNonZeroHierarchyOtherOrder;
+     private Path cgroupv1MntInfoNonZeroHierarchy;
+     private Path cgroupv1MntInfoDoubleCpuset;
+     private Path cgroupv1MntInfoDoubleCpuset2;
++    private Path cgroupv1MntInfoDoubleMemory;
++    private Path cgroupv1MntInfoDoubleMemory2;
++    private Path cgroupv1MntInfoDoubleCpu;
++    private Path cgroupv1MntInfoDoubleCpu2;
++    private Path cgroupv1MntInfoDoublePids;
++    private Path cgroupv1MntInfoDoublePids2;
+     private Path cgroupv1MntInfoSystemdOnly;
+     private String mntInfoEmpty = "";
+     private Path cgroupV1SelfCgroup;
+@@ -160,6 +168,15 @@ public class CgroupSubsystemFactory {
+     private String mntInfoCgroupv1MoreCpusetLine = "121 32 0:37 / /cpusets rw,relatime shared:69 - cgroup none rw,cpuset\n";
+     private String mntInfoCgroupv1DoubleCpuset = mntInfoCgroupv1MoreCpusetLine + mntInfoHybrid;
+     private String mntInfoCgroupv1DoubleCpuset2 =  mntInfoHybrid + mntInfoCgroupv1MoreCpusetLine;
++    private String mntInfoCgroupv1MoreMemoryLine = "1100 1098 0:28 / /memory rw,nosuid,nodev,noexec,relatime master:6 - cgroup cgroup rw,memory\n";
++    private String mntInfoCgroupv1DoubleMemory = mntInfoCgroupv1MoreMemoryLine + mntInfoHybrid;
++    private String mntInfoCgroupv1DoubleMemory2 = mntInfoHybrid + mntInfoCgroupv1MoreMemoryLine;
++    private String mntInfoCgroupv1DoubleCpuLine = "1101 1098 0:29 / /cpu,cpuacct rw,nosuid,nodev,noexec,relatime master:7 - cgroup cgroup rw,cpu,cpuacct\n";
++    private String mntInfoCgroupv1DoubleCpu = mntInfoCgroupv1DoubleCpuLine + mntInfoHybrid;
++    private String mntInfoCgroupv1DoubleCpu2 = mntInfoHybrid + mntInfoCgroupv1DoubleCpuLine;
++    private String mntInfoCgroupv1DoublePidsLine = "1107 1098 0:35 / /pids rw,nosuid,nodev,noexec,relatime master:13 - cgroup cgroup rw,pids\n";
++    private String mntInfoCgroupv1DoublePids = mntInfoCgroupv1DoublePidsLine + mntInfoHybrid;
++    private String mntInfoCgroupv1DoublePids2 = mntInfoHybrid + mntInfoCgroupv1DoublePidsLine;
+     private String cgroupsNonZeroHierarchy =
+             "#subsys_name hierarchy   num_cgroups enabled\n" +
+             "cpuset  3   1   1\n" +
+@@ -175,7 +192,11 @@ public class CgroupSubsystemFactory {
+             "hugetlb 6   1   1\n" +
+             "pids    9   80  1";  // hierarchy has to match procSelfCgroupHybridContent
+     private String mntInfoCgroupsV2Only =
+-            "28 21 0:25 / /sys/fs/cgroup rw,nosuid,nodev,noexec,relatime shared:4 - cgroup2 none rw,seclabel,nsdelegate";
++            "28 21 0:25 / /sys/fs/cgroup rw,nosuid,nodev,noexec,relatime shared:4 - cgroup2 none rw,seclabel,nsdelegate\n";
++    private String mntInfoCgroupsV2MoreLine =
++            "240 232 0:24 /../.. /cgroup-in ro,relatime - cgroup2 cgroup2 rw,nsdelegate\n";
++    private String mntInfoCgroupsV2Double = mntInfoCgroupsV2MoreLine + mntInfoCgroupsV2Only;
++    private String mntInfoCgroupsV2Double2 = mntInfoCgroupsV2Only + mntInfoCgroupsV2MoreLine;
+     private String mntInfoCgroupsV1SystemdOnly =
+             "35 26 0:26 / /sys/fs/cgroup/systemd rw,nosuid,nodev,noexec,relatime - cgroup systemd rw,name=systemd\n" +
+             "26 18 0:19 / /sys/fs/cgroup rw,relatime - tmpfs none rw,size=4k,mode=755\n";
+@@ -217,6 +238,12 @@ private void setup() {
+             cgroupv2MntInfoZeroHierarchy = Paths.get(existingDirectory.toString(), "mountinfo_cgroupv2");
+             Files.writeString(cgroupv2MntInfoZeroHierarchy, mntInfoCgroupsV2Only);
+ 
++            cgroupv2MntInfoDouble = Paths.get(existingDirectory.toString(), "mountinfo_cgroupv2_double");
++            Files.writeString(cgroupv2MntInfoDouble, mntInfoCgroupsV2Double);
++
++            cgroupv2MntInfoDouble2 = Paths.get(existingDirectory.toString(), "mountinfo_cgroupv2_double2");
++            Files.writeString(cgroupv2MntInfoDouble2, mntInfoCgroupsV2Double2);
++
+             cgroupv1CgInfoNonZeroHierarchy = Paths.get(existingDirectory.toString(), "cgroups_non_zero");
+             Files.writeString(cgroupv1CgInfoNonZeroHierarchy, cgroupsNonZeroHierarchy);
+ 
+@@ -244,6 +271,24 @@ private void setup() {
+             cgroupv1MntInfoDoubleCpuset2 = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_cpuset2");
+             Files.writeString(cgroupv1MntInfoDoubleCpuset2, mntInfoCgroupv1DoubleCpuset2);
+ 
++            cgroupv1MntInfoDoubleMemory = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_memory");
++            Files.writeString(cgroupv1MntInfoDoubleMemory, mntInfoCgroupv1DoubleMemory);
++
++            cgroupv1MntInfoDoubleMemory2 = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_memory2");
++            Files.writeString(cgroupv1MntInfoDoubleMemory2, mntInfoCgroupv1DoubleMemory2);
++
++            cgroupv1MntInfoDoubleCpu = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_cpu");
++            Files.writeString(cgroupv1MntInfoDoubleCpu, mntInfoCgroupv1DoubleCpu);
++
++            cgroupv1MntInfoDoubleCpu2 = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_cpu2");
++            Files.writeString(cgroupv1MntInfoDoubleCpu2, mntInfoCgroupv1DoubleCpu2);
++
++            cgroupv1MntInfoDoublePids = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_pids");
++            Files.writeString(cgroupv1MntInfoDoublePids, mntInfoCgroupv1DoublePids);
++
++            cgroupv1MntInfoDoublePids2 = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_pids2");
++            Files.writeString(cgroupv1MntInfoDoublePids2, mntInfoCgroupv1DoublePids2);
++
+             cgroupv1MntInfoSystemdOnly = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_systemd_only");
+             Files.writeString(cgroupv1MntInfoSystemdOnly, mntInfoCgroupsV1SystemdOnly);
+ 
+@@ -291,14 +336,14 @@ public void testCgroupv1JoinControllerCombo(WhiteBox wb) {
+         System.out.println("testCgroupv1JoinControllerMounts PASSED!");
+     }
+ 
+-    public void testCgroupv1MultipleCpusetMounts(WhiteBox wb, Path mountInfo) {
++    public void testCgroupv1MultipleControllerMounts(WhiteBox wb, Path mountInfo) {
+         String procCgroups = cgroupv1CgInfoNonZeroHierarchy.toString();
+         String procSelfCgroup = cgroupV1SelfCgroup.toString();
+         String procSelfMountinfo = mountInfo.toString();
+         int retval = wb.validateCgroup(procCgroups, procSelfCgroup, procSelfMountinfo);
+-        Asserts.assertEQ(CGROUPS_V1, retval, "Multiple cpuset controllers, but only one in /sys/fs/cgroup");
++        Asserts.assertEQ(CGROUPS_V1, retval, "Multiple controllers, but only one in /sys/fs/cgroup");
+         Asserts.assertTrue(isValidCgroup(retval));
+-        System.out.println("testCgroupv1MultipleCpusetMounts PASSED!");
++        System.out.println("testCgroupv1MultipleControllerMounts PASSED!");
+     }
+ 
+     public void testCgroupv1SystemdOnly(WhiteBox wb) {
+@@ -341,10 +386,10 @@ public void testCgroupv1MissingMemoryController(WhiteBox wb) {
+         System.out.println("testCgroupv1MissingMemoryController PASSED!");
+     }
+ 
+-    public void testCgroupv2(WhiteBox wb) {
++    public void testCgroupv2(WhiteBox wb, Path mountInfo) {
+         String procCgroups = cgroupv2CgInfoZeroHierarchy.toString();
+         String procSelfCgroup = cgroupV2SelfCgroup.toString();
+-        String procSelfMountinfo = cgroupv2MntInfoZeroHierarchy.toString();
++        String procSelfMountinfo = mountInfo.toString();
+         int retval = wb.validateCgroup(procCgroups, procSelfCgroup, procSelfMountinfo);
+         Asserts.assertEQ(CGROUPS_V2, retval, "Expected");
+         Asserts.assertTrue(isValidCgroup(retval));
+@@ -388,13 +433,21 @@ public static void main(String[] args) throws Exception {
+         try {
+             test.testCgroupv1SystemdOnly(wb);
+             test.testCgroupv1NoMounts(wb);
+-            test.testCgroupv2(wb);
++            test.testCgroupv2(wb, test.cgroupv2MntInfoZeroHierarchy);
++            test.testCgroupv2(wb, test.cgroupv2MntInfoDouble);
++            test.testCgroupv2(wb, test.cgroupv2MntInfoDouble2);
+             test.testCgroupV1Hybrid(wb);
+             test.testCgroupV1HybridMntInfoOrder(wb);
+             test.testCgroupv1MissingMemoryController(wb);
+             test.testCgroupv2NoCgroup2Fs(wb);
+-            test.testCgroupv1MultipleCpusetMounts(wb, test.cgroupv1MntInfoDoubleCpuset);
+-            test.testCgroupv1MultipleCpusetMounts(wb, test.cgroupv1MntInfoDoubleCpuset2);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleCpuset);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleCpuset2);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleMemory);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleMemory2);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleCpu);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleCpu2);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoublePids);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoublePids2);
+             test.testCgroupv1JoinControllerCombo(wb);
+             test.testNonZeroHierarchyOnlyFreezer(wb);
+         } finally {
+diff --git a/test/hotspot/jtreg/containers/docker/DockerBasicTest.java b/test/hotspot/jtreg/containers/docker/DockerBasicTest.java
+index bcbd2ffa21df..357eb3db4972 100644
+--- a/test/hotspot/jtreg/containers/docker/DockerBasicTest.java
++++ b/test/hotspot/jtreg/containers/docker/DockerBasicTest.java
+@@ -53,6 +53,7 @@ public static void main(String[] args) throws Exception {
+         try {
+             testJavaVersion();
+             testHelloDocker();
++            testJavaVersionWithCgMounts();
+         } finally {
+             if (!DockerTestUtils.RETAIN_IMAGE_AFTER_TEST) {
+                 DockerTestUtils.removeDockerImage(imageNameAndTag);
+@@ -81,4 +82,17 @@ private static void testHelloDocker() throws Exception {
+             .shouldHaveExitValue(0)
+             .shouldContain("Hello Docker");
+     }
++
++
++    private static void testJavaVersionWithCgMounts() throws Exception {
++        DockerRunOptions opts =
++            new DockerRunOptions(imageNameAndTag, "/jdk/bin/java", "-version")
++            .addDockerOpts("-v", "/sys/fs/cgroup:/cgroups-in:ro");
++
++        // Duplicated cgroup mounts should be handled by the container detection
++        // code and should not cause any error/warning output.
++        DockerTestUtils.dockerRunJava(opts)
++            .shouldHaveExitValue(0)
++            .shouldNotMatch("\\[os,container *\\]");
++    }
+ }
+diff --git a/test/hotspot/jtreg/containers/docker/TestCPUAwareness.java b/test/hotspot/jtreg/containers/docker/TestCPUAwareness.java
+index 93881c615bd9..a41dc9c39392 100644
+--- a/test/hotspot/jtreg/containers/docker/TestCPUAwareness.java
++++ b/test/hotspot/jtreg/containers/docker/TestCPUAwareness.java
+@@ -70,10 +70,11 @@ public static void main(String[] args) throws Exception {
+             testActiveProcessorCount(2, 2);
+ 
+             // cpu quota and period
+-            testCpuQuotaAndPeriod(50*1000, 100*1000);
+-            testCpuQuotaAndPeriod(100*1000, 100*1000);
+-            testCpuQuotaAndPeriod(150*1000, 100*1000);
+-            testCpuQuotaAndPeriod(400*1000, 100*1000);
++            testCpuQuotaAndPeriod(50*1000, 100*1000, false);
++            testCpuQuotaAndPeriod(100*1000, 100*1000, false);
++            testCpuQuotaAndPeriod(150*1000, 100*1000, false);
++            testCpuQuotaAndPeriod(400*1000, 100*1000, false);
++            testCpuQuotaAndPeriod(50*1000, 100*1000, true /* additional cgroup mount */);
+ 
+             testOperatingSystemMXBeanAwareness("0.5", "1");
+             testOperatingSystemMXBeanAwareness("1.0", "1");
+@@ -153,7 +154,7 @@ private static int adjustExpectedAPCForAvailableCPUs(int expectedAPC) {
+     }
+ 
+ 
+-    private static void testCpuQuotaAndPeriod(int quota, int period)
++    private static void testCpuQuotaAndPeriod(int quota, int period, boolean addCgmounts)
+         throws Exception {
+         Common.logNewTestCase("test cpu quota and period: ");
+         System.out.println("quota = " + quota);
+@@ -167,6 +168,10 @@ private static void testCpuQuotaAndPeriod(int quota, int period)
+             .addDockerOpts("--cpu-period=" + period)
+             .addDockerOpts("--cpu-quota=" + quota);
+ 
++        if (addCgmounts) {
++            opts = opts.addDockerOpts("--volume", "/sys/fs/cgroup:/cgroups-in:ro");
++        }
++
+         Common.run(opts)
+             .shouldMatch("CPU Period is.*" + period)
+             .shouldMatch("CPU Quota is.*" + quota)
+diff --git a/test/hotspot/jtreg/containers/docker/TestMemoryAwareness.java b/test/hotspot/jtreg/containers/docker/TestMemoryAwareness.java
+index ff5cd23cc65f..d6ff603157a6 100644
+--- a/test/hotspot/jtreg/containers/docker/TestMemoryAwareness.java
++++ b/test/hotspot/jtreg/containers/docker/TestMemoryAwareness.java
+@@ -63,10 +63,11 @@ public static void main(String[] args) throws Exception {
+         DockerTestUtils.buildJdkContainerImage(imageName);
+ 
+         try {
+-            testMemoryLimit("100m", "104857600");
+-            testMemoryLimit("500m", "524288000");
+-            testMemoryLimit("1g", "1073741824");
+-            testMemoryLimit("4g", "4294967296");
++            testMemoryLimit("100m", "104857600", false);
++            testMemoryLimit("500m", "524288000", false);
++            testMemoryLimit("1g", "1073741824", false);
++            testMemoryLimit("4g", "4294967296", false);
++            testMemoryLimit("100m", "104857600", true /* additional cgroup mount */);
+ 
+             testMemorySoftLimit("500m", "524288000");
+             testMemorySoftLimit("1g", "1073741824");
+@@ -98,7 +99,7 @@ public static void main(String[] args) throws Exception {
+     }
+ 
+ 
+-    private static void testMemoryLimit(String valueToSet, String expectedTraceValue)
++    private static void testMemoryLimit(String valueToSet, String expectedTraceValue, boolean addCgmounts)
+             throws Exception {
+ 
+         Common.logNewTestCase("memory limit: " + valueToSet);
+@@ -106,6 +107,10 @@ private static void testMemoryLimit(String valueToSet, String expectedTraceValue
+         DockerRunOptions opts = Common.newOpts(imageName)
+             .addDockerOpts("--memory", valueToSet);
+ 
++        if (addCgmounts) {
++            opts = opts.addDockerOpts("--volume", "/sys/fs/cgroup:/cgroups-in:ro");
++        }
++
+         Common.run(opts)
+             .shouldMatch("Memory Limit is:.*" + expectedTraceValue);
+     }
diff --git a/srcpkgs/openjdk18-bootstrap/template b/srcpkgs/openjdk18-bootstrap/template
new file mode 100644
index 0000000000000..ed4eb045ec054
--- /dev/null
+++ b/srcpkgs/openjdk18-bootstrap/template
@@ -0,0 +1,101 @@
+# Template file for 'openjdk18-bootstrap'
+pkgname=openjdk18-bootstrap
+version=18.0.2.1+0
+revision=1
+_gtest_ver=1.8.1
+_java_ver="${version%%.*}"
+_jdk_update="${version#*+}"
+_base_version="${version%.?+*}"
+_jdk_home="usr/lib/jvm/openjdk${_java_ver}"
+archs="x86_64* aarch64*"
+create_wrksrc=yes
+build_wrksrc="jdk${_java_ver}u-jdk-${version/+/-}"
+build_style=gnu-configure
+configure_args="--disable-warnings-as-errors
+ --enable-unlimited-crypto
+ --with-zlib=system
+ --with-libjpeg=system
+ --with-giflib=system
+ --with-libpng=system
+ --with-lcms=system
+ --with-jtreg=no
+ --with-gtest=../googletest-release-${_gtest_ver}
+ --with-debug-level=release
+ --with-native-debug-symbols=internal
+ --with-jobs=${XBPS_ORIG_MAKEJOBS}
+ --with-version-pre=
+ --with-version-build=${_jdk_update}
+ --with-version-opt=void-r${revision}
+ --with-vendor-name=Void
+ --with-vendor-url=https://voidlinux.org/
+ --with-vendor-bug-url=https://github.com/void-linux/void-packages/issues
+ --with-vendor-vm-bug-url=https://github.com/void-linux/void-packages/issues
+ --with-boot-jdk=/usr/lib/jvm/openjdk$(( _java_ver - 1 ))"
+make_build_args="images"
+make_check_target="test-hotspot-gtest"
+hostmakedepends="pkg-config automake autoconf cpio tar unzip zip ca-certificates
+ openssl zlib-devel which make-ca openjdk17"
+makedepends="libXrender-devel libXtst-devel libXt-devel libXrandr-devel
+ giflib-devel libjpeg-turbo-devel cups-devel freetype-devel alsa-lib-devel
+ fontconfig-devel zlib-devel lcms2-devel"
+short_desc="OpenJDK Java Development Kit (bootstrap version ${_java_ver})"
+maintainer="classabbyamp <void@placeviolette.net>"
+license="GPL-2.0-only WITH Classpath-exception-2.0"
+homepage="http://openjdk.java.net/"
+distfiles="https://github.com/openjdk/jdk${_java_ver}u/archive/jdk-${version}.tar.gz
+ https://github.com/google/googletest/archive/refs/tags/release-${_gtest_ver}.tar.gz"
+checksum="d3955839c1f566f949fbdf5d4f32a6fac2e57598fba2a1cbc8557c96df6ac8c4
+ 9bf1fe5182a604b4135edc1a425ae356c9ad15e9b23f9f12a02e80184c3a249c"
+nocross=yes
+repository=bootstrap
+patch_args="-Np1 --directory=$build_wrksrc"
+
+# Build and check are still parallel, but don't use -jN.
+disable_parallel_build=yes
+disable_parallel_check=yes
+
+case "$XBPS_TARGET_MACHINE" in
+	i686*|arm*) broken="Unsupported architecture" ;;
+esac
+
+post_extract() {
+	chmod +x "$build_wrksrc"/configure
+	if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+		rm -r "$build_wrksrc"/src/jdk.hotspot.agent
+	fi
+}
+
+do_configure() {
+	CFLAGS=${CFLAGS/-D_FORTIFY_SOURCE=2/}
+	CXXFLAGS=${CXXFLAGS/-D_FORTIFY_SOURCE=2/}
+
+	# force ELFv2 for ppc64 just in case
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*)
+			CFLAGS+=" -DABI_ELFv2"
+			CXXFLAGS+=" -DABI_ELFv2"
+			;;
+	esac
+
+	configure_args=${configure_args/--with-libtool-sysroot=$XBPS_CROSS_BASE}
+	if [ "$XBPS_CCACHE" ] && [ -z "$CROSS_BUILD" ]; then
+		configure_args+=" --enable-ccache"
+		CC="/usr/bin/cc"
+		CXX="/usr/bin/c++"
+	fi
+	./configure ${configure_args} \
+		--with-extra-cflags="$CFLAGS" \
+		--with-extra-cxxflags="$CXXFLAGS" \
+		--with-extra-ldflags="$LDFLAGS" \
+		READELF="$READELF" AR="$AR" STRIP="$STRIP" NM="$NM" \
+		OBJDUMP="$OBJDUMP" OBJCOPY="$OBJCOPY"
+}
+
+pre_install() {
+	make_install_args="INSTALL_PREFIX=${DESTDIR}/usr/lib"
+}
+
+post_install() {
+	rm -rf "${DESTDIR}"/usr/lib/bin
+	mv "${DESTDIR}"/usr/lib/jvm/openjdk-"${_base_version}" "${DESTDIR}/$_jdk_home"
+}
diff --git a/srcpkgs/openjdk18-bootstrap/update b/srcpkgs/openjdk18-bootstrap/update
new file mode 100644
index 0000000000000..0c349f69c7ba9
--- /dev/null
+++ b/srcpkgs/openjdk18-bootstrap/update
@@ -0,0 +1,4 @@
+site="https://github.com/openjdk/jdk18u/tags"
+pattern='jdk-\K18\.[\d.+]+(?=\.)'
+# don't need to update the bootstrap package
+ignore="*"

From 0d35e4879ad7146fae02fd8a31d750b9cf3261a6 Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Fri, 22 Dec 2023 00:46:39 -0500
Subject: [PATCH 10/12] New package: openjdk19-bootstrap-19.0.2+7

---
 .../patches/FixNullPtrCast.patch              |  36 ++
 .../openjdk19-bootstrap/patches/cgroups.patch | 406 ++++++++++++++++++
 srcpkgs/openjdk19-bootstrap/template          | 101 +++++
 srcpkgs/openjdk19-bootstrap/update            |   4 +
 4 files changed, 547 insertions(+)
 create mode 100644 srcpkgs/openjdk19-bootstrap/patches/FixNullPtrCast.patch
 create mode 100644 srcpkgs/openjdk19-bootstrap/patches/cgroups.patch
 create mode 100644 srcpkgs/openjdk19-bootstrap/template
 create mode 100644 srcpkgs/openjdk19-bootstrap/update

diff --git a/srcpkgs/openjdk19-bootstrap/patches/FixNullPtrCast.patch b/srcpkgs/openjdk19-bootstrap/patches/FixNullPtrCast.patch
new file mode 100644
index 0000000000000..6f05158792732
--- /dev/null
+++ b/srcpkgs/openjdk19-bootstrap/patches/FixNullPtrCast.patch
@@ -0,0 +1,36 @@
+Patch taken from Alpine: https://git.alpinelinux.org/aports/tree/community/openjdk17/FixNullPtrCast.patch
+
+same fix for armv7l-musl added
+
+Subject: Fix cast errors with latest GCC
+Upstream: No
+Author: Simon Frankenberger <simon-alpine@fraho.eu>
+
+This patch fixes one remaining casting error reported by GCC 12 for aarch64
+
+--- old/src/hotspot/cpu/aarch64/interpreterRT_aarch64.cpp
++++ new/src/hotspot/cpu/aarch64/interpreterRT_aarch64.cpp
+@@ -267,7 +267,7 @@
+ 
+   virtual void pass_object() {
+     intptr_t* addr = single_slot_addr();
+-    intptr_t value = *addr == 0 ? NULL : (intptr_t)addr;
++    intptr_t value = *addr == 0 ? (intptr_t) 0 : (intptr_t)addr;
+     if (pass_gpr(value) < 0) {
+       pass_stack<>(value);
+     }
+
+--- old/src/hotspot/cpu/arm/interpreterRT_arm.cpp
++++ new/src/hotspot/cpu/arm/interpreterRT_arm.cpp
+@@ -306,8 +306,8 @@
+   virtual void pass_object() {
+     intptr_t from_addr = (intptr_t)(_from + Interpreter::local_offset_in_bytes(0));
+     if(_last_gp < GPR_PARAMS) {
+-      _toGP[_last_gp++] = (*(intptr_t*)from_addr == 0) ? NULL : from_addr;
++      _toGP[_last_gp++] = (*(intptr_t*)from_addr == 0) ? (intptr_t) 0 : (intptr_t)from_addr;
+     } else {
+-      *_to++ = (*(intptr_t*)from_addr == 0) ? NULL : from_addr;
++      *_to++ = (*(intptr_t*)from_addr == 0) ? (intptr_t) 0 : (intptr_t)from_addr;
+     }
+     _from -= Interpreter::stackElementSize;
+   }
diff --git a/srcpkgs/openjdk19-bootstrap/patches/cgroups.patch b/srcpkgs/openjdk19-bootstrap/patches/cgroups.patch
new file mode 100644
index 0000000000000..efeaa0871a03b
--- /dev/null
+++ b/srcpkgs/openjdk19-bootstrap/patches/cgroups.patch
@@ -0,0 +1,406 @@
+From 8f3bbe950fb5a3d9f6cae122209df01df0f342f0 Mon Sep 17 00:00:00 2001
+From: casparcwang <casparcwang@tencent.com>
+Date: Thu, 15 Sep 2022 08:47:05 +0000
+Subject: [PATCH] 8293472: Incorrect container resource limit detection if
+ manual cgroup fs mounts present
+
+Reviewed-by: sgehwolf, iklam
+---
+ .../os/linux/cgroupSubsystem_linux.cpp        | 69 +++++++++---------
+ .../os/linux/cgroupSubsystem_linux.hpp        |  5 ++
+ .../cgroup/CgroupSubsystemFactory.java        | 71 ++++++++++++++++---
+ .../containers/docker/DockerBasicTest.java    | 14 ++++
+ .../containers/docker/TestCPUAwareness.java   | 15 ++--
+ .../docker/TestMemoryAwareness.java           | 15 ++--
+ 6 files changed, 135 insertions(+), 54 deletions(-)
+
+diff --git a/src/hotspot/os/linux/cgroupSubsystem_linux.cpp b/src/hotspot/os/linux/cgroupSubsystem_linux.cpp
+index baa7a40a9146..1f3a6dfcaf6b 100644
+--- a/src/hotspot/os/linux/cgroupSubsystem_linux.cpp
++++ b/src/hotspot/os/linux/cgroupSubsystem_linux.cpp
+@@ -123,6 +123,32 @@ CgroupSubsystem* CgroupSubsystemFactory::create() {
+   return new CgroupV1Subsystem(cpuset, cpu, cpuacct, pids, memory);
+ }
+ 
++void CgroupSubsystemFactory::set_controller_paths(CgroupInfo* cg_infos,
++                                                  int controller,
++                                                  const char* name,
++                                                  char* mount_path,
++                                                  char* root_path) {
++  if (cg_infos[controller]._mount_path != NULL) {
++    // On some systems duplicate controllers get mounted in addition to
++    // the main cgroup controllers most likely under /sys/fs/cgroup. In that
++    // case pick the one under /sys/fs/cgroup and discard others.
++    if (strstr(cg_infos[controller]._mount_path, "/sys/fs/cgroup") != cg_infos[controller]._mount_path) {
++      log_debug(os, container)("Duplicate %s controllers detected. Picking %s, skipping %s.",
++                               name, mount_path, cg_infos[controller]._mount_path);
++      os::free(cg_infos[controller]._mount_path);
++      os::free(cg_infos[controller]._root_mount_path);
++      cg_infos[controller]._mount_path = os::strdup(mount_path);
++      cg_infos[controller]._root_mount_path = os::strdup(root_path);
++    } else {
++      log_debug(os, container)("Duplicate %s controllers detected. Picking %s, skipping %s.",
++                               name, cg_infos[controller]._mount_path, mount_path);
++    }
++  } else {
++    cg_infos[controller]._mount_path = os::strdup(mount_path);
++    cg_infos[controller]._root_mount_path = os::strdup(root_path);
++  }
++}
++
+ bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
+                                             const char* proc_cgroups,
+                                             const char* proc_self_cgroup,
+@@ -288,7 +314,6 @@ bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
+   bool cgroupv2_mount_point_found = false;
+   bool any_cgroup_mounts_found = false;
+   while ((p = fgets(buf, MAXPATHLEN, mntinfo)) != NULL) {
+-    char tmp_mount_point[MAXPATHLEN+1];
+     char tmp_fs_type[MAXPATHLEN+1];
+     char tmproot[MAXPATHLEN+1];
+     char tmpmount[MAXPATHLEN+1];
+@@ -299,15 +324,13 @@ bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
+     // Cgroup v2 relevant info. We only look for the _mount_path iff is_cgroupsV2 so
+     // as to avoid memory stomping of the _mount_path pointer later on in the cgroup v1
+     // block in the hybrid case.
+-    //
+-    if (is_cgroupsV2 && sscanf(p, "%*d %*d %*d:%*d %*s %s %*[^-]- %s %*s %*s", tmp_mount_point, tmp_fs_type) == 2) {
++    if (is_cgroupsV2 && sscanf(p, "%*d %*d %*d:%*d %s %s %*[^-]- %s %*s %*s", tmproot, tmpmount, tmp_fs_type) == 3) {
+       // we likely have an early match return (e.g. cgroup fs match), be sure we have cgroup2 as fstype
+-      if (!cgroupv2_mount_point_found && strcmp("cgroup2", tmp_fs_type) == 0) {
++      if (strcmp("cgroup2", tmp_fs_type) == 0) {
+         cgroupv2_mount_point_found = true;
+         any_cgroup_mounts_found = true;
+         for (int i = 0; i < CG_INFO_LENGTH; i++) {
+-          assert(cg_infos[i]._mount_path == NULL, "_mount_path memory stomping");
+-          cg_infos[i]._mount_path = os::strdup(tmp_mount_point);
++          set_controller_paths(cg_infos, i, "(cg2, unified)", tmpmount, tmproot);
+         }
+       }
+     }
+@@ -332,47 +355,23 @@ bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
+       while ((token = strsep(&cptr, ",")) != NULL) {
+         if (strcmp(token, "memory") == 0) {
+           any_cgroup_mounts_found = true;
+-          assert(cg_infos[MEMORY_IDX]._mount_path == NULL, "stomping of _mount_path");
+-          cg_infos[MEMORY_IDX]._mount_path = os::strdup(tmpmount);
+-          cg_infos[MEMORY_IDX]._root_mount_path = os::strdup(tmproot);
++          set_controller_paths(cg_infos, MEMORY_IDX, token, tmpmount, tmproot);
+           cg_infos[MEMORY_IDX]._data_complete = true;
+         } else if (strcmp(token, "cpuset") == 0) {
+           any_cgroup_mounts_found = true;
+-          if (cg_infos[CPUSET_IDX]._mount_path != NULL) {
+-            // On some systems duplicate cpuset controllers get mounted in addition to
+-            // the main cgroup controllers most likely under /sys/fs/cgroup. In that
+-            // case pick the one under /sys/fs/cgroup and discard others.
+-            if (strstr(cg_infos[CPUSET_IDX]._mount_path, "/sys/fs/cgroup") != cg_infos[CPUSET_IDX]._mount_path) {
+-              log_warning(os, container)("Duplicate cpuset controllers detected. Picking %s, skipping %s.",
+-                                         tmpmount, cg_infos[CPUSET_IDX]._mount_path);
+-              os::free(cg_infos[CPUSET_IDX]._mount_path);
+-              cg_infos[CPUSET_IDX]._mount_path = os::strdup(tmpmount);
+-            } else {
+-              log_warning(os, container)("Duplicate cpuset controllers detected. Picking %s, skipping %s.",
+-                                         cg_infos[CPUSET_IDX]._mount_path, tmpmount);
+-            }
+-          } else {
+-            cg_infos[CPUSET_IDX]._mount_path = os::strdup(tmpmount);
+-          }
+-          cg_infos[CPUSET_IDX]._root_mount_path = os::strdup(tmproot);
++          set_controller_paths(cg_infos, CPUSET_IDX, token, tmpmount, tmproot);
+           cg_infos[CPUSET_IDX]._data_complete = true;
+         } else if (strcmp(token, "cpu") == 0) {
+           any_cgroup_mounts_found = true;
+-          assert(cg_infos[CPU_IDX]._mount_path == NULL, "stomping of _mount_path");
+-          cg_infos[CPU_IDX]._mount_path = os::strdup(tmpmount);
+-          cg_infos[CPU_IDX]._root_mount_path = os::strdup(tmproot);
++          set_controller_paths(cg_infos, CPU_IDX, token, tmpmount, tmproot);
+           cg_infos[CPU_IDX]._data_complete = true;
+         } else if (strcmp(token, "cpuacct") == 0) {
+           any_cgroup_mounts_found = true;
+-          assert(cg_infos[CPUACCT_IDX]._mount_path == NULL, "stomping of _mount_path");
+-          cg_infos[CPUACCT_IDX]._mount_path = os::strdup(tmpmount);
+-          cg_infos[CPUACCT_IDX]._root_mount_path = os::strdup(tmproot);
++          set_controller_paths(cg_infos, CPUACCT_IDX, token, tmpmount, tmproot);
+           cg_infos[CPUACCT_IDX]._data_complete = true;
+         } else if (strcmp(token, "pids") == 0) {
+           any_cgroup_mounts_found = true;
+-          assert(cg_infos[PIDS_IDX]._mount_path == NULL, "stomping of _mount_path");
+-          cg_infos[PIDS_IDX]._mount_path = os::strdup(tmpmount);
+-          cg_infos[PIDS_IDX]._root_mount_path = os::strdup(tmproot);
++          set_controller_paths(cg_infos, PIDS_IDX, token, tmpmount, tmproot);
+           cg_infos[PIDS_IDX]._data_complete = true;
+         }
+       }
+diff --git a/src/hotspot/os/linux/cgroupSubsystem_linux.hpp b/src/hotspot/os/linux/cgroupSubsystem_linux.hpp
+index 2e3fc8e8bc78..91456b3d0e14 100644
+--- a/src/hotspot/os/linux/cgroupSubsystem_linux.hpp
++++ b/src/hotspot/os/linux/cgroupSubsystem_linux.hpp
+@@ -311,6 +311,11 @@ class CgroupSubsystemFactory: AllStatic {
+     }
+ #endif
+ 
++    static void set_controller_paths(CgroupInfo* cg_infos,
++                                     int controller,
++                                     const char* name,
++                                     char* mount_path,
++                                     char* root_path);
+     // Determine the cgroup type (version 1 or version 2), given
+     // relevant paths to files. Sets 'flags' accordingly.
+     static bool determine_type(CgroupInfo* cg_infos,
+diff --git a/test/hotspot/jtreg/containers/cgroup/CgroupSubsystemFactory.java b/test/hotspot/jtreg/containers/cgroup/CgroupSubsystemFactory.java
+index 54807119d82e..7eb78fa447fd 100644
+--- a/test/hotspot/jtreg/containers/cgroup/CgroupSubsystemFactory.java
++++ b/test/hotspot/jtreg/containers/cgroup/CgroupSubsystemFactory.java
+@@ -62,11 +62,19 @@ public class CgroupSubsystemFactory {
+     private Path cgroupv1MntInfoZeroHierarchy;
+     private Path cgroupv2CgInfoZeroHierarchy;
+     private Path cgroupv2MntInfoZeroHierarchy;
++    private Path cgroupv2MntInfoDouble;
++    private Path cgroupv2MntInfoDouble2;
+     private Path cgroupv1CgInfoNonZeroHierarchy;
+     private Path cgroupv1MntInfoNonZeroHierarchyOtherOrder;
+     private Path cgroupv1MntInfoNonZeroHierarchy;
+     private Path cgroupv1MntInfoDoubleCpuset;
+     private Path cgroupv1MntInfoDoubleCpuset2;
++    private Path cgroupv1MntInfoDoubleMemory;
++    private Path cgroupv1MntInfoDoubleMemory2;
++    private Path cgroupv1MntInfoDoubleCpu;
++    private Path cgroupv1MntInfoDoubleCpu2;
++    private Path cgroupv1MntInfoDoublePids;
++    private Path cgroupv1MntInfoDoublePids2;
+     private Path cgroupv1MntInfoSystemdOnly;
+     private String mntInfoEmpty = "";
+     private Path cgroupV1SelfCgroup;
+@@ -160,6 +168,15 @@ public class CgroupSubsystemFactory {
+     private String mntInfoCgroupv1MoreCpusetLine = "121 32 0:37 / /cpusets rw,relatime shared:69 - cgroup none rw,cpuset\n";
+     private String mntInfoCgroupv1DoubleCpuset = mntInfoCgroupv1MoreCpusetLine + mntInfoHybrid;
+     private String mntInfoCgroupv1DoubleCpuset2 =  mntInfoHybrid + mntInfoCgroupv1MoreCpusetLine;
++    private String mntInfoCgroupv1MoreMemoryLine = "1100 1098 0:28 / /memory rw,nosuid,nodev,noexec,relatime master:6 - cgroup cgroup rw,memory\n";
++    private String mntInfoCgroupv1DoubleMemory = mntInfoCgroupv1MoreMemoryLine + mntInfoHybrid;
++    private String mntInfoCgroupv1DoubleMemory2 = mntInfoHybrid + mntInfoCgroupv1MoreMemoryLine;
++    private String mntInfoCgroupv1DoubleCpuLine = "1101 1098 0:29 / /cpu,cpuacct rw,nosuid,nodev,noexec,relatime master:7 - cgroup cgroup rw,cpu,cpuacct\n";
++    private String mntInfoCgroupv1DoubleCpu = mntInfoCgroupv1DoubleCpuLine + mntInfoHybrid;
++    private String mntInfoCgroupv1DoubleCpu2 = mntInfoHybrid + mntInfoCgroupv1DoubleCpuLine;
++    private String mntInfoCgroupv1DoublePidsLine = "1107 1098 0:35 / /pids rw,nosuid,nodev,noexec,relatime master:13 - cgroup cgroup rw,pids\n";
++    private String mntInfoCgroupv1DoublePids = mntInfoCgroupv1DoublePidsLine + mntInfoHybrid;
++    private String mntInfoCgroupv1DoublePids2 = mntInfoHybrid + mntInfoCgroupv1DoublePidsLine;
+     private String cgroupsNonZeroHierarchy =
+             "#subsys_name hierarchy   num_cgroups enabled\n" +
+             "cpuset  3   1   1\n" +
+@@ -175,7 +192,11 @@ public class CgroupSubsystemFactory {
+             "hugetlb 6   1   1\n" +
+             "pids    9   80  1";  // hierarchy has to match procSelfCgroupHybridContent
+     private String mntInfoCgroupsV2Only =
+-            "28 21 0:25 / /sys/fs/cgroup rw,nosuid,nodev,noexec,relatime shared:4 - cgroup2 none rw,seclabel,nsdelegate";
++            "28 21 0:25 / /sys/fs/cgroup rw,nosuid,nodev,noexec,relatime shared:4 - cgroup2 none rw,seclabel,nsdelegate\n";
++    private String mntInfoCgroupsV2MoreLine =
++            "240 232 0:24 /../.. /cgroup-in ro,relatime - cgroup2 cgroup2 rw,nsdelegate\n";
++    private String mntInfoCgroupsV2Double = mntInfoCgroupsV2MoreLine + mntInfoCgroupsV2Only;
++    private String mntInfoCgroupsV2Double2 = mntInfoCgroupsV2Only + mntInfoCgroupsV2MoreLine;
+     private String mntInfoCgroupsV1SystemdOnly =
+             "35 26 0:26 / /sys/fs/cgroup/systemd rw,nosuid,nodev,noexec,relatime - cgroup systemd rw,name=systemd\n" +
+             "26 18 0:19 / /sys/fs/cgroup rw,relatime - tmpfs none rw,size=4k,mode=755\n";
+@@ -217,6 +238,12 @@ private void setup() {
+             cgroupv2MntInfoZeroHierarchy = Paths.get(existingDirectory.toString(), "mountinfo_cgroupv2");
+             Files.writeString(cgroupv2MntInfoZeroHierarchy, mntInfoCgroupsV2Only);
+ 
++            cgroupv2MntInfoDouble = Paths.get(existingDirectory.toString(), "mountinfo_cgroupv2_double");
++            Files.writeString(cgroupv2MntInfoDouble, mntInfoCgroupsV2Double);
++
++            cgroupv2MntInfoDouble2 = Paths.get(existingDirectory.toString(), "mountinfo_cgroupv2_double2");
++            Files.writeString(cgroupv2MntInfoDouble2, mntInfoCgroupsV2Double2);
++
+             cgroupv1CgInfoNonZeroHierarchy = Paths.get(existingDirectory.toString(), "cgroups_non_zero");
+             Files.writeString(cgroupv1CgInfoNonZeroHierarchy, cgroupsNonZeroHierarchy);
+ 
+@@ -244,6 +271,24 @@ private void setup() {
+             cgroupv1MntInfoDoubleCpuset2 = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_cpuset2");
+             Files.writeString(cgroupv1MntInfoDoubleCpuset2, mntInfoCgroupv1DoubleCpuset2);
+ 
++            cgroupv1MntInfoDoubleMemory = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_memory");
++            Files.writeString(cgroupv1MntInfoDoubleMemory, mntInfoCgroupv1DoubleMemory);
++
++            cgroupv1MntInfoDoubleMemory2 = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_memory2");
++            Files.writeString(cgroupv1MntInfoDoubleMemory2, mntInfoCgroupv1DoubleMemory2);
++
++            cgroupv1MntInfoDoubleCpu = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_cpu");
++            Files.writeString(cgroupv1MntInfoDoubleCpu, mntInfoCgroupv1DoubleCpu);
++
++            cgroupv1MntInfoDoubleCpu2 = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_cpu2");
++            Files.writeString(cgroupv1MntInfoDoubleCpu2, mntInfoCgroupv1DoubleCpu2);
++
++            cgroupv1MntInfoDoublePids = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_pids");
++            Files.writeString(cgroupv1MntInfoDoublePids, mntInfoCgroupv1DoublePids);
++
++            cgroupv1MntInfoDoublePids2 = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_double_pids2");
++            Files.writeString(cgroupv1MntInfoDoublePids2, mntInfoCgroupv1DoublePids2);
++
+             cgroupv1MntInfoSystemdOnly = Paths.get(existingDirectory.toString(), "mnt_info_cgroupv1_systemd_only");
+             Files.writeString(cgroupv1MntInfoSystemdOnly, mntInfoCgroupsV1SystemdOnly);
+ 
+@@ -291,14 +336,14 @@ public void testCgroupv1JoinControllerCombo(WhiteBox wb) {
+         System.out.println("testCgroupv1JoinControllerMounts PASSED!");
+     }
+ 
+-    public void testCgroupv1MultipleCpusetMounts(WhiteBox wb, Path mountInfo) {
++    public void testCgroupv1MultipleControllerMounts(WhiteBox wb, Path mountInfo) {
+         String procCgroups = cgroupv1CgInfoNonZeroHierarchy.toString();
+         String procSelfCgroup = cgroupV1SelfCgroup.toString();
+         String procSelfMountinfo = mountInfo.toString();
+         int retval = wb.validateCgroup(procCgroups, procSelfCgroup, procSelfMountinfo);
+-        Asserts.assertEQ(CGROUPS_V1, retval, "Multiple cpuset controllers, but only one in /sys/fs/cgroup");
++        Asserts.assertEQ(CGROUPS_V1, retval, "Multiple controllers, but only one in /sys/fs/cgroup");
+         Asserts.assertTrue(isValidCgroup(retval));
+-        System.out.println("testCgroupv1MultipleCpusetMounts PASSED!");
++        System.out.println("testCgroupv1MultipleControllerMounts PASSED!");
+     }
+ 
+     public void testCgroupv1SystemdOnly(WhiteBox wb) {
+@@ -341,10 +386,10 @@ public void testCgroupv1MissingMemoryController(WhiteBox wb) {
+         System.out.println("testCgroupv1MissingMemoryController PASSED!");
+     }
+ 
+-    public void testCgroupv2(WhiteBox wb) {
++    public void testCgroupv2(WhiteBox wb, Path mountInfo) {
+         String procCgroups = cgroupv2CgInfoZeroHierarchy.toString();
+         String procSelfCgroup = cgroupV2SelfCgroup.toString();
+-        String procSelfMountinfo = cgroupv2MntInfoZeroHierarchy.toString();
++        String procSelfMountinfo = mountInfo.toString();
+         int retval = wb.validateCgroup(procCgroups, procSelfCgroup, procSelfMountinfo);
+         Asserts.assertEQ(CGROUPS_V2, retval, "Expected");
+         Asserts.assertTrue(isValidCgroup(retval));
+@@ -388,13 +433,21 @@ public static void main(String[] args) throws Exception {
+         try {
+             test.testCgroupv1SystemdOnly(wb);
+             test.testCgroupv1NoMounts(wb);
+-            test.testCgroupv2(wb);
++            test.testCgroupv2(wb, test.cgroupv2MntInfoZeroHierarchy);
++            test.testCgroupv2(wb, test.cgroupv2MntInfoDouble);
++            test.testCgroupv2(wb, test.cgroupv2MntInfoDouble2);
+             test.testCgroupV1Hybrid(wb);
+             test.testCgroupV1HybridMntInfoOrder(wb);
+             test.testCgroupv1MissingMemoryController(wb);
+             test.testCgroupv2NoCgroup2Fs(wb);
+-            test.testCgroupv1MultipleCpusetMounts(wb, test.cgroupv1MntInfoDoubleCpuset);
+-            test.testCgroupv1MultipleCpusetMounts(wb, test.cgroupv1MntInfoDoubleCpuset2);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleCpuset);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleCpuset2);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleMemory);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleMemory2);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleCpu);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoubleCpu2);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoublePids);
++            test.testCgroupv1MultipleControllerMounts(wb, test.cgroupv1MntInfoDoublePids2);
+             test.testCgroupv1JoinControllerCombo(wb);
+             test.testNonZeroHierarchyOnlyFreezer(wb);
+         } finally {
+diff --git a/test/hotspot/jtreg/containers/docker/DockerBasicTest.java b/test/hotspot/jtreg/containers/docker/DockerBasicTest.java
+index bcbd2ffa21df..357eb3db4972 100644
+--- a/test/hotspot/jtreg/containers/docker/DockerBasicTest.java
++++ b/test/hotspot/jtreg/containers/docker/DockerBasicTest.java
+@@ -53,6 +53,7 @@ public static void main(String[] args) throws Exception {
+         try {
+             testJavaVersion();
+             testHelloDocker();
++            testJavaVersionWithCgMounts();
+         } finally {
+             if (!DockerTestUtils.RETAIN_IMAGE_AFTER_TEST) {
+                 DockerTestUtils.removeDockerImage(imageNameAndTag);
+@@ -81,4 +82,17 @@ private static void testHelloDocker() throws Exception {
+             .shouldHaveExitValue(0)
+             .shouldContain("Hello Docker");
+     }
++
++
++    private static void testJavaVersionWithCgMounts() throws Exception {
++        DockerRunOptions opts =
++            new DockerRunOptions(imageNameAndTag, "/jdk/bin/java", "-version")
++            .addDockerOpts("-v", "/sys/fs/cgroup:/cgroups-in:ro");
++
++        // Duplicated cgroup mounts should be handled by the container detection
++        // code and should not cause any error/warning output.
++        DockerTestUtils.dockerRunJava(opts)
++            .shouldHaveExitValue(0)
++            .shouldNotMatch("\\[os,container *\\]");
++    }
+ }
+diff --git a/test/hotspot/jtreg/containers/docker/TestCPUAwareness.java b/test/hotspot/jtreg/containers/docker/TestCPUAwareness.java
+index 93881c615bd9..a41dc9c39392 100644
+--- a/test/hotspot/jtreg/containers/docker/TestCPUAwareness.java
++++ b/test/hotspot/jtreg/containers/docker/TestCPUAwareness.java
+@@ -70,10 +70,11 @@ public static void main(String[] args) throws Exception {
+             testActiveProcessorCount(2, 2);
+ 
+             // cpu quota and period
+-            testCpuQuotaAndPeriod(50*1000, 100*1000);
+-            testCpuQuotaAndPeriod(100*1000, 100*1000);
+-            testCpuQuotaAndPeriod(150*1000, 100*1000);
+-            testCpuQuotaAndPeriod(400*1000, 100*1000);
++            testCpuQuotaAndPeriod(50*1000, 100*1000, false);
++            testCpuQuotaAndPeriod(100*1000, 100*1000, false);
++            testCpuQuotaAndPeriod(150*1000, 100*1000, false);
++            testCpuQuotaAndPeriod(400*1000, 100*1000, false);
++            testCpuQuotaAndPeriod(50*1000, 100*1000, true /* additional cgroup mount */);
+ 
+             testOperatingSystemMXBeanAwareness("0.5", "1");
+             testOperatingSystemMXBeanAwareness("1.0", "1");
+@@ -153,7 +154,7 @@ private static int adjustExpectedAPCForAvailableCPUs(int expectedAPC) {
+     }
+ 
+ 
+-    private static void testCpuQuotaAndPeriod(int quota, int period)
++    private static void testCpuQuotaAndPeriod(int quota, int period, boolean addCgmounts)
+         throws Exception {
+         Common.logNewTestCase("test cpu quota and period: ");
+         System.out.println("quota = " + quota);
+@@ -167,6 +168,10 @@ private static void testCpuQuotaAndPeriod(int quota, int period)
+             .addDockerOpts("--cpu-period=" + period)
+             .addDockerOpts("--cpu-quota=" + quota);
+ 
++        if (addCgmounts) {
++            opts = opts.addDockerOpts("--volume", "/sys/fs/cgroup:/cgroups-in:ro");
++        }
++
+         Common.run(opts)
+             .shouldMatch("CPU Period is.*" + period)
+             .shouldMatch("CPU Quota is.*" + quota)
+diff --git a/test/hotspot/jtreg/containers/docker/TestMemoryAwareness.java b/test/hotspot/jtreg/containers/docker/TestMemoryAwareness.java
+index ff5cd23cc65f..d6ff603157a6 100644
+--- a/test/hotspot/jtreg/containers/docker/TestMemoryAwareness.java
++++ b/test/hotspot/jtreg/containers/docker/TestMemoryAwareness.java
+@@ -63,10 +63,11 @@ public static void main(String[] args) throws Exception {
+         DockerTestUtils.buildJdkContainerImage(imageName);
+ 
+         try {
+-            testMemoryLimit("100m", "104857600");
+-            testMemoryLimit("500m", "524288000");
+-            testMemoryLimit("1g", "1073741824");
+-            testMemoryLimit("4g", "4294967296");
++            testMemoryLimit("100m", "104857600", false);
++            testMemoryLimit("500m", "524288000", false);
++            testMemoryLimit("1g", "1073741824", false);
++            testMemoryLimit("4g", "4294967296", false);
++            testMemoryLimit("100m", "104857600", true /* additional cgroup mount */);
+ 
+             testMemorySoftLimit("500m", "524288000");
+             testMemorySoftLimit("1g", "1073741824");
+@@ -98,7 +99,7 @@ public static void main(String[] args) throws Exception {
+     }
+ 
+ 
+-    private static void testMemoryLimit(String valueToSet, String expectedTraceValue)
++    private static void testMemoryLimit(String valueToSet, String expectedTraceValue, boolean addCgmounts)
+             throws Exception {
+ 
+         Common.logNewTestCase("memory limit: " + valueToSet);
+@@ -106,6 +107,10 @@ private static void testMemoryLimit(String valueToSet, String expectedTraceValue
+         DockerRunOptions opts = Common.newOpts(imageName)
+             .addDockerOpts("--memory", valueToSet);
+ 
++        if (addCgmounts) {
++            opts = opts.addDockerOpts("--volume", "/sys/fs/cgroup:/cgroups-in:ro");
++        }
++
+         Common.run(opts)
+             .shouldMatch("Memory Limit is:.*" + expectedTraceValue);
+     }
diff --git a/srcpkgs/openjdk19-bootstrap/template b/srcpkgs/openjdk19-bootstrap/template
new file mode 100644
index 0000000000000..25ac0a7a17a2c
--- /dev/null
+++ b/srcpkgs/openjdk19-bootstrap/template
@@ -0,0 +1,101 @@
+# Template file for 'openjdk19-bootstrap'
+pkgname=openjdk19-bootstrap
+version=19.0.2+7
+revision=1
+_gtest_ver=1.8.1
+_java_ver="${version%%.*}"
+_jdk_update="${version#*+}"
+_base_version="${version%+*}"
+_jdk_home="usr/lib/jvm/openjdk${_java_ver}"
+archs="x86_64* aarch64*"
+create_wrksrc=yes
+build_wrksrc="jdk${_java_ver}u-jdk-${version/+/-}"
+build_style=gnu-configure
+configure_args="--disable-warnings-as-errors
+ --enable-unlimited-crypto
+ --with-zlib=system
+ --with-libjpeg=system
+ --with-giflib=system
+ --with-libpng=system
+ --with-lcms=system
+ --with-jtreg=no
+ --with-gtest=../googletest-release-${_gtest_ver}
+ --with-debug-level=release
+ --with-native-debug-symbols=internal
+ --with-jobs=${XBPS_ORIG_MAKEJOBS}
+ --with-version-pre=
+ --with-version-build=${_jdk_update}
+ --with-version-opt=void-r${revision}
+ --with-vendor-name=Void
+ --with-vendor-url=https://voidlinux.org/
+ --with-vendor-bug-url=https://github.com/void-linux/void-packages/issues
+ --with-vendor-vm-bug-url=https://github.com/void-linux/void-packages/issues
+ --with-boot-jdk=/usr/lib/jvm/openjdk$(( _java_ver - 1 ))"
+make_build_args="images"
+make_check_target="test-hotspot-gtest"
+hostmakedepends="pkg-config automake autoconf cpio tar unzip zip ca-certificates
+ openssl zlib-devel which make-ca openjdk$(( _java_ver - 1 ))-bootstrap"
+makedepends="libXrender-devel libXtst-devel libXt-devel libXrandr-devel
+ giflib-devel libjpeg-turbo-devel cups-devel freetype-devel alsa-lib-devel
+ fontconfig-devel zlib-devel lcms2-devel"
+short_desc="OpenJDK Java Development Kit (bootstrap version ${_java_ver})"
+maintainer="classabbyamp <void@placeviolette.net>"
+license="GPL-2.0-only WITH Classpath-exception-2.0"
+homepage="http://openjdk.java.net/"
+distfiles="https://github.com/openjdk/jdk${_java_ver}u/archive/jdk-${version}.tar.gz
+ https://github.com/google/googletest/archive/refs/tags/release-${_gtest_ver}.tar.gz"
+checksum="5903efd527dd08e9c235c8822e3d5699c3d18a8618c3e533307e8d6491ffbbf0
+ 9bf1fe5182a604b4135edc1a425ae356c9ad15e9b23f9f12a02e80184c3a249c"
+nocross=yes
+repository=bootstrap
+patch_args="-Np1 --directory=$build_wrksrc"
+
+# Build and check are still parallel, but don't use -jN.
+disable_parallel_build=yes
+disable_parallel_check=yes
+
+case "$XBPS_TARGET_MACHINE" in
+	i686*|arm*) broken="Unsupported architecture" ;;
+esac
+
+post_extract() {
+	chmod +x "$build_wrksrc"/configure
+	if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+		rm -r "$build_wrksrc"/src/jdk.hotspot.agent
+	fi
+}
+
+do_configure() {
+	CFLAGS=${CFLAGS/-D_FORTIFY_SOURCE=2/}
+	CXXFLAGS=${CXXFLAGS/-D_FORTIFY_SOURCE=2/}
+
+	# force ELFv2 for ppc64 just in case
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*)
+			CFLAGS+=" -DABI_ELFv2"
+			CXXFLAGS+=" -DABI_ELFv2"
+			;;
+	esac
+
+	configure_args=${configure_args/--with-libtool-sysroot=$XBPS_CROSS_BASE}
+	if [ "$XBPS_CCACHE" ] && [ -z "$CROSS_BUILD" ]; then
+		configure_args+=" --enable-ccache"
+		CC="/usr/bin/cc"
+		CXX="/usr/bin/c++"
+	fi
+	./configure ${configure_args} \
+		--with-extra-cflags="$CFLAGS" \
+		--with-extra-cxxflags="$CXXFLAGS" \
+		--with-extra-ldflags="$LDFLAGS" \
+		READELF="$READELF" AR="$AR" STRIP="$STRIP" NM="$NM" \
+		OBJDUMP="$OBJDUMP" OBJCOPY="$OBJCOPY"
+}
+
+pre_install() {
+	make_install_args="INSTALL_PREFIX=${DESTDIR}/usr/lib"
+}
+
+post_install() {
+	rm -rf "${DESTDIR}"/usr/lib/bin
+	mv "${DESTDIR}"/usr/lib/jvm/openjdk-"${_base_version}" "${DESTDIR}/$_jdk_home"
+}
diff --git a/srcpkgs/openjdk19-bootstrap/update b/srcpkgs/openjdk19-bootstrap/update
new file mode 100644
index 0000000000000..d8abe90aa84d2
--- /dev/null
+++ b/srcpkgs/openjdk19-bootstrap/update
@@ -0,0 +1,4 @@
+site="https://github.com/openjdk/jdk19u/tags"
+pattern='jdk-\K19\.[\d.+]+(?=\.)'
+# don't need to update the bootstrap package
+ignore="*"

From e7c786c6622121a2b804a8e04d4aa51a46780d0d Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Fri, 22 Dec 2023 00:47:05 -0500
Subject: [PATCH 11/12] New package: openjdk20-bootstrap-20.0.2+9

---
 .../patches/FixNullPtrCast.patch              |  36 +++++++
 srcpkgs/openjdk20-bootstrap/template          | 101 ++++++++++++++++++
 srcpkgs/openjdk20-bootstrap/update            |   4 +
 3 files changed, 141 insertions(+)
 create mode 100644 srcpkgs/openjdk20-bootstrap/patches/FixNullPtrCast.patch
 create mode 100644 srcpkgs/openjdk20-bootstrap/template
 create mode 100644 srcpkgs/openjdk20-bootstrap/update

diff --git a/srcpkgs/openjdk20-bootstrap/patches/FixNullPtrCast.patch b/srcpkgs/openjdk20-bootstrap/patches/FixNullPtrCast.patch
new file mode 100644
index 0000000000000..6f05158792732
--- /dev/null
+++ b/srcpkgs/openjdk20-bootstrap/patches/FixNullPtrCast.patch
@@ -0,0 +1,36 @@
+Patch taken from Alpine: https://git.alpinelinux.org/aports/tree/community/openjdk17/FixNullPtrCast.patch
+
+same fix for armv7l-musl added
+
+Subject: Fix cast errors with latest GCC
+Upstream: No
+Author: Simon Frankenberger <simon-alpine@fraho.eu>
+
+This patch fixes one remaining casting error reported by GCC 12 for aarch64
+
+--- old/src/hotspot/cpu/aarch64/interpreterRT_aarch64.cpp
++++ new/src/hotspot/cpu/aarch64/interpreterRT_aarch64.cpp
+@@ -267,7 +267,7 @@
+ 
+   virtual void pass_object() {
+     intptr_t* addr = single_slot_addr();
+-    intptr_t value = *addr == 0 ? NULL : (intptr_t)addr;
++    intptr_t value = *addr == 0 ? (intptr_t) 0 : (intptr_t)addr;
+     if (pass_gpr(value) < 0) {
+       pass_stack<>(value);
+     }
+
+--- old/src/hotspot/cpu/arm/interpreterRT_arm.cpp
++++ new/src/hotspot/cpu/arm/interpreterRT_arm.cpp
+@@ -306,8 +306,8 @@
+   virtual void pass_object() {
+     intptr_t from_addr = (intptr_t)(_from + Interpreter::local_offset_in_bytes(0));
+     if(_last_gp < GPR_PARAMS) {
+-      _toGP[_last_gp++] = (*(intptr_t*)from_addr == 0) ? NULL : from_addr;
++      _toGP[_last_gp++] = (*(intptr_t*)from_addr == 0) ? (intptr_t) 0 : (intptr_t)from_addr;
+     } else {
+-      *_to++ = (*(intptr_t*)from_addr == 0) ? NULL : from_addr;
++      *_to++ = (*(intptr_t*)from_addr == 0) ? (intptr_t) 0 : (intptr_t)from_addr;
+     }
+     _from -= Interpreter::stackElementSize;
+   }
diff --git a/srcpkgs/openjdk20-bootstrap/template b/srcpkgs/openjdk20-bootstrap/template
new file mode 100644
index 0000000000000..a23849827ce9a
--- /dev/null
+++ b/srcpkgs/openjdk20-bootstrap/template
@@ -0,0 +1,101 @@
+# Template file for 'openjdk20-bootstrap'
+pkgname=openjdk20-bootstrap
+version=20.0.2+9
+revision=1
+_gtest_ver=1.8.1
+_java_ver="${version%%.*}"
+_jdk_update="${version#*+}"
+_base_version="${version%+*}"
+_jdk_home="usr/lib/jvm/openjdk${_java_ver}"
+archs="x86_64* aarch64*"
+create_wrksrc=yes
+build_wrksrc="jdk${_java_ver}u-jdk-${version/+/-}"
+build_style=gnu-configure
+configure_args="--disable-warnings-as-errors
+ --enable-unlimited-crypto
+ --with-zlib=system
+ --with-libjpeg=system
+ --with-giflib=system
+ --with-libpng=system
+ --with-lcms=system
+ --with-jtreg=no
+ --with-gtest=../googletest-release-${_gtest_ver}
+ --with-debug-level=release
+ --with-native-debug-symbols=internal
+ --with-jobs=${XBPS_ORIG_MAKEJOBS}
+ --with-version-pre=
+ --with-version-build=${_jdk_update}
+ --with-version-opt=void-r${revision}
+ --with-vendor-name=Void
+ --with-vendor-url=https://voidlinux.org/
+ --with-vendor-bug-url=https://github.com/void-linux/void-packages/issues
+ --with-vendor-vm-bug-url=https://github.com/void-linux/void-packages/issues
+ --with-boot-jdk=/usr/lib/jvm/openjdk$(( _java_ver - 1 ))"
+make_build_args="images"
+make_check_target="test-hotspot-gtest"
+hostmakedepends="pkg-config automake autoconf cpio tar unzip zip ca-certificates
+ openssl zlib-devel which make-ca openjdk$(( _java_ver - 1 ))-bootstrap"
+makedepends="libXrender-devel libXtst-devel libXt-devel libXrandr-devel
+ giflib-devel libjpeg-turbo-devel cups-devel freetype-devel alsa-lib-devel
+ fontconfig-devel zlib-devel lcms2-devel"
+short_desc="OpenJDK Java Development Kit (bootstrap version ${_java_ver})"
+maintainer="classabbyamp <void@placeviolette.net>"
+license="GPL-2.0-only WITH Classpath-exception-2.0"
+homepage="http://openjdk.java.net/"
+distfiles="https://github.com/openjdk/jdk${_java_ver}u/archive/jdk-${version}.tar.gz
+ https://github.com/google/googletest/archive/refs/tags/release-${_gtest_ver}.tar.gz"
+checksum="4d6f176075d5f2ce62fd16ebd5cc4c27a3e551ce4d3d3bc0e9946454e52fc88d
+ 9bf1fe5182a604b4135edc1a425ae356c9ad15e9b23f9f12a02e80184c3a249c"
+nocross=yes
+repository=bootstrap
+patch_args="-Np1 --directory=$build_wrksrc"
+
+# Build and check are still parallel, but don't use -jN.
+disable_parallel_build=yes
+disable_parallel_check=yes
+
+case "$XBPS_TARGET_MACHINE" in
+	i686*|arm*) broken="Unsupported architecture" ;;
+esac
+
+post_extract() {
+	chmod +x "$build_wrksrc"/configure
+	if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+		rm -r "$build_wrksrc"/src/jdk.hotspot.agent
+	fi
+}
+
+do_configure() {
+	CFLAGS=${CFLAGS/-D_FORTIFY_SOURCE=2/}
+	CXXFLAGS=${CXXFLAGS/-D_FORTIFY_SOURCE=2/}
+
+	# force ELFv2 for ppc64 just in case
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*)
+			CFLAGS+=" -DABI_ELFv2"
+			CXXFLAGS+=" -DABI_ELFv2"
+			;;
+	esac
+
+	configure_args=${configure_args/--with-libtool-sysroot=$XBPS_CROSS_BASE}
+	if [ "$XBPS_CCACHE" ] && [ -z "$CROSS_BUILD" ]; then
+		configure_args+=" --enable-ccache"
+		CC="/usr/bin/cc"
+		CXX="/usr/bin/c++"
+	fi
+	./configure ${configure_args} \
+		--with-extra-cflags="$CFLAGS" \
+		--with-extra-cxxflags="$CXXFLAGS" \
+		--with-extra-ldflags="$LDFLAGS" \
+		READELF="$READELF" AR="$AR" STRIP="$STRIP" NM="$NM" \
+		OBJDUMP="$OBJDUMP" OBJCOPY="$OBJCOPY"
+}
+
+pre_install() {
+	make_install_args="INSTALL_PREFIX=${DESTDIR}/usr/lib"
+}
+
+post_install() {
+	rm -rf "${DESTDIR}"/usr/lib/bin
+	mv "${DESTDIR}"/usr/lib/jvm/openjdk-"${_base_version}" "${DESTDIR}/$_jdk_home"
+}
diff --git a/srcpkgs/openjdk20-bootstrap/update b/srcpkgs/openjdk20-bootstrap/update
new file mode 100644
index 0000000000000..825bd945bfc9a
--- /dev/null
+++ b/srcpkgs/openjdk20-bootstrap/update
@@ -0,0 +1,4 @@
+site="https://github.com/openjdk/jdk20u/tags"
+pattern='jdk-\K20\.[\d.+]+(?=\.)'
+# don't need to update the bootstrap package
+ignore="*"

From f550c41c8a34c106bcb635aea44e8cb3434a1221 Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Fri, 22 Dec 2023 00:47:14 -0500
Subject: [PATCH 12/12] New package: openjdk21-21.0.1+12

---
 srcpkgs/openjdk21-doc         |   1 +
 srcpkgs/openjdk21-jmods       |   1 +
 srcpkgs/openjdk21-jre         |   1 +
 srcpkgs/openjdk21-src         |   1 +
 srcpkgs/openjdk21-static-libs |   1 +
 srcpkgs/openjdk21/template    | 194 ++++++++++++++++++++++++++++++++++
 srcpkgs/openjdk21/update      |   1 +
 7 files changed, 200 insertions(+)
 create mode 120000 srcpkgs/openjdk21-doc
 create mode 120000 srcpkgs/openjdk21-jmods
 create mode 120000 srcpkgs/openjdk21-jre
 create mode 120000 srcpkgs/openjdk21-src
 create mode 120000 srcpkgs/openjdk21-static-libs
 create mode 100644 srcpkgs/openjdk21/template
 create mode 100644 srcpkgs/openjdk21/update

diff --git a/srcpkgs/openjdk21-doc b/srcpkgs/openjdk21-doc
new file mode 120000
index 0000000000000..57e991f86dff5
--- /dev/null
+++ b/srcpkgs/openjdk21-doc
@@ -0,0 +1 @@
+openjdk21
\ No newline at end of file
diff --git a/srcpkgs/openjdk21-jmods b/srcpkgs/openjdk21-jmods
new file mode 120000
index 0000000000000..57e991f86dff5
--- /dev/null
+++ b/srcpkgs/openjdk21-jmods
@@ -0,0 +1 @@
+openjdk21
\ No newline at end of file
diff --git a/srcpkgs/openjdk21-jre b/srcpkgs/openjdk21-jre
new file mode 120000
index 0000000000000..57e991f86dff5
--- /dev/null
+++ b/srcpkgs/openjdk21-jre
@@ -0,0 +1 @@
+openjdk21
\ No newline at end of file
diff --git a/srcpkgs/openjdk21-src b/srcpkgs/openjdk21-src
new file mode 120000
index 0000000000000..57e991f86dff5
--- /dev/null
+++ b/srcpkgs/openjdk21-src
@@ -0,0 +1 @@
+openjdk21
\ No newline at end of file
diff --git a/srcpkgs/openjdk21-static-libs b/srcpkgs/openjdk21-static-libs
new file mode 120000
index 0000000000000..57e991f86dff5
--- /dev/null
+++ b/srcpkgs/openjdk21-static-libs
@@ -0,0 +1 @@
+openjdk21
\ No newline at end of file
diff --git a/srcpkgs/openjdk21/template b/srcpkgs/openjdk21/template
new file mode 100644
index 0000000000000..87099542c3373
--- /dev/null
+++ b/srcpkgs/openjdk21/template
@@ -0,0 +1,194 @@
+# Template file for 'openjdk21'
+pkgname=openjdk21
+version=21.0.1+12
+revision=1
+_gtest_ver=1.13.0
+_java_ver="${version%%.*}"
+_jdk_update="${version#*+}"
+_base_version="${version%+*}"
+_jdk_home="usr/lib/jvm/openjdk${_java_ver}"
+archs="x86_64* aarch64*"
+create_wrksrc=yes
+build_wrksrc="jdk${_java_ver}u-jdk-${version/+/-}"
+build_style=gnu-configure
+configure_args="--disable-warnings-as-errors
+ --enable-unlimited-crypto
+ --with-zlib=system
+ --with-libjpeg=system
+ --with-giflib=system
+ --with-libpng=system
+ --with-lcms=system
+ --with-jtreg=no
+ --with-gtest=../googletest-${_gtest_ver}
+ --with-debug-level=release
+ --with-native-debug-symbols=internal
+ --with-jobs=${XBPS_ORIG_MAKEJOBS}
+ --with-version-pre=
+ --with-version-build=${_jdk_update}
+ --with-version-opt=void-r${revision}
+ --with-vendor-name=Void
+ --with-vendor-url=https://voidlinux.org/
+ --with-vendor-bug-url=https://github.com/void-linux/void-packages/issues
+ --with-vendor-vm-bug-url=https://github.com/void-linux/void-packages/issues"
+make_build_args="images static-libs-image $(vopt_if docs docs)"
+make_install_args="INSTALL_PREFIX=\"${DESTDIR}/usr/lib\""
+make_check_target="test-hotspot-gtest"
+hostmakedepends="pkg-config automake autoconf cpio tar unzip zip ca-certificates
+ openssl zlib-devel which make-ca openjdk20-bootstrap"
+makedepends="libXrender-devel libXtst-devel libXt-devel libXrandr-devel
+ giflib-devel libjpeg-turbo-devel cups-devel freetype-devel alsa-lib-devel
+ fontconfig-devel zlib-devel lcms2-devel"
+depends="${pkgname}-jre-${version}_${revision}"
+short_desc="OpenJDK Java Development Kit (version ${_java_ver})"
+maintainer="classabbyamp <void@placeviolette.net>"
+license="GPL-2.0-only WITH Classpath-exception-2.0"
+homepage="http://openjdk.java.net/"
+distfiles="https://github.com/openjdk/jdk${_java_ver}u/archive/jdk-${version}.tar.gz
+ https://github.com/google/googletest/archive/refs/tags/v${_gtest_ver}.tar.gz"
+checksum="9943e3814d3c1a31f1449f09a8b67df54841944f855a1d372be892c5e6b19217
+ ad7fdba11ea011c1d925b3289cf4af2c66a352e18d4c7264392fead75e919363"
+alternatives="jdk:/usr/lib/jvm/default-jdk:/${_jdk_home}"
+provides="java-environment-${version}_1"
+patch_args="-Np1 --directory=$build_wrksrc"
+
+# Build and check are still parallel, but don't use -jN.
+disable_parallel_build=yes
+disable_parallel_check=yes
+build_options="docs"
+
+case "$XBPS_TARGET_MACHINE" in
+	ppc64*) ;;
+	# no hotspot JIT for ppc32
+	ppc*) _use_zero=yes ;;
+	i686*|arm*) broken="Unsupported architecture" ;;
+esac
+
+if [ -n "$_use_zero" ]; then
+	makedepends+=" libffi-devel"
+	configure_args+=" --with-jvm-variants=zero"
+	case "$XBPS_TARGET_MACHINE" in
+	ppc*) configure_args+=" --with-boot-jdk-jvmargs=-XX:ThreadStackSize=2560";;
+	esac
+fi
+configure_args+=" --with-boot-jdk-jvmargs=-Xlog:disable"
+
+case "$XBPS_TARGET_LIBC" in
+	glibc) build_options_default+=" docs";;
+esac
+
+if [ ! "$CROSS_BUILD" ]; then
+	hostmakedepends+=" openjdk20-bootstrap"
+	configure_args+=" --with-boot-jdk=/usr/lib/jvm/openjdk20"
+else
+	hostmakedepends+=" openjdk21"
+	configure_args+=" --with-boot-jdk=/usr/lib/jvm/openjdk21"
+fi
+
+post_extract() {
+	chmod +x $build_wrksrc/configure
+	if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+		rm -r $build_wrksrc/src/jdk.hotspot.agent
+	fi
+}
+
+do_configure() {
+	CFLAGS=${CFLAGS/-D_FORTIFY_SOURCE=2/}
+	CXXFLAGS=${CXXFLAGS/-D_FORTIFY_SOURCE=2/}
+
+	# force ELFv2 for ppc64 just in case
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*)
+			CFLAGS+=" -DABI_ELFv2"
+			CXXFLAGS+=" -DABI_ELFv2"
+			;;
+	esac
+
+	configure_args=${configure_args/--with-libtool-sysroot=$XBPS_CROSS_BASE}
+	if [ "$XBPS_CCACHE" ] && [ -z "$CROSS_BUILD" ]; then
+		configure_args+=" --enable-ccache"
+		CC="/usr/bin/cc"
+		CXX="/usr/bin/c++"
+	fi
+	./configure ${configure_args} \
+		--with-extra-cflags="$CFLAGS" \
+		--with-extra-cxxflags="$CXXFLAGS" \
+		--with-extra-ldflags="$LDFLAGS" \
+		READELF=$READELF AR=$AR STRIP=$STRIP NM=$NM \
+		OBJDUMP=$OBJDUMP OBJCOPY=$OBJCOPY
+}
+
+post_install() {
+	rm -rf ${DESTDIR}/usr/lib/bin
+	mv ${DESTDIR}/usr/lib/jvm/openjdk-${_base_version} ${DESTDIR}/$_jdk_home
+	vcopy build/*-release/images/static-libs/lib $_jdk_home
+	vmkdir $_jdk_home/lib/security
+	make-ca -g -f --destdir "${PWD}/ca" -k "${DESTDIR}/$_jdk_home/bin/keytool"
+	mv ./ca/etc/pki/tls/java/cacerts ${DESTDIR}/$_jdk_home/lib/security/
+	chmod -R ugo+rw ./ca
+	rm -rf ./ca
+}
+
+subpackages="openjdk21-static-libs openjdk21-src openjdk21-jre openjdk21-doc openjdk21-jmods"
+
+openjdk21-jre_package() {
+	shlib_provides="libawt.so libawt_xawt.so libjava.so libjli.so libjvm.so libjawt.so"
+	short_desc+=" - runtime components"
+	provides="java-runtime-${version}_1"
+	depends="openjdk-common"
+	alternatives="java:/usr/lib/jvm/default-jre:/${_jdk_home}"
+	pkg_install() {
+		for bin in java jfr keytool rmiregistry; do
+			vmove "${_jdk_home}/bin/${bin}"
+			vmove "${_jdk_home}/man/man1/${bin}.1"
+		done
+
+		for f in lib legal conf release; do
+			vmove $_jdk_home/$f
+		done
+
+		vlicense ASSEMBLY_EXCEPTION
+		vlicense LICENSE
+	}
+}
+
+openjdk21-doc_package() {
+	nostrip=yes
+	noverifyrdeps=yes
+	noshlibprovides=yes
+	short_desc+=" - documentation"
+	if [ -z "$build_option_docs" ]; then
+		build_style=meta
+	fi
+	pkg_install() {
+		if [ "$build_option_docs" ]; then
+			local _docdir=usr/share/doc/openjdk$_java_ver
+			vmkdir $_docdir
+			cp -a $wrksrc/$build_wrksrc/build/linux-*/images/docs/* ${PKGDESTDIR}/$_docdir
+		fi
+	}
+}
+
+openjdk21-src_package() {
+	nostrip=yes
+	noverifyrdeps=yes
+	noshlibprovides=yes
+	short_desc+=" - source code"
+	pkg_install() {
+		vmove "$_jdk_home/lib/src.zip"
+	}
+}
+
+openjdk21-static-libs_package() {
+	short_desc+=" - static libs"
+	pkg_install() {
+		vmove "$_jdk_home/lib/*.a"
+	}
+}
+
+openjdk21-jmods_package() {
+	short_desc+=" - JMODs"
+	depends="${sourcepkg}-${version}_${revision}"
+	pkg_install() {
+		vmove $_jdk_home/jmods
+	}
+}
diff --git a/srcpkgs/openjdk21/update b/srcpkgs/openjdk21/update
new file mode 100644
index 0000000000000..0090f26b68e1b
--- /dev/null
+++ b/srcpkgs/openjdk21/update
@@ -0,0 +1 @@
+pattern='jdk-\K21\.[\d.+]+(?=\.)'

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PR PATCH] [Updated] jdk21
  2023-12-23  0:38 [PR PATCH] jdk21 classabbyamp
  2023-12-23  0:41 ` [PR PATCH] [Updated] jdk21 classabbyamp
@ 2023-12-24  4:16 ` classabbyamp
  2023-12-24 14:55 ` [PR PATCH] [Merged]: jdk21 classabbyamp
  2 siblings, 0 replies; 4+ messages in thread
From: classabbyamp @ 2023-12-24  4:16 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 443 bytes --]

There is an updated pull request by classabbyamp against master on the void-packages repository

https://github.com/classabbyamp/void-packages jdk21
https://github.com/void-linux/void-packages/pull/47882

jdk21
#### Testing the changes
- I tested the changes in this PR: **YES**

test please: https://files.placeviolette.net/jdk21/

[ci skip]



A patch file from https://github.com/void-linux/void-packages/pull/47882.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-jdk21-47882.patch --]
[-- Type: text/x-diff, Size: 8274 bytes --]

From 8b5d66621d608d69813d3a1d7fd1ba15fa9bb4d4 Mon Sep 17 00:00:00 2001
From: classabbyamp <void@placeviolette.net>
Date: Fri, 22 Dec 2023 00:47:14 -0500
Subject: [PATCH] New package: openjdk21-21.0.1+12

---
 srcpkgs/openjdk21-doc         |   1 +
 srcpkgs/openjdk21-jmods       |   1 +
 srcpkgs/openjdk21-jre         |   1 +
 srcpkgs/openjdk21-src         |   1 +
 srcpkgs/openjdk21-static-libs |   1 +
 srcpkgs/openjdk21/template    | 194 ++++++++++++++++++++++++++++++++++
 srcpkgs/openjdk21/update      |   1 +
 7 files changed, 200 insertions(+)
 create mode 120000 srcpkgs/openjdk21-doc
 create mode 120000 srcpkgs/openjdk21-jmods
 create mode 120000 srcpkgs/openjdk21-jre
 create mode 120000 srcpkgs/openjdk21-src
 create mode 120000 srcpkgs/openjdk21-static-libs
 create mode 100644 srcpkgs/openjdk21/template
 create mode 100644 srcpkgs/openjdk21/update

diff --git a/srcpkgs/openjdk21-doc b/srcpkgs/openjdk21-doc
new file mode 120000
index 0000000000000..57e991f86dff5
--- /dev/null
+++ b/srcpkgs/openjdk21-doc
@@ -0,0 +1 @@
+openjdk21
\ No newline at end of file
diff --git a/srcpkgs/openjdk21-jmods b/srcpkgs/openjdk21-jmods
new file mode 120000
index 0000000000000..57e991f86dff5
--- /dev/null
+++ b/srcpkgs/openjdk21-jmods
@@ -0,0 +1 @@
+openjdk21
\ No newline at end of file
diff --git a/srcpkgs/openjdk21-jre b/srcpkgs/openjdk21-jre
new file mode 120000
index 0000000000000..57e991f86dff5
--- /dev/null
+++ b/srcpkgs/openjdk21-jre
@@ -0,0 +1 @@
+openjdk21
\ No newline at end of file
diff --git a/srcpkgs/openjdk21-src b/srcpkgs/openjdk21-src
new file mode 120000
index 0000000000000..57e991f86dff5
--- /dev/null
+++ b/srcpkgs/openjdk21-src
@@ -0,0 +1 @@
+openjdk21
\ No newline at end of file
diff --git a/srcpkgs/openjdk21-static-libs b/srcpkgs/openjdk21-static-libs
new file mode 120000
index 0000000000000..57e991f86dff5
--- /dev/null
+++ b/srcpkgs/openjdk21-static-libs
@@ -0,0 +1 @@
+openjdk21
\ No newline at end of file
diff --git a/srcpkgs/openjdk21/template b/srcpkgs/openjdk21/template
new file mode 100644
index 0000000000000..87099542c3373
--- /dev/null
+++ b/srcpkgs/openjdk21/template
@@ -0,0 +1,194 @@
+# Template file for 'openjdk21'
+pkgname=openjdk21
+version=21.0.1+12
+revision=1
+_gtest_ver=1.13.0
+_java_ver="${version%%.*}"
+_jdk_update="${version#*+}"
+_base_version="${version%+*}"
+_jdk_home="usr/lib/jvm/openjdk${_java_ver}"
+archs="x86_64* aarch64*"
+create_wrksrc=yes
+build_wrksrc="jdk${_java_ver}u-jdk-${version/+/-}"
+build_style=gnu-configure
+configure_args="--disable-warnings-as-errors
+ --enable-unlimited-crypto
+ --with-zlib=system
+ --with-libjpeg=system
+ --with-giflib=system
+ --with-libpng=system
+ --with-lcms=system
+ --with-jtreg=no
+ --with-gtest=../googletest-${_gtest_ver}
+ --with-debug-level=release
+ --with-native-debug-symbols=internal
+ --with-jobs=${XBPS_ORIG_MAKEJOBS}
+ --with-version-pre=
+ --with-version-build=${_jdk_update}
+ --with-version-opt=void-r${revision}
+ --with-vendor-name=Void
+ --with-vendor-url=https://voidlinux.org/
+ --with-vendor-bug-url=https://github.com/void-linux/void-packages/issues
+ --with-vendor-vm-bug-url=https://github.com/void-linux/void-packages/issues"
+make_build_args="images static-libs-image $(vopt_if docs docs)"
+make_install_args="INSTALL_PREFIX=\"${DESTDIR}/usr/lib\""
+make_check_target="test-hotspot-gtest"
+hostmakedepends="pkg-config automake autoconf cpio tar unzip zip ca-certificates
+ openssl zlib-devel which make-ca openjdk20-bootstrap"
+makedepends="libXrender-devel libXtst-devel libXt-devel libXrandr-devel
+ giflib-devel libjpeg-turbo-devel cups-devel freetype-devel alsa-lib-devel
+ fontconfig-devel zlib-devel lcms2-devel"
+depends="${pkgname}-jre-${version}_${revision}"
+short_desc="OpenJDK Java Development Kit (version ${_java_ver})"
+maintainer="classabbyamp <void@placeviolette.net>"
+license="GPL-2.0-only WITH Classpath-exception-2.0"
+homepage="http://openjdk.java.net/"
+distfiles="https://github.com/openjdk/jdk${_java_ver}u/archive/jdk-${version}.tar.gz
+ https://github.com/google/googletest/archive/refs/tags/v${_gtest_ver}.tar.gz"
+checksum="9943e3814d3c1a31f1449f09a8b67df54841944f855a1d372be892c5e6b19217
+ ad7fdba11ea011c1d925b3289cf4af2c66a352e18d4c7264392fead75e919363"
+alternatives="jdk:/usr/lib/jvm/default-jdk:/${_jdk_home}"
+provides="java-environment-${version}_1"
+patch_args="-Np1 --directory=$build_wrksrc"
+
+# Build and check are still parallel, but don't use -jN.
+disable_parallel_build=yes
+disable_parallel_check=yes
+build_options="docs"
+
+case "$XBPS_TARGET_MACHINE" in
+	ppc64*) ;;
+	# no hotspot JIT for ppc32
+	ppc*) _use_zero=yes ;;
+	i686*|arm*) broken="Unsupported architecture" ;;
+esac
+
+if [ -n "$_use_zero" ]; then
+	makedepends+=" libffi-devel"
+	configure_args+=" --with-jvm-variants=zero"
+	case "$XBPS_TARGET_MACHINE" in
+	ppc*) configure_args+=" --with-boot-jdk-jvmargs=-XX:ThreadStackSize=2560";;
+	esac
+fi
+configure_args+=" --with-boot-jdk-jvmargs=-Xlog:disable"
+
+case "$XBPS_TARGET_LIBC" in
+	glibc) build_options_default+=" docs";;
+esac
+
+if [ ! "$CROSS_BUILD" ]; then
+	hostmakedepends+=" openjdk20-bootstrap"
+	configure_args+=" --with-boot-jdk=/usr/lib/jvm/openjdk20"
+else
+	hostmakedepends+=" openjdk21"
+	configure_args+=" --with-boot-jdk=/usr/lib/jvm/openjdk21"
+fi
+
+post_extract() {
+	chmod +x $build_wrksrc/configure
+	if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+		rm -r $build_wrksrc/src/jdk.hotspot.agent
+	fi
+}
+
+do_configure() {
+	CFLAGS=${CFLAGS/-D_FORTIFY_SOURCE=2/}
+	CXXFLAGS=${CXXFLAGS/-D_FORTIFY_SOURCE=2/}
+
+	# force ELFv2 for ppc64 just in case
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*)
+			CFLAGS+=" -DABI_ELFv2"
+			CXXFLAGS+=" -DABI_ELFv2"
+			;;
+	esac
+
+	configure_args=${configure_args/--with-libtool-sysroot=$XBPS_CROSS_BASE}
+	if [ "$XBPS_CCACHE" ] && [ -z "$CROSS_BUILD" ]; then
+		configure_args+=" --enable-ccache"
+		CC="/usr/bin/cc"
+		CXX="/usr/bin/c++"
+	fi
+	./configure ${configure_args} \
+		--with-extra-cflags="$CFLAGS" \
+		--with-extra-cxxflags="$CXXFLAGS" \
+		--with-extra-ldflags="$LDFLAGS" \
+		READELF=$READELF AR=$AR STRIP=$STRIP NM=$NM \
+		OBJDUMP=$OBJDUMP OBJCOPY=$OBJCOPY
+}
+
+post_install() {
+	rm -rf ${DESTDIR}/usr/lib/bin
+	mv ${DESTDIR}/usr/lib/jvm/openjdk-${_base_version} ${DESTDIR}/$_jdk_home
+	vcopy build/*-release/images/static-libs/lib $_jdk_home
+	vmkdir $_jdk_home/lib/security
+	make-ca -g -f --destdir "${PWD}/ca" -k "${DESTDIR}/$_jdk_home/bin/keytool"
+	mv ./ca/etc/pki/tls/java/cacerts ${DESTDIR}/$_jdk_home/lib/security/
+	chmod -R ugo+rw ./ca
+	rm -rf ./ca
+}
+
+subpackages="openjdk21-static-libs openjdk21-src openjdk21-jre openjdk21-doc openjdk21-jmods"
+
+openjdk21-jre_package() {
+	shlib_provides="libawt.so libawt_xawt.so libjava.so libjli.so libjvm.so libjawt.so"
+	short_desc+=" - runtime components"
+	provides="java-runtime-${version}_1"
+	depends="openjdk-common"
+	alternatives="java:/usr/lib/jvm/default-jre:/${_jdk_home}"
+	pkg_install() {
+		for bin in java jfr keytool rmiregistry; do
+			vmove "${_jdk_home}/bin/${bin}"
+			vmove "${_jdk_home}/man/man1/${bin}.1"
+		done
+
+		for f in lib legal conf release; do
+			vmove $_jdk_home/$f
+		done
+
+		vlicense ASSEMBLY_EXCEPTION
+		vlicense LICENSE
+	}
+}
+
+openjdk21-doc_package() {
+	nostrip=yes
+	noverifyrdeps=yes
+	noshlibprovides=yes
+	short_desc+=" - documentation"
+	if [ -z "$build_option_docs" ]; then
+		build_style=meta
+	fi
+	pkg_install() {
+		if [ "$build_option_docs" ]; then
+			local _docdir=usr/share/doc/openjdk$_java_ver
+			vmkdir $_docdir
+			cp -a $wrksrc/$build_wrksrc/build/linux-*/images/docs/* ${PKGDESTDIR}/$_docdir
+		fi
+	}
+}
+
+openjdk21-src_package() {
+	nostrip=yes
+	noverifyrdeps=yes
+	noshlibprovides=yes
+	short_desc+=" - source code"
+	pkg_install() {
+		vmove "$_jdk_home/lib/src.zip"
+	}
+}
+
+openjdk21-static-libs_package() {
+	short_desc+=" - static libs"
+	pkg_install() {
+		vmove "$_jdk_home/lib/*.a"
+	}
+}
+
+openjdk21-jmods_package() {
+	short_desc+=" - JMODs"
+	depends="${sourcepkg}-${version}_${revision}"
+	pkg_install() {
+		vmove $_jdk_home/jmods
+	}
+}
diff --git a/srcpkgs/openjdk21/update b/srcpkgs/openjdk21/update
new file mode 100644
index 0000000000000..0090f26b68e1b
--- /dev/null
+++ b/srcpkgs/openjdk21/update
@@ -0,0 +1 @@
+pattern='jdk-\K21\.[\d.+]+(?=\.)'

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PR PATCH] [Merged]: jdk21
  2023-12-23  0:38 [PR PATCH] jdk21 classabbyamp
  2023-12-23  0:41 ` [PR PATCH] [Updated] jdk21 classabbyamp
  2023-12-24  4:16 ` classabbyamp
@ 2023-12-24 14:55 ` classabbyamp
  2 siblings, 0 replies; 4+ messages in thread
From: classabbyamp @ 2023-12-24 14:55 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 279 bytes --]

There's a merged pull request on the void-packages repository

jdk21
https://github.com/void-linux/void-packages/pull/47882

Description:
#### Testing the changes
- I tested the changes in this PR: **YES**

test please: https://files.placeviolette.net/jdk21/

[ci skip]



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-12-24 14:55 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-12-23  0:38 [PR PATCH] jdk21 classabbyamp
2023-12-23  0:41 ` [PR PATCH] [Updated] jdk21 classabbyamp
2023-12-24  4:16 ` classabbyamp
2023-12-24 14:55 ` [PR PATCH] [Merged]: jdk21 classabbyamp

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).