diff --git a/gnu-system.am b/gnu-system.am index e42e89ab80..a500ec7328 100644 --- a/gnu-system.am +++ b/gnu-system.am @@ -375,6 +375,7 @@ dist_patch_DATA = \ gnu/packages/patches/cpio-CVE-2014-9112-pt5.patch \ gnu/packages/patches/cpio-gets-undeclared.patch \ gnu/packages/patches/cpufrequtils-fix-aclocal.patch \ + gnu/packages/patches/crossmap-allow-system-pysam.patch \ gnu/packages/patches/cssc-gets-undeclared.patch \ gnu/packages/patches/cssc-missing-include.patch \ gnu/packages/patches/clucene-contribs-lib.patch \ diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm index de25f8c7b5..0960329f44 100644 --- a/gnu/packages/bioinformatics.scm +++ b/gnu/packages/bioinformatics.scm @@ -272,6 +272,48 @@ gapped, local, and paired-end alignment modes.") "CLIPper is a tool to define peaks in CLIP-seq datasets.") (license license:gpl2))) +(define-public crossmap + (package + (name "crossmap") + (version "0.1.6") + (source (origin + (method url-fetch) + (uri (string-append "mirror://sourceforge/crossmap/CrossMap-" + version ".tar.gz")) + (sha256 + (base32 + "163hi5gjgij6cndxlvbkp5jjwr0k4wbm9im6d2210278q7k9kpnp")) + ;; patch has been sent upstream already + (patches (list + (search-patch "crossmap-allow-system-pysam.patch"))) + (modules '((guix build utils))) + ;; remove bundled copy of pysam + (snippet + '(delete-file-recursively "lib/pysam")))) + (build-system python-build-system) + (arguments + `(#:python ,python-2 + #:phases + (alist-cons-after + 'unpack 'set-env + (lambda _ (setenv "CROSSMAP_USE_SYSTEM_PYSAM" "1")) + %standard-phases))) + (inputs + `(("python-numpy" ,python2-numpy) + ("python-pysam" ,python2-pysam) + ("zlib" ,zlib))) + (native-inputs + `(("python-cython" ,python2-cython) + ("python-nose" ,python2-nose) + ("python-setuptools" ,python2-setuptools))) + (home-page "http://crossmap.sourceforge.net/") + (synopsis "Convert genome coordinates between assemblies") + (description + "CrossMap is a program for conversion of genome coordinates or annotation +files between different genome assemblies. It supports most commonly used +file formats including SAM/BAM, Wiggle/BigWig, BED, GFF/GTF, VCF.") + (license license:gpl2+))) + (define-public flexbar (package (name "flexbar") diff --git a/gnu/packages/patches/crossmap-allow-system-pysam.patch b/gnu/packages/patches/crossmap-allow-system-pysam.patch new file mode 100644 index 0000000000..611c4ff74d --- /dev/null +++ b/gnu/packages/patches/crossmap-allow-system-pysam.patch @@ -0,0 +1,121 @@ +This patch modifies the build process such that the bundled copy of pysam does +not need to be built if CROSSMAP_USE_SYSTEM_PYSAM is set and the pysam module +can be imported. + +Upstream has agreed to apply the patch in the next maintenance release of +crossmap. The patch has already been uploaded to +http://sourceforge.net/projects/crossmap/files/patch/. + +diff --git a/setup.py b/setup.py +--- a/setup.py 2015-02-26 15:28:49.771189185 +0100 ++++ b/setup.py 2015-02-26 15:55:03.440327752 +0100 +@@ -19,6 +19,15 @@ + except: + have_numpy = False + ++try: ++ import pysam ++ if os.environ['CROSSMAP_USE_SYSTEM_PYSAM']: ++ have_pysam = True ++ else: ++ have_pysam = False ++except ImportError: ++ have_pysam = False ++ + if platform.system()=='Windows': + print >> sys.stderr, "Sorry, Windows platform is not supported!" + sys.exit() +@@ -165,49 +174,50 @@ + + + #================= pysam samtools ==================== +- extensions.append(Extension( +- "pysam.csamtools", +- csamtools_sources + [ "lib/pysam/%s" % x for x in ("pysam_util.c", )] +\ +- glob.glob( os.path.join( "lib/samtools", "*.pysam.c" )) +\ +- os_c_files + \ +- glob.glob( os.path.join( "lib/samtools", "*", "*.pysam.c" ) ), +- library_dirs=[], +- include_dirs=[ "lib/samtools", "lib/pysam" ] + include_os, +- libraries=[ "z", ], +- language="c", +- define_macros = [('_FILE_OFFSET_BITS','64'),('_USE_KNETFILE','')], +- )) +- +- extensions.append(Extension( +- "pysam.ctabix", +- tabix_sources + [ "lib/pysam/%s" % x for x in ( "tabix_util.c", )] +\ +- os_c_files + \ +- glob.glob( os.path.join( "lib/tabix", "*.pysam.c" ) ), +- library_dirs=[], +- include_dirs=[ "lib/tabix", "lib/pysam" ] + include_os, +- libraries=[ "z", ], +- language="c", +- define_macros = [('_FILE_OFFSET_BITS','64'), +- ('_USE_KNETFILE','')], +- )) +- +- extensions.append(Extension( +- "pysam.TabProxies", +- tabproxies_sources + os_c_files, +- library_dirs=[], +- include_dirs= include_os, +- libraries=[ "z", ], +- language="c", +- )) +- +- extensions.append(Extension( +- "pysam.cvcf", +- cvcf_sources + os_c_files, +- library_dirs=[], +- include_dirs= ["lib/tabix",] + include_os, +- libraries=[ "z", ], +- language="c", +- )) ++ if not have_pysam: ++ extensions.append(Extension( ++ "pysam.csamtools", ++ csamtools_sources + [ "lib/pysam/%s" % x for x in ("pysam_util.c", )] +\ ++ glob.glob( os.path.join( "lib/samtools", "*.pysam.c" )) +\ ++ os_c_files + \ ++ glob.glob( os.path.join( "lib/samtools", "*", "*.pysam.c" ) ), ++ library_dirs=[], ++ include_dirs=[ "lib/samtools", "lib/pysam" ] + include_os, ++ libraries=[ "z", ], ++ language="c", ++ define_macros = [('_FILE_OFFSET_BITS','64'),('_USE_KNETFILE','')], ++ )) ++ ++ extensions.append(Extension( ++ "pysam.ctabix", ++ tabix_sources + [ "lib/pysam/%s" % x for x in ( "tabix_util.c", )] +\ ++ os_c_files + \ ++ glob.glob( os.path.join( "lib/tabix", "*.pysam.c" ) ), ++ library_dirs=[], ++ include_dirs=[ "lib/tabix", "lib/pysam" ] + include_os, ++ libraries=[ "z", ], ++ language="c", ++ define_macros = [('_FILE_OFFSET_BITS','64'), ++ ('_USE_KNETFILE','')], ++ )) ++ ++ extensions.append(Extension( ++ "pysam.TabProxies", ++ tabproxies_sources + os_c_files, ++ library_dirs=[], ++ include_dirs= include_os, ++ libraries=[ "z", ], ++ language="c", ++ )) ++ ++ extensions.append(Extension( ++ "pysam.cvcf", ++ cvcf_sources + os_c_files, ++ library_dirs=[], ++ include_dirs= ["lib/tabix",] + include_os, ++ libraries=[ "z", ], ++ language="c", ++ )) + + + return extensions