
* Style: black 23, skip magic trailing commas * isort should use same line length as black * Fix unused import * Update version of black used in CI * Update new packages * Update new packages
183 lines
7.9 KiB
Python
183 lines
7.9 KiB
Python
# 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.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")
|
|
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 self.version >= Version("3.3.1-tag1"):
|
|
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):
|
|
if self.version >= Version("3.4.0"):
|
|
htslib = self.spec["htslib"].prefix
|
|
env.set("HTSLIBDIR", htslib)
|
|
|
|
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"))
|