#!/usr/bin/python3

import sys, os
use_message = '''
'''

def get_aligners():
    mac = (sys.platform == "darwin")
    if not os.path.exists("aligners"):
        os.mkdir("aligners")
    os.chdir("aligners")
    if not os.path.exists("bin"):
        os.mkdir("bin")
    programs = ["HISAT", "Bowtie2", "Bowtie", "TopHat2", "STAR", "GSNAP", "BWA", "StringTie", "Cufflinks", "minimap2"]
    for program in programs:
        if program == "HISAT":
            dir = "hisat-0.1.6-beta"
            if os.path.exists(dir):
                continue
            fname = dir + "-source.zip"
            url = "http://www.ccb.jhu.edu/software/hisat/downloads"
            bins =  "hisat-align-s hisat-build-s hisat-inspect-s"
            installs = bins + " hisat hisat-build hisat-inspect"
            cmd = "wget %s/%s; unzip %s; cd %s; make %s; cp %s ../bin; cd .." % \
                (url, fname, fname, dir, bins, installs)
        elif program == "Bowtie2":
            dir = "bowtie2-2.3.4.3"
            if os.path.exists(dir):
                continue
            fname = dir + "-source.zip"
            url = "http://sourceforge.net/projects/bowtie-bio/files/bowtie2/2.3.4.3"
            bins = "bowtie2-align-s bowtie2-build-s bowtie2-inspect-s"
            installs = bins + " bowtie2 bowtie2-build bowtie2-inspect"
            cmd = "wget %s/%s; unzip %s; cd %s; make NO_TBB=1 %s; cp %s ../bin; cd .." % \
                (url, fname, fname, dir, bins, installs)
        elif program == "Bowtie":
            dir = "bowtie-1.1.2"
            if os.path.exists(dir):
                continue
            fname = dir + "-src.zip"
            url = "http://sourceforge.net/projects/bowtie-bio/files/bowtie/1.1.2"
            bins = "bowtie-align-s bowtie-build-s bowtie-inspect-s"
            installs = bins + " bowtie bowtie-build bowtie-inspect"
            cmd = "wget %s/%s; unzip %s; cd %s; make %s; cp %s ../bin; cd .." % \
                (url, fname, fname, dir, bins, installs)
        elif program == "minimap2":
            dir = "minimap2-2.12"
            if os.path.exists(dir):
                continue
            fname = dir + ".tar.bz2"
            #https://github.com/lh3/minimap2/releases/download/v2.12/minimap2-2.12.tar.bz2
            url = "https://github.com/lh3/minimap2/releases/download/v2.12"
            bins = "minimap2"
            cmd = "wget %s/%s; tar jxvf %s; cd %s; make ; cp %s ../bin; cd .." % \
                (url, fname, fname, dir,bins)
        elif program == "TopHat2":
            if mac:
                dir = "tophat-2.1.0.OSX_x86_64"
            else:
                dir = "tophat-2.1.0.Linux_x86_64"
            if os.path.exists(dir):
                continue
            fname = dir + ".tar.gz"
            url = "http://ccb.jhu.edu/software/tophat/downloads"
            installs = "gtf_juncs juncs_db prep_reads segment_juncs tophat tophat_reports sra_to_solid samtools_0.1.18 map2gtf fix_map_ordering bam_merge long_spanning_reads sam_juncs gtf_to_fasta bam2fastx"
            cmd = "wget %s/%s; tar xvzf %s; cd %s; cp %s ../bin; cd .." % \
                (url, fname, fname, dir, installs)
        elif program == "STAR":
            dir = "2.5.2b"
            if os.path.exists("STAR-" + dir):
                continue
            fname = dir + ".tar.gz"
            url = "https://github.com/alexdobin/STAR/archive"
            if mac:
                add_cmd = "awk '{if($1 ~ /^CXX/) {print \"CXX =/opt/local/bin/g++-mp-4.8\";} else {print;}}' Makefile > Makefile.tmp; mv Makefile.tmp Makefile"
                make_arg = "STARforMac"
                cmd = "wget %s/%s; tar xvzf %s; cd STAR-%s/source; %s; make; make %s; cp STAR ../../bin; cd ../.." % \
                    (url, fname, fname, dir, add_cmd, make_arg)
            else:
                cmd = "wget %s/%s; tar xvzf %s; cd STAR-%s/source; make; cp STAR ../../bin; cd ../.." % \
                    (url, fname, fname, dir)
        elif program == "GSNAP":
            dir = "gmap-2015-07-23"
            dir2 = "gmap-gsnap-2015-07-23"
            if os.path.exists(dir):
                continue
            fname = dir2 + ".tar.gz"
            url = "http://research-pub.gene.com/gmap/src"
            installs = "gmap gmapl get-genome gmapindex iit_store iit_get iit_dump gsnap gsnapl uniqscan uniqscanl snpindex cmetindex atoiindex sam_sort ../util/*"
            cmd = "wget %s/%s; tar xvzf %s; cd %s; ./configure; make; cd src; cp %s ../../bin; cd ../.." % \
                (url, fname, fname, dir, installs)
        elif program == "BWA":
            dir = "bwa-0.7.17"
            if os.path.exists(dir):
                continue
            url = "http://sourceforge.net/projects/bio-bwa/files/%s.tar.bz2" % (dir)
            installs = "bwa"
            cmd = "wget %s; tar xvjf %s.tar.bz2; cd %s; make; cp %s ../bin/; cd .." % (url, dir, dir, installs)
        elif program == "StringTie":
            dir = "stringtie-1.0.4"
            url = "http://ccb.jhu.edu/software/stringtie/dl"
            bins =  "stringtie"
            cmd = "wget %s/%s.tar.gz; tar xvzf %s.tar.gz; cd %s; make release; cp %s ../bin; cd .." % \
                (url, dir, dir, dir, bins)
        elif program == "Cufflinks":
            cmd = ""
        elif program == "vg":
            version = "v1.13.0"
            dir = program + "-" + version
            url = "https://github.com/vgteam/vg/releases/download/%s" % (version)
            cmd = "wget %s/%s.tar.gz; tar zxvf %s.tar.gz; cd %s" % (url, dir, dir, dir)
            cmd += "; source ./source_me.sh; make; cp bin/%s ../bin; cd .." % (program)
        else:
            assert False
        print(cmd, file=sys.stderr)
        os.system(cmd)

    files = ["hisat2", "hisat2-align-s", "hisat2-build", "hisat2-build-s", "hisat2-inspect", "hisat2-inspect-s", "extract_splice_sites.py", "hisat2_extract_snps_haplotypes_UCSC.py", "hisat2_simulate_reads.py"]
    os.chdir("bin")
    for file in files:
        if os.path.exists(file):
            continue
        os.system("ln -s ../../../%s %s" % (file, file))
    os.chdir("..")
    
    os.chdir("..")
            
    
if __name__ == "__main__":
    get_aligners()
