summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorGeorge Hartzell <hartzell@alerce.com>2016-12-18 16:38:14 -0800
committerTodd Gamblin <tgamblin@llnl.gov>2016-12-18 16:38:14 -0800
commit6e1b3f621dab240a5f26f649b4831310ddc9936b (patch)
tree3791cd08d9030a51a13a5fe6fd198c94c0d3b951 /var
parent68e9a2ed8daf4b43fe19cd062ff37a04c7978c10 (diff)
downloadspack-6e1b3f621dab240a5f26f649b4831310ddc9936b.tar.gz
spack-6e1b3f621dab240a5f26f649b4831310ddc9936b.tar.bz2
spack-6e1b3f621dab240a5f26f649b4831310ddc9936b.tar.xz
spack-6e1b3f621dab240a5f26f649b4831310ddc9936b.zip
Feature/add package for fastqc (#1573)
* Add package for fastqc This tool is a java mess. Their Way To Do It is to just copy the entire tree into it's final resting place, make the perl script at the top level executable and take it from there. Yuck. This package assumes that `set_executable` actually sets all the user bits. If that change doesn't go in, then something equivalent needs to be done. * Use chmod to make fastqc executable I haven't gotten any feedback on changing set-executable, so switch to using chmod (from the cuda package). * Flake8 cleanup * Install files neatly, don't just copy top level of dir Rather than blindly copying everything in the distribution, carefully put the necessary bits into reasonable places. Neatness counts, etc... This requires patching the `fastqc` perl script, so this commit adds a patch file. * Additional pep8 cleanup * Let dependency handle adding jdk to PATH * Flake8 cleanup * Ensure that java is on PATH I thought that the run dependency on the jdk would put java on my PATH, but it does not appear to work. For now, do it by hand.
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/fastqc/fastqc.patch30
-rw-r--r--var/spack/repos/builtin/packages/fastqc/package.py60
2 files changed, 90 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/fastqc/fastqc.patch b/var/spack/repos/builtin/packages/fastqc/fastqc.patch
new file mode 100644
index 0000000000..a0a1155905
--- /dev/null
+++ b/var/spack/repos/builtin/packages/fastqc/fastqc.patch
@@ -0,0 +1,30 @@
+--- fastqc.orig 2015-11-20 09:25:00.000000000 +0000
++++ fastqc 2016-10-24 19:06:16.734000000 +0000
+@@ -38,12 +38,21 @@
+ $delimiter = ';';
+ }
+
+-if ($ENV{CLASSPATH}) {
+- $ENV{CLASSPATH} .= "$delimiter$RealBin$delimiter$RealBin/sam-1.103.jar$delimiter$RealBin/jbzip2-0.9.jar$delimiter$RealBin/cisd-jhdf5.jar";
+-}
+-else {
+- $ENV{CLASSPATH} = "$RealBin$delimiter$RealBin/sam-1.103.jar$delimiter$RealBin/jbzip2-0.9.jar$delimiter$RealBin/cisd-jhdf5.jar";
+-}
++# The lib dir is $RealBin/../lib
++# start with list of jars we need and prefix them with the lib dir
++# then stick CLASSPATH onto the front (empty or otherwise...)
++# then filter out anything that's empty (perhaps CLASSPATH...)
++# then join all the remainings bits with the delimiter.
++use File::Basename;
++use File::Spec::Functions;
++my $_lib = catfile(dirname($RealBin), 'lib');
++$ENV{CLASSPATH} =
++ join($delimiter,
++ grep {$_}
++ ($ENV{CLASSPATH},
++ $_lib,
++ map {"$_lib/$_"}
++ qw(sam-1.103.jar jbzip2-0.9.jar cisd-jhdf5.jar)));
+
+ my @java_args;
+ my @files;
diff --git a/var/spack/repos/builtin/packages/fastqc/package.py b/var/spack/repos/builtin/packages/fastqc/package.py
new file mode 100644
index 0000000000..e2a1b54210
--- /dev/null
+++ b/var/spack/repos/builtin/packages/fastqc/package.py
@@ -0,0 +1,60 @@
+##############################################################################
+# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/llnl/spack
+# Please also see the LICENSE file for our notice and the LGPL.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License (as
+# published by the Free Software Foundation) version 2.1, February 1999.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
+# conditions of the GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##############################################################################
+from spack import *
+from distutils.dir_util import copy_tree, mkpath
+from distutils.file_util import copy_file
+
+
+class Fastqc(Package):
+ """A quality control tool for high throughput sequence data."""
+
+ homepage = "http://www.bioinformatics.babraham.ac.uk/projects/fastqc/"
+ url = "http://www.bioinformatics.babraham.ac.uk/projects/fastqc/fastqc_v0.11.5.zip"
+
+ version('0.11.5', '3524f101c0ab0bae77c7595983170a76')
+
+ depends_on('jdk', type='run')
+ depends_on('perl') # for fastqc "script", any perl will do
+
+ patch('fastqc.patch', level=0)
+
+ def install(self, spec, prefix):
+ mkpath(self.prefix.bin)
+ mkpath(self.prefix.lib)
+ copy_file('fastqc', self.prefix.bin)
+ for j in ['cisd-jhdf5.jar', 'jbzip2-0.9.jar', 'sam-1.103.jar']:
+ copy_file(j, self.prefix.lib)
+ for d in ['Configuration', 'net', 'org', 'Templates', 'uk']:
+ copy_tree(d, join_path(self.prefix.lib, d))
+ chmod = which('chmod')
+ chmod('+x', join_path(self.prefix.bin, 'fastqc'))
+
+ # In theory the 'run' dependency on 'jdk' above should take
+ # care of this for me. In practice, it does not.
+ def setup_environment(self, spack_env, env):
+ """Add <prefix> to the path; the package has a script at the
+ top level.
+ """
+ env.prepend_path('PATH', join_path(self.spec['jdk'].prefix, 'bin'))