From 1cb1747f2a26d7fcb1ba553e5937c4a9fc527743 Mon Sep 17 00:00:00 2001 From: "Flavio S. Glock" Date: Thu, 26 Mar 2026 13:14:15 +0100 Subject: [PATCH 1/2] Add jcpan, jperldoc, jprove to deb package and Docker Changes: - build.gradle: Add symlinks for jcpan, jperldoc, jprove in /usr/local/bin - build.gradle: Copy wrapper scripts and Perl bin scripts to installDist - Dockerfile: Include wrapper scripts and Perl bin scripts, create symlinks - jperl: Add fallback to find perlonjava.jar in script directory (Docker) - jcpan, jperldoc, jprove: Check both development and installed paths This ensures all PerlOnJava tools are available when installed via: - Debian package (apt install) - Docker container Generated with [Devin](https://cli.devin.ai/docs) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- Dockerfile | 22 ++++++++++-- build.gradle | 36 +++++++++++++++++++ jcpan | 13 ++++++- jperl | 3 ++ jperldoc | 13 ++++++- jprove | 13 ++++++- .../org/perlonjava/core/Configuration.java | 2 +- 7 files changed, 96 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index c9cf0b0d6..28f18208e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,8 +21,26 @@ RUN mvn clean package # Use Eclipse Temurin JDK image to run the application FROM eclipse-temurin:22-jdk +WORKDIR /app + # Copy the built JAR file from the Maven container COPY --from=build /app/target/perlonjava-5.42.0.jar /app/perlonjava.jar -# Set the entry point to run the JAR file -ENTRYPOINT ["java", "-jar", "/app/perlonjava.jar"] +# Copy the wrapper scripts +COPY --from=build /app/jperl /app/jperl +COPY --from=build /app/jcpan /app/jcpan +COPY --from=build /app/jperldoc /app/jperldoc +COPY --from=build /app/jprove /app/jprove + +# Copy the Perl bin scripts (needed by jcpan, jperldoc, jprove) +COPY --from=build /app/src/main/perl/bin /app/bin + +# Make scripts executable and create symlinks in /usr/local/bin +RUN chmod +x /app/jperl /app/jcpan /app/jperldoc /app/jprove && \ + ln -s /app/jperl /usr/local/bin/jperl && \ + ln -s /app/jcpan /usr/local/bin/jcpan && \ + ln -s /app/jperldoc /usr/local/bin/jperldoc && \ + ln -s /app/jprove /usr/local/bin/jprove + +# Set the entry point to run jperl by default +ENTRYPOINT ["jperl"] diff --git a/build.gradle b/build.gradle index fa7e524dc..4f2879ad1 100644 --- a/build.gradle +++ b/build.gradle @@ -34,6 +34,39 @@ tasks.buildDeb { dependsOn installDist } +// Copy custom wrapper scripts to installDist bin directory +tasks.register('copyWrapperScripts', Copy) { + dependsOn installDist + from(projectDir) { + include 'jperl' + include 'jperl.bat' + include 'jcpan' + include 'jcpan.bat' + include 'jperldoc' + include 'jperldoc.bat' + include 'jprove' + include 'jprove.bat' + } + into "${buildDir}/install/perlonjava/bin" +} + +// Copy Perl bin scripts (cpan, perldoc, prove) to installDist bin directory +tasks.register('copyPerlBinScripts', Copy) { + dependsOn installDist + from('src/main/perl/bin') { + include 'cpan' + include 'perldoc' + include 'prove' + } + into "${buildDir}/install/perlonjava/bin" +} + +// Make buildDeb depend on both copy tasks +tasks.buildDeb { + dependsOn copyWrapperScripts + dependsOn copyPerlBinScripts +} + // Project metadata group = 'org.perlonjava' version = '5.42.0' @@ -135,6 +168,9 @@ ospackage { } link('/usr/local/bin/jperl', '/opt/perlonjava/bin/jperl') + link('/usr/local/bin/jcpan', '/opt/perlonjava/bin/jcpan') + link('/usr/local/bin/jperldoc', '/opt/perlonjava/bin/jperldoc') + link('/usr/local/bin/jprove', '/opt/perlonjava/bin/jprove') } // Java toolchain configuration - requires Java 22 (for FFM API) diff --git a/jcpan b/jcpan index 4a98eb971..64424f842 100755 --- a/jcpan +++ b/jcpan @@ -4,4 +4,15 @@ # Runs the standard cpan script with jperl # SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -exec "$SCRIPT_DIR/jperl" "$SCRIPT_DIR/src/main/perl/bin/cpan" "$@" + +# Find cpan script - check development path first, then installed path +if [ -f "$SCRIPT_DIR/src/main/perl/bin/cpan" ]; then + CPAN_SCRIPT="$SCRIPT_DIR/src/main/perl/bin/cpan" +elif [ -f "$SCRIPT_DIR/bin/cpan" ]; then + CPAN_SCRIPT="$SCRIPT_DIR/bin/cpan" +else + echo "Error: cpan script not found" >&2 + exit 1 +fi + +exec "$SCRIPT_DIR/jperl" "$CPAN_SCRIPT" "$@" diff --git a/jperl b/jperl index 0f8b6ec12..6a231da03 100755 --- a/jperl +++ b/jperl @@ -18,6 +18,9 @@ export PERLONJAVA_EXECUTABLE="$JPERL_PATH" # Check development environment first (target directory) if [ -f "$SCRIPT_DIR/target/perlonjava-5.42.0.jar" ]; then JAR_PATH="$SCRIPT_DIR/target/perlonjava-5.42.0.jar" +elif [ -f "$SCRIPT_DIR/perlonjava.jar" ]; then + # Docker or local installation with jar in same directory + JAR_PATH="$SCRIPT_DIR/perlonjava.jar" else # Use installed package path (when installed via deb package) JAR_PATH="$SCRIPT_DIR/../lib/perlonjava-5.42.0.jar" diff --git a/jperldoc b/jperldoc index 47fd8c6b1..978541bfd 100755 --- a/jperldoc +++ b/jperldoc @@ -4,4 +4,15 @@ # Runs the standard perldoc script with jperl # SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -exec "$SCRIPT_DIR/jperl" "$SCRIPT_DIR/src/main/perl/bin/perldoc" "$@" + +# Find perldoc script - check development path first, then installed path +if [ -f "$SCRIPT_DIR/src/main/perl/bin/perldoc" ]; then + PERLDOC_SCRIPT="$SCRIPT_DIR/src/main/perl/bin/perldoc" +elif [ -f "$SCRIPT_DIR/bin/perldoc" ]; then + PERLDOC_SCRIPT="$SCRIPT_DIR/bin/perldoc" +else + echo "Error: perldoc script not found" >&2 + exit 1 +fi + +exec "$SCRIPT_DIR/jperl" "$PERLDOC_SCRIPT" "$@" diff --git a/jprove b/jprove index 98914e6d6..647370b47 100755 --- a/jprove +++ b/jprove @@ -4,4 +4,15 @@ # Runs the standard prove script with jperl # SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -exec "$SCRIPT_DIR/jperl" "$SCRIPT_DIR/src/main/perl/bin/prove" "$@" + +# Find prove script - check development path first, then installed path +if [ -f "$SCRIPT_DIR/src/main/perl/bin/prove" ]; then + PROVE_SCRIPT="$SCRIPT_DIR/src/main/perl/bin/prove" +elif [ -f "$SCRIPT_DIR/bin/prove" ]; then + PROVE_SCRIPT="$SCRIPT_DIR/bin/prove" +else + echo "Error: prove script not found" >&2 + exit 1 +fi + +exec "$SCRIPT_DIR/jperl" "$PROVE_SCRIPT" "$@" diff --git a/src/main/java/org/perlonjava/core/Configuration.java b/src/main/java/org/perlonjava/core/Configuration.java index fc88219f8..bbf588a3a 100644 --- a/src/main/java/org/perlonjava/core/Configuration.java +++ b/src/main/java/org/perlonjava/core/Configuration.java @@ -33,7 +33,7 @@ public final class Configuration { * Automatically populated by Gradle/Maven during build. * DO NOT EDIT MANUALLY - this value is replaced at build time. */ - public static final String gitCommitId = "5f22f5e5d"; + public static final String gitCommitId = "468444dee"; /** * Git commit date of the build (ISO format: YYYY-MM-DD). From e2b64ec9a4d35fcbbe68824d9819291f02a8553d Mon Sep 17 00:00:00 2001 From: "Flavio S. Glock" Date: Thu, 26 Mar 2026 13:16:18 +0100 Subject: [PATCH 2/2] Use versioned jar name perlonjava-5.42.0.jar consistently Configure.pl will update all version references on version changes. Generated with [Devin](https://cli.devin.ai/docs) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- Dockerfile | 2 +- jperl | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 28f18208e..dc9042e49 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,7 +24,7 @@ FROM eclipse-temurin:22-jdk WORKDIR /app # Copy the built JAR file from the Maven container -COPY --from=build /app/target/perlonjava-5.42.0.jar /app/perlonjava.jar +COPY --from=build /app/target/perlonjava-5.42.0.jar /app/perlonjava-5.42.0.jar # Copy the wrapper scripts COPY --from=build /app/jperl /app/jperl diff --git a/jperl b/jperl index 6a231da03..fba4ff43c 100755 --- a/jperl +++ b/jperl @@ -18,9 +18,9 @@ export PERLONJAVA_EXECUTABLE="$JPERL_PATH" # Check development environment first (target directory) if [ -f "$SCRIPT_DIR/target/perlonjava-5.42.0.jar" ]; then JAR_PATH="$SCRIPT_DIR/target/perlonjava-5.42.0.jar" -elif [ -f "$SCRIPT_DIR/perlonjava.jar" ]; then +elif [ -f "$SCRIPT_DIR/perlonjava-5.42.0.jar" ]; then # Docker or local installation with jar in same directory - JAR_PATH="$SCRIPT_DIR/perlonjava.jar" + JAR_PATH="$SCRIPT_DIR/perlonjava-5.42.0.jar" else # Use installed package path (when installed via deb package) JAR_PATH="$SCRIPT_DIR/../lib/perlonjava-5.42.0.jar"