diff ezBAMQC/setup.py @ 0:dfa3745e5fd8

Uploaded
author youngkim
date Thu, 24 Mar 2016 17:12:52 -0400
parents
children 6610eedd9fae
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ezBAMQC/setup.py	Thu Mar 24 17:12:52 2016 -0400
@@ -0,0 +1,226 @@
+#!/usr/bin/env python2.7
+# Setup for ezBAMQC, utilities for the Sequence Alignment/Map format.
+#
+#    Copyright (C) 2015 Bioinformatics Shared Resource, CSHL.
+#    Portions copyright (C) 2015 Cold Spring Harbor Laboratory.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+# DEALINGS IN THE SOFTWARE.
+
+import argparse
+import sys, os, glob, fnmatch
+
+## Added 10 Jan 2008
+from distutils.core import setup, Extension
+import distutils.command.install_data
+
+## Code borrowed from wxPython's setup and config files
+## Thanks to Robin Dunn for the suggestion.
+## I am not 100% sure what's going on, but it works!
+def opj(*args):
+    path = os.path.join(*args)
+    return os.path.normpath(path)
+
+## Added 10 Jan 2008
+# Specializations of some distutils command classes
+class wx_smart_install_data(distutils.command.install_data.install_data):
+    """need to change self.install_dir to the actual library dir"""
+    def run(self):
+        install_cmd = self.get_finalized_command('install')
+        self.install_dir = getattr(install_cmd, 'install_lib')
+        return distutils.command.install_data.install_data.run(self)
+
+def find_data_files(srcdir, *wildcards, **kw):
+    # get a list of all files under the srcdir matching wildcards,
+    # returned in a format to be used for install_data
+    def walk_helper(arg, dirname, files):
+        if '.svn' in dirname:
+            return
+        names = []
+        lst, wildcards = arg
+        for wc in wildcards:
+            wc_name = opj(dirname, wc)
+            for f in files:
+                filename = opj(dirname, f)
+
+                if fnmatch.fnmatch(filename, wc_name) and not os.path.isdir(filename):
+                    names.append(filename)
+        if names:
+            lst.append( (dirname, names ) )
+
+    file_list = []
+    recursive = kw.get('recursive', True)
+    if recursive:
+        os.path.walk(srcdir, walk_helper, (file_list, wildcards))
+    else:
+        walk_helper((file_list, wildcards),
+                    srcdir,
+                    [os.path.basename(f) for f in glob.glob(opj(srcdir, '*'))])
+    return file_list
+
+## This is a list of files to install, and where:
+## Make sure the MANIFEST.in file points to all the right 
+## directories too.
+files = find_data_files('ezBAMQC/', '*.*')
+
+from distutils.core import setup
+
+def readme():
+	with open('README.rst') as f:
+		return f.read()
+
+if sys.version_info[0] != 2 or sys.version_info[1] < 7:
+	print >> sys.stderr, "ERROR: ezBAMQC requires Python 2.7"
+	sys.exit()
+
+BAMQC_HEADER = [
+    'src/bamqc/Constants.h',
+    'src/bamqc/Coverage_prof.h',
+    'src/bamqc/GeneFeatures.h',
+    'src/bamqc/InnerDist_prof.h',
+    'src/bamqc/IntervalTree.h',
+    'src/bamqc/Mappability.h',
+    'src/bamqc/parseBAM.h',
+    'src/bamqc/ReadDup_prof.h',
+    'src/bamqc/Results.h',
+    'src/bamqc/rRNA.h'
+]
+
+BAMQC_SOURCE = [
+    'src/bamqc/Coverage_prof.cpp',
+    'src/bamqc/GeneFeatures.cpp',
+    'src/bamqc/InnerDist_prof.cpp',
+    'src/bamqc/IntervalTree.cpp',
+    'src/bamqc/Mappability.cpp',
+    'src/bamqc/parseBAM.cpp',
+    'src/bamqc/ReadDup_prof.cpp',
+    'src/bamqc/Results.cpp',
+    'src/bamqc/rRNA.cpp'
+]
+
+###TODO HAVE TO SPLIT INTO TWO AND MAKE THE A FILE
+HTSLIB_PUBLIC_HEADERS = [
+	'src/htslib/bgzf.h',
+	'src/htslib/faidx.h',
+	'src/htslib/hfile.h',
+	'src/htslib/hts.h',
+	'src/htslib/hts_defs.h',
+	'src/htslib/khash.h',
+	'src/htslib/klist.h',
+	'src/htslib/knetfile.h',
+	'src/htslib/kseq.h',
+	'src/htslib/ksort.h',
+	'src/htslib/kstring.h',
+	'src/htslib/regidx.h',
+	'src/htslib/sam.h',
+	'src/htslib/synced_bcf_reader.h',
+	'src/htslib/tbx.h',
+	'src/htslib/vcf.h',
+	'src/htslib/vcf_sweep.h',
+	'src/htslib/vcfutils.h'
+]
+
+
+HTSLIB = [
+	'src/htslib/bgzf.c',
+	'src/htslib/faidx.c',
+	'src/htslib/hfile.c',
+	'src/htslib/hfile_net.c',
+	'src/htslib/hts.c',
+    'src/htslib/kfunc.c',
+	'src/htslib/knetfile.c',
+	'src/htslib/kstring.c',
+	'src/htslib/regidx.c',
+	'src/htslib/sam.c',
+	'src/htslib/synced_bcf_reader.c',
+	'src/htslib/tbx.c',
+	'src/htslib/vcf.c',
+	'src/htslib/vcfutils.c',
+	'src/htslib/cram/cram_codecs.c',
+	'src/htslib/cram/cram_decode.c',
+	'src/htslib/cram/cram_encode.c',
+	'src/htslib/cram/cram_index.c',
+	'src/htslib/cram/cram_io.c',
+	'src/htslib/cram/cram_samtools.c',
+	'src/htslib/cram/cram_stats.c',
+	'src/htslib/cram/files.c',
+	'src/htslib/cram/mFILE.c',
+	'src/htslib/cram/md5.c',
+	'src/htslib/cram/open_trace_file.c',
+	'src/htslib/cram/pooled_alloc.c',
+    'src/htslib/cram/rANS_static.c',
+	'src/htslib/cram/sam_header.c',
+	'src/htslib/cram/string_alloc.c',
+	'src/htslib/cram/thread_pool.c',
+	'src/htslib/cram/vlen.c',
+	'src/htslib/cram/zfio.c'
+]
+
+BAMqc_CFLAGS = ['-fpermissive','-O3','-std=c++11','-Wno-error=declaration-after-statement'] 
+BAMqc_DFLAGS = [('_FILE_OFFSET_BITS','64'),('_LARGEFILE64_SOURCE',''),('_CURSES_LIB','1')]
+BAMqc_INCLUDES = ['./src/htslib']
+BAMqc_HEADERS = ['./src/bamqc']
+BAMqc_EXTRA = ['build/lib.linux-x86_64-2.7/htslib.so']
+
+htslib_CFLAGS = ['-Wno-error=declaration-after-statement']
+htslib_HEADERS = ['./src/htslib','./src/htslib/htslib','./src/htslib/cram']
+htslib_DFLAGS = [('_FILE_OFFSET_BITS','64'),('_USE_KNETFILE','')]
+
+setup(name = "ezBAMQC",
+    version = "0.6.5",
+    description = 'Quality control tools for NGS alignment file',
+    keywords = 'Quality control BAM file',
+	# make sure to add all the nessacary requires
+    dependency_links=['https://gcc.gnu.org/gcc-4.8/','https://www.r-project.org/','https://cran.r-project.org/web/packages/corrplot/'],
+    cmdclass = { 'install_data':    wx_smart_install_data },
+    scripts = ["ezBAMQC"],
+    author = "Ying Jin",
+    author_email ="yjin@cshl.edu",
+    license='GPLv3',
+    platforms = ['Linux'],
+    url='http://hammelllab.labsites.cshl.edu/software#BAMqc',
+    long_description=readme(),
+    classifiers=[
+          'Development Status :: 4 - Beta',
+          'Natural Language :: English',
+          'License :: OSI Approved :: GNU General Public License v3 (GPLv3)',
+          'Topic :: Scientific/Engineering :: Bio-Informatics',
+          'Intended Audience :: Science/Research',
+          'Programming Language :: Python :: 2.7',
+          'Programming Language :: C++',
+          'Operating System :: Unix',
+    ],
+    zip_safe = False,
+    include_package_data=True,
+    ext_modules = [ 
+          Extension('htslib',
+                    sources = HTSLIB,
+                    include_dirs = htslib_HEADERS,
+                    extra_compile_args = htslib_CFLAGS,
+                    define_macros = htslib_DFLAGS,
+					libraries=['z']
+                    ),
+		  Extension('libBAMqc',
+                    sources = BAMQC_SOURCE, 
+                    extra_compile_args = BAMqc_CFLAGS,
+                    include_dirs = BAMqc_HEADERS + htslib_HEADERS,
+                    extra_objects = BAMqc_EXTRA,
+					define_macros = BAMqc_DFLAGS
+                    )
+          ]        
+    )