diff --git a/recipes/ega-cryptor/build.sh b/recipes/ega-cryptor/build.sh new file mode 100644 index 0000000000000..36d110b00469c --- /dev/null +++ b/recipes/ega-cryptor/build.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +set -e -x +# set -eu -o pipefail + +outdir=$PREFIX/share/$PKG_NAME-$PKG_VERSION-$PKG_BUILDNUM +mkdir -p $outdir +ln -s $PREFIX/share/$PKG_NAME-$PKG_VERSION-$PKG_BUILDNUM $PREFIX/share/$PKG_NAME +mkdir -p $PREFIX/bin +cp -Rf * $outdir/ +mv $outdir/EGA-Cryptor-$PKG_VERSION/ega-cryptor-$PKG_VERSION.jar $outdir/ega-cryptor.jar +cp -f $RECIPE_DIR/ega-cryptor.py $outdir/ega-cryptor +chmod +x $outdir/ega-cryptor +ln -sf $outdir/ega-cryptor $PREFIX/bin \ No newline at end of file diff --git a/recipes/ega-cryptor/ega-cryptor.py b/recipes/ega-cryptor/ega-cryptor.py new file mode 100644 index 0000000000000..831126813be82 --- /dev/null +++ b/recipes/ega-cryptor/ega-cryptor.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python +# +# Wrapper script for Java Conda packages that ensures that the java runtime +# is invoked with the right options. Adapted from the bash script (http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in/246128#246128). + +# +# Program Parameters +# +import os +import subprocess +import sys +import shutil +from os import access +from os import getenv +from os import X_OK +jar_file = 'ega-cryptor-2.0.0.jar' + +default_jvm_mem_opts = ['-Xms512m', '-Xmx1g'] + +# !!! End of parameter section. No user-serviceable code below this line !!! + + +def real_dirname(path): + """Return the symlink-resolved, canonicalized directory-portion of path.""" + return os.path.dirname(os.path.realpath(path)) + + +def java_executable(): + """Return the executable name of the Java interpreter.""" + java_home = getenv('JAVA_HOME') + java_bin = os.path.join('bin', 'java') + + if java_home and access(os.path.join(java_home, java_bin), X_OK): + return os.path.join(java_home, java_bin) + else: + return 'java' + + +def jvm_opts(argv): + """Construct list of Java arguments based on our argument list. + + The argument list passed in argv must not include the script name. + The return value is a 3-tuple lists of strings of the form: + (memory_options, prop_options, passthrough_options) + """ + mem_opts = [] + prop_opts = [] + pass_args = [] + exec_dir = None + + for arg in argv: + if arg.startswith('-D') or arg.startswith('-XX'): + prop_opts.append(arg) + elif arg.startswith('-Xm'): + mem_opts.append(arg) + elif arg.startswith('--exec_dir='): + exec_dir = arg.split('=')[1].strip('"').strip("'") + if not os.path.exists(exec_dir): + shutil.copytree(real_dirname(sys.argv[0]), exec_dir, symlinks=False, ignore=None) + else: + pass_args.append(arg) + + # In the original shell script the test coded below read: + # if [ "$jvm_mem_opts" == "" ] && [ -z ${_JAVA_OPTIONS+x} ] + # To reproduce the behaviour of the above shell code fragment + # it is important to explicitly check for equality with None + # in the second condition, so a null envar value counts as True! + + if mem_opts == [] and getenv('_JAVA_OPTIONS') is None: + mem_opts = default_jvm_mem_opts + + return (mem_opts, prop_opts, pass_args, exec_dir) + + +def main(): + java = java_executable() + """ + PeptideShaker updates files relative to the path of the jar file. + In a multiuser setting, the option --exec_dir="exec_dir" + can be used as the location for the peptide-shaker distribution. + If the exec_dir does not exist, + we copy the jar file, lib, and resources to the exec_dir directory. + """ + (mem_opts, prop_opts, pass_args, exec_dir) = jvm_opts(sys.argv[1:]) + jar_dir = exec_dir if exec_dir else real_dirname(sys.argv[0]) + + jar_arg = '-cp' if pass_args and pass_args[0].startswith('eu') else '-jar' + + jar_path = os.path.join(jar_dir, jar_file) + + java_args = [java] + mem_opts + prop_opts + [jar_arg] + [jar_path] + pass_args + + return_code = subprocess.call(java_args) + if return_code != 0: + sys.stderr.write(f"Java process exited with return code {return_code}\n") + sys.exit(return_code) + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/recipes/ega-cryptor/meta.yaml b/recipes/ega-cryptor/meta.yaml new file mode 100644 index 0000000000000..1ae7164d87818 --- /dev/null +++ b/recipes/ega-cryptor/meta.yaml @@ -0,0 +1,38 @@ +{% set version = "2.0.0" %} + +package: + name: ega-cryptor + version: {{ version }} + +build: + noarch: generic + number: 0 + run_exports: + - {{ pin_compatible('ega-cryptor', max_pin="x.x.x") }} + +source: + url: https://ega-archive.org/assets/files/EgaCryptor.zip + sha256: 402d9d1d5de8beea416d3e8dc8e10c3fd1e7548e4d6e29d503afe1fcbe11ff8a + +requirements: + build: + - unzip + run: + - openjdk >=8 + - python >=3.6 + +test: + commands: + - "ega-cryptor -h" + +about: + home: https://ega-archive.org/submission/data/file-preparation/egacryptor/ + summary: EGACryptor v.2.0.0 + license: Apache-2.0 + description: The EGACryptor v.2.0.0 is a JAVA-based application which enables submitters + to produce EGA compliant encrypted files along with files for the encrypted + and unencrypted md5sum for each file to be submitted. The application will + generate an output folder that will by default mirror the directory structure + containing the original files. This output folder can subsequently be uploaded + to the EGA FTP staging area via an FTP or Aspera client. +# Description extracted from the EGA-Cryptor website.