From f5888d8127ed40909049627901b58d37626134a1 Mon Sep 17 00:00:00 2001 From: pabloaledo <112545720+pabloaledo@users.noreply.github.com> Date: Wed, 9 Aug 2023 22:24:34 +0200 Subject: picard: add variant with jvm arguments (#39204) * picard: add variant with jvm arguments * fix variant and update wrapper script --------- Signed-off-by: Pablo --- var/spack/repos/builtin/packages/picard/package.py | 9 ++- .../packages/picard/picard_with_parameters.sh | 68 ++++++++++++++++++++++ 2 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 var/spack/repos/builtin/packages/picard/picard_with_parameters.sh diff --git a/var/spack/repos/builtin/packages/picard/package.py b/var/spack/repos/builtin/packages/picard/package.py index 923c64b357..f9e2acb6fa 100644 --- a/var/spack/repos/builtin/packages/picard/package.py +++ b/var/spack/repos/builtin/packages/picard/package.py @@ -156,6 +156,8 @@ class Picard(Package): ) version("1.140", sha256="0d27287217413db6b846284c617d502eaa578662dcb054a7017083eab9c54438") + variant("parameters", default=False, description="get java parameters in the adapter script") + depends_on("java@17:", type="run", when="@3.0.0:") depends_on("java@8:", type="run", when="@:2.27.5") @@ -169,7 +171,12 @@ class Picard(Package): # Set up a helper script to call java on the jar file, # explicitly codes the path for java and the jar file. - script_sh = join_path(os.path.dirname(__file__), "picard.sh") + + script_sh = join_path( + os.path.dirname(__file__), + "picard_with_parameters.sh" if "+parameters" in spec else "picard.sh", + ) + script = prefix.bin.picard install(script_sh, script) set_executable(script) diff --git a/var/spack/repos/builtin/packages/picard/picard_with_parameters.sh b/var/spack/repos/builtin/packages/picard/picard_with_parameters.sh new file mode 100644 index 0000000000..98a32a9f60 --- /dev/null +++ b/var/spack/repos/builtin/packages/picard/picard_with_parameters.sh @@ -0,0 +1,68 @@ +#!/bin/bash +# Picard executable shell script +set -eu -o pipefail + +export LC_ALL=en_US.UTF-8 + +# Find original directory of bash script, resolving symlinks +# http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in/246128#246128 +SOURCE="${BASH_SOURCE[0]}" +while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink + DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + SOURCE="$(readlink "$SOURCE")" + [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located +done +DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + +JAR_DIR=$DIR +ENV_PREFIX="$(dirname $(dirname $DIR))" +# Use Java installed with Anaconda to ensure correct version +java="$ENV_PREFIX/bin/java" + +# if JAVA_HOME is set (non-empty), use it. Otherwise keep "java" +if [ -n "${JAVA_HOME:=}" ]; then + if [ -e "$JAVA_HOME/bin/java" ]; then + java="$JAVA_HOME/bin/java" + fi +fi + +# extract memory and system property Java arguments from the list of provided arguments +# http://java.dzone.com/articles/better-java-shell-script +default_jvm_mem_opts="-Xms512m -Xmx2g" +jvm_mem_opts="" +jvm_prop_opts="" +pass_args="" +for arg in "$@"; do + case $arg in + '-D'*) + jvm_prop_opts="$jvm_prop_opts $arg" + ;; + '-XX'*) + jvm_prop_opts="$jvm_prop_opts $arg" + ;; + '-Xm'*) + jvm_mem_opts="$jvm_mem_opts $arg" + ;; + *) + if [[ ${pass_args} == '' ]] #needed to avoid preceeding space on first arg e.g. ' MarkDuplicates' + then + pass_args="$arg" + else + pass_args="$pass_args \"$arg\"" #quotes later arguments to avoid problem with ()s in MarkDuplicates regex arg + fi + ;; + esac +done + +if [ "$jvm_mem_opts" == "" ] && [ -z ${_JAVA_OPTIONS+x} ]; then + jvm_mem_opts="$default_jvm_mem_opts" +fi + +pass_arr=($pass_args) +if [[ ${pass_arr[0]:=} == org* ]] +then + eval "$java" $jvm_mem_opts $jvm_prop_opts -cp "$JAR_DIR/picard.jar" $pass_args +else + eval "$java" $jvm_mem_opts $jvm_prop_opts -jar "$JAR_DIR/picard.jar" $pass_args +fi +exit -- cgit v1.2.3-70-g09d2