
* 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
105 lines
3.2 KiB
Python
105 lines
3.2 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)
|
|
|
|
|
|
from spack.package import *
|
|
|
|
|
|
class Hal(MakefilePackage):
|
|
"""HAL is a structure to efficiently store and index multiple
|
|
genome alignments and ancestral reconstructions.
|
|
|
|
HAL is a graph-based representation which provides several advantages
|
|
over matrix/block-based formats such as MAF, such as
|
|
improved scalability and the ability to perform queries with
|
|
respect to an arbitrary reference or subtree."""
|
|
|
|
homepage = "https://github.com/ComparativeGenomicsToolkit/hal"
|
|
url = "https://github.com/ComparativeGenomicsToolkit/hal/archive/release-V2.1.tar.gz"
|
|
|
|
version("2.1", "540255be1af55abf390359fe034b82d7e61bdf6c3277df3cc01259cd450994e5")
|
|
|
|
maintainers("ilbiondo")
|
|
|
|
# HAL expects to be compiled alongside sonlib so we need both the
|
|
# source version and python library version
|
|
|
|
depends_on("hdf5+cxx~mpi")
|
|
depends_on("sonlib", type="build")
|
|
depends_on("python", type="run")
|
|
depends_on("py-sonlib", type="run")
|
|
|
|
# As we install sonlib seperately the include.mk needs
|
|
# editing to comment out an include
|
|
|
|
def patch(self):
|
|
includemk = FileFilter("include.mk")
|
|
includemk.filter(
|
|
r"^include \$\{sonLibRootDir\}/include\.mk", "# include ${sonLibRootDir}/include.mk"
|
|
)
|
|
|
|
def setup_build_environment(self, env):
|
|
env.set("sonLibRootDir", self.spec["sonlib"].prefix)
|
|
|
|
def install(self, spec, prefix):
|
|
# First the easy bit
|
|
|
|
install_tree("bin", prefix.bin)
|
|
install_tree("lib", prefix.lib)
|
|
|
|
# Copy the rest of the "toolkit" as to a directory named hal
|
|
# in order that the python libraries can be found and used
|
|
|
|
haldirs = [
|
|
"alignmentDepth",
|
|
"analysis",
|
|
"api",
|
|
"assemblyHub",
|
|
"benchmarks",
|
|
"blockViz",
|
|
"doc",
|
|
"extra",
|
|
"extract",
|
|
"fasta",
|
|
"liftover",
|
|
"lod",
|
|
"maf",
|
|
"modify",
|
|
"mutations",
|
|
"objs",
|
|
"phyloP",
|
|
"randgen",
|
|
"stats",
|
|
"synteny",
|
|
"testdata",
|
|
"validate",
|
|
]
|
|
|
|
for folder in haldirs:
|
|
install_tree(folder, join_path(self.prefix, "hal", folder))
|
|
|
|
install("__init__.py", join_path(self.prefix, "hal"))
|
|
|
|
# Now in order to make things useful we copy some python tools to bin
|
|
|
|
halpyfiles = [
|
|
"analysis/halContiguousRegions.py",
|
|
"assemblyHub/hal2assemblyHub.py",
|
|
"liftover/halLiftoverStatus.py",
|
|
"lod/halLodBenchmark.py",
|
|
"lod/halLodInterpolate.py",
|
|
"maf/hal2mafMP.py",
|
|
"phyloP/halPhyloPMP.py",
|
|
]
|
|
|
|
for pyfile in halpyfiles:
|
|
install(pyfile, self.prefix.bin)
|
|
|
|
# The hal directory is a python library so we set the path
|
|
# to be the installation root
|
|
|
|
def setup_run_environment(self, env):
|
|
env.prepend_path("PYTHONPATH", self.prefix)
|