summaryrefslogblamecommitdiff
path: root/var/spack/repos/builtin/packages/augustus/package.py
blob: e0e002d6fcef81e8d672f6538359606b4fab8196 (plain) (tree)
1
2
3
4
5
6
7
8
9
                                                                         
                                                                         
 

                                              
           
 
                           
                                         
 


                                                              
                        
 
                                                           
                                                                            
 
                                   
                                                                                               





















                                                                                               




                                                                      
                          









                                              


                                                                              
                                                  

                                 

                                                                     
                                       







                                                                                     
 
                                                      
                     






                                                   
         

                                                                       
 
                                            
                                                                                           
 
                                  




































                                                                                                   
                                                    


                                                                                        

                                      





                                                                                                   
             








                                                                                                 
                     

                                                                                              

                                    


                                                                       
 
                         

                                              

                                                                 
                                     


                                                                
                                                                   




                                                                



                                               
                                        
 



                                                     
                                         

                                                                         
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

import glob

from spack.package import *
from spack.pkg.builtin.boost import Boost


class Augustus(MakefilePackage):
    """AUGUSTUS is a program that predicts genes in eukaryotic
    genomic sequences"""

    homepage = "https://bioinf.uni-greifswald.de/augustus/"
    url = "https://github.com/Gaius-Augustus/Augustus/archive/v3.3.4.tar.gz"

    # Releases have moved to github
    version("3.5.0", sha256="5ed6ce6106303b800c5e91d37a250baff43b20824657b853ae04d11ad8bdd686")
    version("3.4.0", sha256="2c06cf5953da5afdce1478fa10fcd3c280a3b050f1b2367bf3e731d7374d9bb8")
    version("3.3.2", sha256="d09f972cfd88deb34b19b69878eb8af3bbbe4f1cde1434b69cedc2aa6247a0f2")
    version(
        "3.3.1-tag1",
        sha256="011379606f381ee21b9716f83e8a1a57b2aaa01aefeebd2748104efa08c47cab",
        url="https://github.com/Gaius-Augustus/Augustus/archive/v3.3.1-tag1.tar.gz",
    )
    version(
        "3.3",
        sha256="b5eb811a4c33a2cc3bbd16355e19d530eeac6d1ac923e59f48d7a79f396234ee",
        url="https://bioinf.uni-greifswald.de/augustus/binaries/old/augustus-3.3.tar.gz",
    )
    version(
        "3.2.3",
        sha256="a1af128aefd228dea0c46d6f5234910fdf068a2b9133175ca8da3af639cb4514",
        url="https://bioinf.uni-greifswald.de/augustus/binaries/old/augustus-3.2.3.tar.gz",
    )

    depends_on("perl", type=("build", "run"))
    depends_on("python", when="@3.3.1:", type=("build", "run"))
    depends_on("bamtools")
    depends_on("gsl")

    # TODO: replace this with an explicit list of components of Boost,
    # for instance depends_on('boost +filesystem')
    # See https://github.com/spack/spack/pull/22303 for reference
    depends_on(Boost.with_default_variants)
    depends_on("zlib-api")
    depends_on("htslib")
    depends_on("bcftools")
    depends_on("samtools")
    depends_on("ncurses")
    depends_on("curl", when="@3.3.1:")
    depends_on("sqlite", when="@3.4.0:")
    depends_on("mysql-client", when="@3.4.0:")
    depends_on("mysqlpp", when="@3.4.0:")
    depends_on("lp-solve", when="@3.4.0:")
    depends_on("suite-sparse", when="@3.4.0:")

    # Trying to use filter_file here got too complicated so use a patch with a
    # corresponding environment variable
    patch("bam2wig_Makefile.patch", when="@3.4.0")

    def edit(self, spec, prefix):
        # Set compile commands for each compiler and
        # Fix for using 'boost' on Spack. (only after ver.3.3.1-tag1)
        if "@3.3.1-tag1:3.4.0" in spec:
            with working_dir(join_path("auxprogs", "utrrnaseq", "Debug")):
                filter_file("g++", spack_cxx, "makefile", string=True)
                filter_file(
                    "g++ -I/usr/include/boost",
                    "{0} -I{1}".format(spack_cxx, self.spec["boost"].prefix.include),
                    "src/subdir.mk",
                    string=True,
                )

        # Makefiles to set spack compiler over gcc/g++
        makefiles = [
            "auxprogs/aln2wig/Makefile",
            "auxprogs/bam2hints/Makefile",
            "auxprogs/bam2wig/Makefile",
            "auxprogs/compileSpliceCands/Makefile",
            "auxprogs/homGeneMapping/src/Makefile",
            "auxprogs/joingenes/Makefile",
            "src/Makefile",
        ]
        if self.version < Version("3.4.0"):
            makefiles.append("auxprogs/checkTargetSortedness/Makefile")

        if self.version >= Version("3.4.0"):
            makefiles.extend(["auxprogs/filterBam/src/Makefile", "src/unittests/Makefile"])

        for makefile in makefiles:
            filter_file("gcc", spack_cc, makefile, string=True)
            filter_file("g++", spack_cxx, makefile, string=True)

        bamtools = self.spec["bamtools"].prefix
        bcftools = self.spec["bcftools"].prefix
        htslib = self.spec["htslib"].prefix
        samtools = self.spec["samtools"].prefix

        with working_dir(join_path("auxprogs", "filterBam", "src")):
            makefile = FileFilter("Makefile")
            makefile.filter("BAMTOOLS = .*", "BAMTOOLS = {0}".format(bamtools))
            makefile.filter("INCLUDES = *", "INCLUDES = -I$(BAMTOOLS)/include/bamtools ")
            if "bamtools@2.5:" in spec:
                makefile.filter(
                    "LIBS = -lbamtools -lz", "LIBS = $(BAMTOOLS)/lib64" "/libbamtools.a -lz"
                )
            if "bamtools@:2.4" in spec:
                makefile.filter(
                    "LIBS = -lbamtools -lz", "LIBS = $(BAMTOOLS)/lib/bamtools" "/libbamtools.a -lz"
                )
        with working_dir(join_path("auxprogs", "bam2hints")):
            makefile = FileFilter("Makefile")
            makefile.filter("/usr/include/bamtools", "{0}/include/bamtools".format(bamtools))
            if "bamtools@2.5:" in spec:
                makefile.filter(
                    "LIBS = -lbamtools -lz",
                    "LIBS = {0}/lib64" "/libbamtools.a -lz".format(bamtools),
                )
            if "bamtools@:2.4" in spec:
                makefile.filter(
                    "LIBS = -lbamtools -lz",
                    "LIBS = {0}/lib/bamtools" "/libbamtools.a -lz".format(bamtools),
                )

        if self.version < Version("3.4.0"):
            with working_dir(join_path("auxprogs", "bam2wig")):
                makefile = FileFilter("Makefile")
                # point tools to spack installations
                makefile.filter("BCFTOOLS=.*$", "BCFTOOLS={0}/include".format(bcftools))
                makefile.filter("SAMTOOLS=.*$", "SAMTOOLS={0}/include".format(samtools))
                makefile.filter("HTSLIB=.*$", "HTSLIB={0}/include".format(htslib))

                # fix bad linking dirs
                makefile.filter("$(SAMTOOLS)/libbam.a", "$(SAMTOOLS)/../lib/libbam.a", string=True)
                makefile.filter("$(HTSLIB)/libhts.a", "$(HTSLIB)/../lib/libhts.a", string=True)
            with working_dir(join_path("auxprogs", "checkTargetSortedness")):
                makefile = FileFilter("Makefile")
                makefile.filter("SAMTOOLS.*=.*$", "SAMTOOLS={0}/include".format(samtools))
                makefile.filter("LIBS=-lbam", "LIBS=$(SAMTOOLS)/../lib/libbam.a", string=True)
        else:
            mysql = self.spec["mysql-client"].prefix
            mysqlpp = self.spec["mysqlpp"].prefix
            lpsolve = self.spec["lp-solve"].prefix

            with working_dir("src"):
                makefile = FileFilter("Makefile")
                makefile.filter(r"/usr/include/mysql\+\+", "{0}/include/mysql++".format(mysqlpp))
                if "^mariadb-c-client" in spec:
                    makefile.filter("/usr/include/mysql", "{0}/include/mariadb".format(mysql))
                else:
                    makefile.filter("/usr/include/mysql", "{0}/include/mysql".format(mysql))
                makefile.filter("/usr/include/lpsolve", "{0}/include/lpsolve".format(lpsolve))

    def install(self, spec, prefix):
        install_tree("bin", join_path(self.spec.prefix, "bin"))
        install_tree("config", join_path(self.spec.prefix, "config"))
        install_tree("scripts", join_path(self.spec.prefix, "scripts"))

    @run_after("install")
    def filter_sbang(self):
        with working_dir(self.prefix.scripts):
            pattern = "^#!.*"
            repl = "#!{0}".format(self.spec["perl"].command.path)
            files = glob.glob("*.pl")
            for file in files:
                filter_file(pattern, repl, *files, backup=False)

            repl = "#!{0}".format(self.spec["python"].command.path)
            files = glob.glob("*.py")
            for file in files:
                filter_file(pattern, repl, *files, backup=False)

    def setup_build_environment(self, env):
        htslib = self.spec["htslib"].prefix
        bamtools = self.spec["bamtools"].prefix

        if "@3.4.0" in self.spec:
            env.set("HTSLIBDIR", htslib)

        if "@3.5.0:" in self.spec:
            env.set("HTSLIB_INSTALL_DIR", htslib)
            env.set("BAMTOOLS_INSTALL_DIR", bamtools)

    def setup_run_environment(self, env):
        env.set("AUGUSTUS_CONFIG_PATH", join_path(self.prefix, "config"))
        env.prepend_path("PATH", join_path(self.prefix, "scripts"))