summaryrefslogtreecommitdiff
path: root/dev-java/yajsw
diff options
context:
space:
mode:
Diffstat (limited to 'dev-java/yajsw')
-rw-r--r--dev-java/yajsw/Manifest1
-rw-r--r--dev-java/yajsw/files/yajsw-14.01-build-fixes.patch42
-rw-r--r--dev-java/yajsw/files/yajsw-14.01-javadoc.patch15
-rw-r--r--dev-java/yajsw/files/yajsw-14.01-keystore.patch13
-rw-r--r--dev-java/yajsw/files/yajsw-14.01-paths.patch37
-rw-r--r--dev-java/yajsw/files/yajsw-14.01-system-libs.patch112
-rw-r--r--dev-java/yajsw/files/yajsw-14.01-system-native.patch26
-rw-r--r--dev-java/yajsw/metadata.xml15
-rw-r--r--dev-java/yajsw/yajsw-14.01.ebuild151
9 files changed, 412 insertions, 0 deletions
diff --git a/dev-java/yajsw/Manifest b/dev-java/yajsw/Manifest
new file mode 100644
index 000000000000..d04e7122b24c
--- /dev/null
+++ b/dev-java/yajsw/Manifest
@@ -0,0 +1 @@
+DIST yajsw-stable-14.01.zip 26534755 BLAKE2B 42face7f9296e0f851f24246e570a758f94771d5720dff680d12b68a499dcffbb5426d4853e34854d67c07274f6484c34b5f3bb0456baf58651220e403b33662 SHA512 ddef4867e93cfc0ed40b175b92bed8b43f94aa1a243a21fd7b460f72e593c8a71dfdcf867e928a1900361ed76b3bc292f8c1c1d8dfc8295f82ea3125b792a2b0
diff --git a/dev-java/yajsw/files/yajsw-14.01-build-fixes.patch b/dev-java/yajsw/files/yajsw-14.01-build-fixes.patch
new file mode 100644
index 000000000000..31386c8a03f1
--- /dev/null
+++ b/dev-java/yajsw/files/yajsw-14.01-build-fixes.patch
@@ -0,0 +1,42 @@
+# Fix the build path and Java settings for Gradle 9
+
+--- a/build/gradle/build.gradle
++++ b/build/gradle/build.gradle
+@@ -4,10 +4,10 @@
+ }
+
+ ext {
+- projectHome = 'Z:/dev/yajsw2026' //'../..'
+- coreLibsDir = new File("$projectHome/lib/core").getAbsolutePath()
++ projectHome = rootProject.projectDir.parentFile.parentFile
++ coreLibsDir = new File(projectHome, "lib/core").getAbsolutePath()
+ println "$coreLibsDir"
+- extendedLibsDir = new File("$projectHome/lib/extended").getAbsolutePath()
++ extendedLibsDir = new File(projectHome, "lib/extended").getAbsolutePath()
+ // dependency versions
+
+ commons_cli_version = '1.11.0'
+@@ -66,8 +66,10 @@
+
+
+
+-sourceCompatibility = 11
+-targetCompatibility = 11
++java {
++ sourceCompatibility = JavaVersion.VERSION_11
++ targetCompatibility = JavaVersion.VERSION_11
++}
+ //options.bootClasspath = "${System.getProperty('java6.home')}/jre/lib/rt.jar"
+ version = ''
+
+--- a/build/gradle/settings.gradle
++++ b/build/gradle/settings.gradle
+@@ -1,7 +1,7 @@
+ // defines a list of subprojects
+
+ // build8. comment out for build9
+-include "wrapper", "wrapper-app", "ahessian", "hessian4", "srvmgr", "groovy-patch"
++include "wrapper", "wrapper-app", "ahessian", "hessian4", "groovy-patch"
+
+ // build9. comment out for build8
+ //include "wrapper", "wrapper-app", "wrapper-app9", "ahessian", "hessian4", "srvmgr", "groovy-patch", "groovy-patch9"
diff --git a/dev-java/yajsw/files/yajsw-14.01-javadoc.patch b/dev-java/yajsw/files/yajsw-14.01-javadoc.patch
new file mode 100644
index 000000000000..eea705c534fb
--- /dev/null
+++ b/dev-java/yajsw/files/yajsw-14.01-javadoc.patch
@@ -0,0 +1,15 @@
+# Turn off doc checks so the docs can build
+# this works around errors in the source comments
+
+--- a/build/gradle/wrapper/build.gradle
++++ b/build/gradle/wrapper/build.gradle
+@@ -1,5 +1,9 @@
+ def projectHome = '../../..'
+
++tasks.named('javadoc') {
++ options.addBooleanOption('Xdoclint:none', true)
++}
++
+ // set the sources for this build
+ sourceSets.main.java.srcDirs = ["$projectHome/src/yajsw/src/main/java", "$projectHome/src/app/src/main/java"]
+ sourceSets.main.java.exclude 'com/sun/jna/Native.java', 'com/sun/jna/Platform.java', 'org/apache/commons/vfs2/impl/StandardFileSystemManager.java'
diff --git a/dev-java/yajsw/files/yajsw-14.01-keystore.patch b/dev-java/yajsw/files/yajsw-14.01-keystore.patch
new file mode 100644
index 000000000000..4a4ac429090f
--- /dev/null
+++ b/dev-java/yajsw/files/yajsw-14.01-keystore.patch
@@ -0,0 +1,13 @@
+# Build the keystore code from the source in this release
+
+--- a/build/gradle/wrapper/build.gradle
++++ b/build/gradle/wrapper/build.gradle
+@@ -5,7 +5,7 @@ tasks.named('javadoc') {
+ }
+
+ // set the sources for this build
+-sourceSets.main.java.srcDirs = ["$projectHome/src/yajsw/src/main/java", "$projectHome/src/app/src/main/java"]
++sourceSets.main.java.srcDirs = ["$projectHome/src/yajsw/src/main/java", "$projectHome/src/app/src/main/java", "$projectHome/src/keystore/src/main/java"]
+ sourceSets.main.java.exclude 'com/sun/jna/Native.java', 'com/sun/jna/Platform.java', 'org/apache/commons/vfs2/impl/StandardFileSystemManager.java'
+ sourceSets.main.java.exclude 'io/netty/util/internal/CleanerJava9.java', 'io/netty/util/internal/ObjectUtil.java', 'io/netty/util/internal/PlatformDependent0.java'
+ sourceSets.main.java.exclude(['AbstractInternalLogger', 'InternalLogLevel', 'InternalLogger', 'InternalLoggerFactory', 'JdkLogger', 'JdkLoggerFactory'].collect { "io/netty/util/internal/logging/${it}.java" })
diff --git a/dev-java/yajsw/files/yajsw-14.01-paths.patch b/dev-java/yajsw/files/yajsw-14.01-paths.patch
new file mode 100644
index 000000000000..3b08ceb3381b
--- /dev/null
+++ b/dev-java/yajsw/files/yajsw-14.01-paths.patch
@@ -0,0 +1,37 @@
+# Keep config in /etc and runtime files outside /usr
+
+--- a/bin/setenv.sh
++++ b/bin/setenv.sh
+@@ -33,7 +33,7 @@
+ wrapper_app_jar="$wrapper_home"/wrapperApp.jar
+ export wrapper_app_jar
+
+-wrapper_java_sys_options=-Djna_tmpdir="$wrapper_home"/tmp
++wrapper_java_sys_options=-Djna_tmpdir="${TMPDIR:-/tmp}"
+ export wrapper_java_sys_options
+
+ wrapper_java_options=-Xmx30m
+@@ -45,10 +45,10 @@
+ # show java version
+ "$java_exe" -version
+
+-conf_file="$wrapper_home"/conf/wrapper.conf
++conf_file="@GENTOO_PORTAGE_EPREFIX@/etc/yajsw/wrapper.conf"
+ export conf_file
+
+-conf_default_file="$wrapper_home"/conf/wrapper.conf.default
++conf_default_file="@GENTOO_PORTAGE_EPREFIX@/etc/yajsw/wrapper.conf.default"
+ export conf_default_file
+
+ echo "wrapper home : $wrapper_home"
+--- a/conf/wrapper.conf.default
++++ b/conf/wrapper.conf.default
+@@ -128,7 +128,7 @@
+ wrapper.console.loglevel=INFO
+
+ # Log file to use for wrapper output logging.
+-wrapper.logfile=${wrapper_home}/log/wrapper.log
++wrapper.logfile=wrapper.log
+
+ # Format of output for the log file. (See docs for formats)
+ #wrapper.logfile.format=LPTM
diff --git a/dev-java/yajsw/files/yajsw-14.01-system-libs.patch b/dev-java/yajsw/files/yajsw-14.01-system-libs.patch
new file mode 100644
index 000000000000..f71767efe7e7
--- /dev/null
+++ b/dev-java/yajsw/files/yajsw-14.01-system-libs.patch
@@ -0,0 +1,112 @@
+# Use system jars in the build and the launchers
+
+--- a/build/gradle/build.gradle
++++ b/build/gradle/build.gradle
+@@ -32,7 +32,10 @@
+ joda_time_version = '2.7'
+ permit_version = '0.4'
+ }
+-defaultTasks 'clean', 'build'
++ext.systemClasspath = System.getenv('GENTOO_CLASSPATH').split(File.pathSeparator)
++ .findAll { !it.endsWith('/slf4j-nop.jar') }
++
++defaultTasks 'clean', 'build'
+
+ // common settings for all sub-projects
+ allprojects {
+@@ -45,26 +48,16 @@
+
+
+
+-// for simplicity and to avoid dependency issues which arise due to the usage of SNAPSHOT libs
+-// we use libs from local disk instead of public repository
+-repositories {
+- flatDir {
+- dirs "$coreLibsDir/commons", "$coreLibsDir/jna", "$coreLibsDir/netty", "$coreLibsDir/permit",
+- "$coreLibsDir/yajsw",
+- "$extendedLibsDir/groovy",
+- "$extendedLibsDir/regex",
+- "$extendedLibsDir/cron",
+- "$extendedLibsDir/commons",
+- "$extendedLibsDir/abeille",
+- "$extendedLibsDir/jgoodies",
+- "$extendedLibsDir/slf4j",
+- "$extendedLibsDir/velocity"
+-
++configurations.configureEach {
++ withDependencies {
++ removeAll { it instanceof ExternalModuleDependency }
+ }
+- }
+-
+-
+-
++}
++dependencies {
++ implementation files(rootProject.systemClasspath)
++ implementation fileTree(dir: new File(rootProject.projectHome, 'lib'),
++ includes: ['**/*.jar'], excludes: ['**/yajsw/*.jar', '**/groovy-patch.jar'])
++}
+
+ java {
+ sourceCompatibility = JavaVersion.VERSION_11
+--- a/build/gradle/wrapper/build.gradle
++++ b/build/gradle/wrapper/build.gradle
+@@ -2,6 +2,9 @@
+
+ // set the sources for this build
+ sourceSets.main.java.srcDirs = ["$projectHome/src/yajsw/src/main/java", "$projectHome/src/app/src/main/java"]
++sourceSets.main.java.exclude 'com/sun/jna/Native.java', 'com/sun/jna/Platform.java', 'org/apache/commons/vfs2/impl/StandardFileSystemManager.java'
++sourceSets.main.java.exclude 'io/netty/util/internal/CleanerJava9.java', 'io/netty/util/internal/ObjectUtil.java', 'io/netty/util/internal/PlatformDependent0.java'
++sourceSets.main.java.exclude(['AbstractInternalLogger', 'InternalLogLevel', 'InternalLogger', 'InternalLoggerFactory', 'JdkLogger', 'JdkLoggerFactory'].collect { "io/netty/util/internal/logging/${it}.java" })
+ sourceSets.main.resources.srcDirs = ["$projectHome/src/yajsw/src/main/java"]
+ sourceSets.main.resources.includes = ['resources/*']
+
+@@ -50,7 +53,16 @@
+ // TODO generate manifest instead of editing
+ jar {
+ manifest {
+- from '../../MANIFEST.MF'
++ def systemJars = rootProject.systemClasspath.collect { new File(it).toURI().toString() }
++ from('../../MANIFEST.MF') {
++ eachEntry { entry ->
++ if (entry.key.startsWith('Class-Path-')) {
++ entry.value = (entry.value.split().findAll { file("$projectHome/$it").exists() }
++ + systemJars).unique().join(' ')
++ }
++ }
++ }
++ attributes 'Class-Path': systemJars.join(' ')
+ }
+ exclude 'org/rzo/yajsw/app/AbstractWrapperJVMMain*'
+ exclude 'org/rzo/yajsw/app/WrapperGroovyMain*'
+--- a/build/gradle/wrapper-app/build.gradle
++++ b/build/gradle/wrapper-app/build.gradle
+@@ -42,6 +42,15 @@
+ // TODO generate manifest
+ jar {
+ manifest {
+- from '../../MANIFEST.MF'
++ def systemJars = rootProject.systemClasspath.collect { new File(it).toURI().toString() }
++ from('../../MANIFEST.MF') {
++ eachEntry { entry ->
++ if (entry.key.startsWith('Class-Path-')) {
++ entry.value = (entry.value.split().findAll { file("$projectHome/$it").exists() }
++ + systemJars).unique().join(' ')
++ }
++ }
++ }
++ attributes 'Class-Path': systemJars.join(' ')
+ }
+ }
+--- a/src/app/src/main/java/org/rzo/yajsw/boot/WrapperLoader.java
++++ b/src/app/src/main/java/org/rzo/yajsw/boot/WrapperLoader.java
+@@ -215,7 +215,7 @@
+ File myFile;
+ try
+ {
+- myFile = new File(parent, file);
++ myFile = new File(parent.toURI().resolve(file));
+ if (!myFile.exists())
+ {
+ if (logErrors)
diff --git a/dev-java/yajsw/files/yajsw-14.01-system-native.patch b/dev-java/yajsw/files/yajsw-14.01-system-native.patch
new file mode 100644
index 000000000000..b5b8d7ea6d1d
--- /dev/null
+++ b/dev-java/yajsw/files/yajsw-14.01-system-native.patch
@@ -0,0 +1,26 @@
+# Use Gentoo's JNA native library
+
+--- a/src/app/src/main/java/org/rzo/yajsw/boot/WrapperLoader.java
++++ b/src/app/src/main/java/org/rzo/yajsw/boot/WrapperLoader.java
+@@ -34,6 +34,11 @@ import com.nqzero.permit.Permit;
+
+ public class WrapperLoader
+ {
++ static
++ {
++ System.setProperty("jna.boot.library.path", "@GENTOO_LIBDIR@/jna");
++ }
++
+
+ private static boolean checkPath(String path)
+ {
+--- a/src/yajsw/src/main/java/org/rzo/yajsw/os/posix/PosixProcess.java
++++ b/src/yajsw/src/main/java/org/rzo/yajsw/os/posix/PosixProcess.java
+@@ -1252,6 +1252,7 @@ public class PosixProcess extends AbstractProcess {
+ private String[] getSpawnCmdLine() {
+ ArrayList<String> cmdList = new ArrayList();
+ cmdList.add(getCurrentJava());
++ cmdList.add("-Djna.boot.library.path=" + System.getProperty("jna.boot.library.path"));
+ String tmpDir = _tmpPath;
+ if (tmpDir == null)
+ tmpDir = System.getProperty("jna_tmpdir", null);
diff --git a/dev-java/yajsw/metadata.xml b/dev-java/yajsw/metadata.xml
new file mode 100644
index 000000000000..739a9b771a67
--- /dev/null
+++ b/dev-java/yajsw/metadata.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://srcux.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>mit.mis@gmail.com</email>
+ <name>Michal Andrzejczak</name>
+ </maintainer>
+ <longdescription lang="en">
+ YAJSW runs an arbitrary Java or native application as a system daemon:
+ it starts the process, restarts it when it exits or stops responding,
+ captures its output, and installs it into the init system. It is a
+ clean-room reimplementation of the Tanuki Java Service Wrapper.
+ </longdescription>
+ <origin>srcux</origin>
+</pkgmetadata>
diff --git a/dev-java/yajsw/yajsw-14.01.ebuild b/dev-java/yajsw/yajsw-14.01.ebuild
new file mode 100644
index 000000000000..4e1b0c58f8c6
--- /dev/null
+++ b/dev-java/yajsw/yajsw-14.01.ebuild
@@ -0,0 +1,151 @@
+# Copyright 2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+JAVA_PKG_IUSE="doc source"
+
+JAVA_PKG_WANT_BUILD_VM="openjdk-21 openjdk-bin-21"
+JAVA_PKG_WANT_SOURCE="21"
+JAVA_PKG_WANT_TARGET="21"
+
+inherit edo edos2unix java-pkg-2 multiprocessing prefix
+
+MY_P="${PN}-stable-${PV}"
+
+DESCRIPTION="Yet Another Java Service Wrapper, runs any application as a daemon"
+HOMEPAGE="https://yajsw.sourceforge.io/"
+SRC_URI="
+ https://sourceforge.net/projects/yajsw/files/yajsw/${MY_P}/${MY_P}.zip/download
+ -> ${MY_P}.zip
+"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="Apache-1.1 Apache-2.0 BSD BSD-2 CC-BY-2.5 GPL-2+ LGPL-2.1+ MIT"
+SLOT="0"
+KEYWORDS="~amd64"
+
+CP_DEPEND="
+ >=dev-java/automaton-1.11.8:0
+ dev-java/commons-beanutils:0
+ >=dev-java/commons-cli-1.11.0:0
+ >=dev-java/commons-collections-4.5.0:4
+ >=dev-java/commons-io-2.21.0:0
+ >=dev-java/commons-lang-3.20.0:0
+ >=dev-java/commons-logging-1.3.6:0
+ >=dev-java/commons-text-1.15.0:0
+ >=dev-java/commons-vfs-2.0:2
+ >=dev-java/jna-5.18.1:0
+ >=dev-java/joda-time-2.13.0:0
+ >=dev-java/permit-reflect-0.4:0
+ >=dev-java/slf4j-api-2.0.3:0
+ >=dev-java/slf4j-simple-2.0.3:0
+ >=dev-java/velocity-2.4.1:0
+"
+
+RDEPEND="${CP_DEPEND}
+ app-admin/sudo
+ >=virtual/jre-21:*"
+
+DEPEND="${CP_DEPEND}
+ virtual/jdk:21"
+
+BDEPEND="
+ app-arch/unzip
+ >=dev-java/gradle-bin-8.5
+"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-build-fixes.patch
+ "${FILESDIR}"/${P}-system-libs.patch
+ "${FILESDIR}"/${P}-system-native.patch
+ "${FILESDIR}"/${P}-javadoc.patch
+ "${FILESDIR}"/${P}-paths.patch
+ "${FILESDIR}"/${P}-keystore.patch
+)
+
+DOCS=( readme.txt yajsw.policy.txt )
+
+src_prepare() {
+ edos2unix build/gradle/{build,settings,wrapper/build,wrapper-app/build}.gradle
+ edos2unix src/app/src/main/java/org/rzo/yajsw/boot/WrapperLoader.java
+ edos2unix src/yajsw/src/main/java/org/rzo/yajsw/os/posix/PosixProcess.java
+ edos2unix conf/wrapper.conf.default
+
+ default
+ java-pkg-2_src_prepare
+ sed -i "s|@GENTOO_LIBDIR@|${EPREFIX}/usr/$(get_libdir)|g" \
+ src/app/src/main/java/org/rzo/yajsw/boot/WrapperLoader.java || die
+ eprefixify bin/setenv.sh
+
+ rm -r lib/core/{jna,permit} \
+ lib/extended/{commons,keystore,regex,sigar,slf4j,velocity} \
+ lib/groovy/{mail,joda,jasypt,snmp} || die
+ find lib/core/commons -type f ! -name 'commons-configuration2-*.jar' -delete || die
+ rm lib/extended/cron/{joda-time-2.7,prevayler-core-2.6,prevayler-factory-2.6}.jar || die
+}
+
+src_compile() {
+ local gradle
+ gradle=$(best_version -b '>=dev-java/gradle-bin-8.5') || die
+ [[ -n ${gradle} ]] || die "No supported Gradle installed"
+ gradle=${gradle##*/}
+ gradle=${gradle%-r*}
+
+ local packages=(
+ automaton commons-beanutils commons-cli commons-collections-4
+ commons-io commons-lang commons-logging commons-text commons-vfs-2 jna
+ joda-time permit-reflect slf4j-api slf4j-simple velocity
+ )
+ local -x GENTOO_CLASSPATH
+ GENTOO_CLASSPATH=$(java-pkg_getjars --with-dependencies "$(IFS=,; echo "${packages[*]}")") || die
+
+ local -x JAVA_TOOL_OPTIONS="-Duser.home=${T}"
+ local targets=( build )
+ use doc && targets+=( :wrapper:javadoc )
+
+ cd build/gradle || die
+ edo "${EPREFIX}/usr/bin/${gradle}" \
+ --console=plain \
+ --offline \
+ --no-daemon \
+ --no-build-cache \
+ --gradle-user-home "${T}/gradle_user_home" \
+ --project-cache-dir "${T}/gradle_project_cache" \
+ --parallel --max-workers="$(get_makeopts_jobs)" \
+ "${targets[@]}"
+}
+
+src_install() {
+ local dest="/usr/share/${PN}" b=build/gradle
+
+ cp "${b}"/ahessian/build/libs/*.jar lib/core/yajsw/ || die
+ cp "${b}"/hessian4/build/libs/*.jar lib/extended/yajsw/ || die
+ cp "${b}"/groovy-patch/build/libs/*.jar lib/extended/groovy/ || die
+
+ java-pkg_jarinto "${dest}"
+ java-pkg_dojar "${b}/wrapper/build/libs/wrapper.jar"
+ insinto "${dest}"
+ doins "${b}/wrapper-app/build/libs/wrapperApp.jar"
+ doins -r lib
+
+ insinto /etc/yajsw
+ doins conf/wrapper.conf.default
+
+ insinto "${dest}/templates"
+ doins templates/daemon.vm templates/systemd.vm
+
+ exeinto "${dest}"/bin
+ doexe bin/{wrapper,setenv,genConfig,runConsole}.sh
+ doexe bin/{install,start,stop,query,uninstall}Daemon{,NoPriv}.sh
+
+ einstalldocs
+
+ if use doc; then
+ java-pkg_dojavadoc "${b}/wrapper/build/docs/javadoc"
+ fi
+
+ if use source; then
+ java-pkg_dosrc src/{yajsw,app,ahessian,hessian,groovy-patch,keystore}
+ fi
+}