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.
This commit is contained in:
George Hartzell 2016-12-18 16:38:14 -08:00 committed by Todd Gamblin
parent 68e9a2ed8d
commit 6e1b3f621d
2 changed files with 90 additions and 0 deletions

View file

@ -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;

View file

@ -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'))