diff --git a/packaging/aur/kst4contest-git/PKGBUILD b/packaging/aur/kst4contest-git/PKGBUILD index 48e01732..48ba3981 100644 --- a/packaging/aur/kst4contest-git/PKGBUILD +++ b/packaging/aur/kst4contest-git/PKGBUILD @@ -7,12 +7,22 @@ arch=('x86_64') url="https://github.com/HamRadioOnline/kst4contest" license=('GPL-3.0-only') depends=('gst-plugins-base' 'gst-plugins-good') -makedepends=('java-environment=21' 'git') +makedepends=('git') provides=('kst4contest') conflicts=('kst4contest' 'kst4contest-bin') source=("kst4contest::git+https://github.com/HamRadioOnline/kst4contest.git") sha256sums=('SKIP') +# The launcher is built with Temurin, not with the system JDK. Arch's openjdk links +# jpackage's launcher library against the shared libstdc++, and that build aborts +# with "pure virtual method called" (SIGABRT, core dump) in a static destructor when +# the application exits; Temurin links libstdc++ statically, like the CI packages. +# The _x86_64 arrays are deliberate: aur-publish.yml rewrites the plain sha256sums= +# line on every release and would drop a second entry there. +_temurin=21.0.13+9 +source_x86_64=("https://github.com/adoptium/temurin21-binaries/releases/download/jdk-${_temurin/+/%2B}/OpenJDK21U-jdk_x64_linux_hotspot_${_temurin/+/_}.tar.gz") +sha256sums_x86_64=('d7f5d5cf865a2902b70ff549b97586a7d3f234e016f041ab447ea740c7d66d1c') + pkgver() { cd "${srcdir}/kst4contest" BASE=$(grep -m1 '^version=' gradle.properties \ @@ -23,7 +33,7 @@ pkgver() { build() { cd "${srcdir}/kst4contest" - export JAVA_HOME=$(find /usr/lib/jvm -maxdepth 1 -name 'java-21-*' -type d | head -n 1) + export JAVA_HOME="${srcdir}/jdk-${_temurin}" export PATH="${JAVA_HOME}/bin:${PATH}" # A Gradle home inside $srcdir keeps the build independent of whatever the @@ -31,7 +41,13 @@ build() { # cache, every dependency added since the last local build broke the package. export GRADLE_USER_HOME="${srcdir}/gradle-home" - ./gradlew --no-daemon -S :app-desktop:createDistributable + # The Java toolchain, and with it jpackage, would otherwise pick any JDK 21 it + # finds in /usr/lib/jvm, the system one included. + ./gradlew --no-daemon -S \ + -Porg.gradle.java.installations.auto-detect=false \ + -Porg.gradle.java.installations.auto-download=false \ + -Porg.gradle.java.installations.paths="${JAVA_HOME}" \ + :app-desktop:createDistributable # package() reads dist/KST4Contest. Application name, icon and the JDK # module list come from app-desktop/build.gradle.kts. diff --git a/packaging/aur/kst4contest/PKGBUILD b/packaging/aur/kst4contest/PKGBUILD index b647d8bd..6e79b5d3 100644 --- a/packaging/aur/kst4contest/PKGBUILD +++ b/packaging/aur/kst4contest/PKGBUILD @@ -7,16 +7,25 @@ arch=('x86_64') url="https://github.com/HamRadioOnline/kst4contest" license=('GPL-3.0-only') depends=('gst-plugins-base' 'gst-plugins-good') -makedepends=('java-environment=21') provides=('kst4contest') conflicts=('kst4contest-bin' 'kst4contest-git') source=("${pkgname}-${pkgver}.tar.gz::https://github.com/HamRadioOnline/kst4contest/archive/refs/tags/v${pkgver}.tar.gz") sha256sums=('e702df24a29e6f914a43934df0095bc4adbd00a9f02df3a632816c832272e914') +# The launcher is built with Temurin, not with the system JDK. Arch's openjdk links +# jpackage's launcher library against the shared libstdc++, and that build aborts +# with "pure virtual method called" (SIGABRT, core dump) in a static destructor when +# the application exits; Temurin links libstdc++ statically, like the CI packages. +# The _x86_64 arrays are deliberate: aur-publish.yml rewrites the plain sha256sums= +# line on every release and would drop a second entry there. +_temurin=21.0.13+9 +source_x86_64=("https://github.com/adoptium/temurin21-binaries/releases/download/jdk-${_temurin/+/%2B}/OpenJDK21U-jdk_x64_linux_hotspot_${_temurin/+/_}.tar.gz") +sha256sums_x86_64=('d7f5d5cf865a2902b70ff549b97586a7d3f234e016f041ab447ea740c7d66d1c') + build() { cd "${srcdir}/kst4contest-${pkgver}" - export JAVA_HOME=$(find /usr/lib/jvm -maxdepth 1 -name 'java-21-*' -type d | head -n 1) + export JAVA_HOME="${srcdir}/jdk-${_temurin}" export PATH="${JAVA_HOME}/bin:${PATH}" # A Gradle home inside $srcdir keeps the build independent of whatever the @@ -24,7 +33,13 @@ build() { # cache, every dependency added since the last local build broke the package. export GRADLE_USER_HOME="${srcdir}/gradle-home" - ./gradlew --no-daemon -S :app-desktop:createDistributable + # The Java toolchain, and with it jpackage, would otherwise pick any JDK 21 it + # finds in /usr/lib/jvm, the system one included. + ./gradlew --no-daemon -S \ + -Porg.gradle.java.installations.auto-detect=false \ + -Porg.gradle.java.installations.auto-download=false \ + -Porg.gradle.java.installations.paths="${JAVA_HOME}" \ + :app-desktop:createDistributable # package() reads dist/KST4Contest. Application name, icon and the JDK # module list come from app-desktop/build.gradle.kts, so this PKGBUILD no