diff --git a/Dockerfile b/Dockerfile index c9cf0b0d6..dc9042e49 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 -# Copy the built JAR file from the Maven container -COPY --from=build /app/target/perlonjava-5.42.0.jar /app/perlonjava.jar +WORKDIR /app -# Set the entry point to run the JAR file -ENTRYPOINT ["java", "-jar", "/app/perlonjava.jar"] +# Copy the built JAR file from the Maven container +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 +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..fba4ff43c 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-5.42.0.jar" ]; then + # Docker or local installation with jar in same directory + 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" 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).