summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/arpack-ng
diff options
context:
space:
mode:
Diffstat (limited to 'var/spack/repos/builtin/packages/arpack-ng')
-rw-r--r--var/spack/repos/builtin/packages/arpack-ng/package.py111
1 files changed, 46 insertions, 65 deletions
diff --git a/var/spack/repos/builtin/packages/arpack-ng/package.py b/var/spack/repos/builtin/packages/arpack-ng/package.py
index 70b1b4820c..49feb262cb 100644
--- a/var/spack/repos/builtin/packages/arpack-ng/package.py
+++ b/var/spack/repos/builtin/packages/arpack-ng/package.py
@@ -2,11 +2,12 @@
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
-
+import spack.build_systems.autotools
+import spack.build_systems.cmake
from spack.package import *
-class ArpackNg(Package):
+class ArpackNg(CMakePackage, AutotoolsPackage):
"""ARPACK-NG is a collection of Fortran77 subroutines designed to solve
large scale eigenvalue problems.
@@ -38,6 +39,8 @@ class ArpackNg(Package):
url = "https://github.com/opencollab/arpack-ng/archive/3.3.0.tar.gz"
git = "https://github.com/opencollab/arpack-ng.git"
+ build_system("cmake", "autotools", default="cmake")
+
version("develop", branch="master")
version("3.8.0", sha256="ada5aeb3878874383307239c9235b716a8a170c6d096a6625bfd529844df003d")
version("3.7.0", sha256="972e3fc3cd0b9d6b5a737c9bf6fd07515c0d6549319d4ffb06970e64fa3cc2d6")
@@ -74,13 +77,14 @@ class ArpackNg(Package):
depends_on("blas")
depends_on("lapack")
- depends_on("automake", when="@3.3.0", type="build")
- depends_on("autoconf", when="@3.3.0", type="build")
- depends_on("libtool@2.4.2:", when="@3.3.0", type="build")
- depends_on("cmake@2.8.6:", when="@3.4.0:", type="build")
-
depends_on("mpi", when="+mpi")
+ with when("build_system=autotools"):
+ depends_on("automake", type="build")
+ depends_on("autoconf", type="build")
+ depends_on("libtool@2.4.2:", type="build")
+ depends_on("pkgconfig", type="build")
+
def flag_handler(self, name, flags):
spec = self.spec
iflags = []
@@ -105,36 +109,26 @@ class ArpackNg(Package):
return find_libraries(libraries, root=self.prefix, shared=True, recursive=True)
- @when("@:3.7.0 %gcc@10:")
- def setup_build_environment(self, env):
- # version up to and including 3.7.0 are not ported to gcc 10
- # https://github.com/opencollab/arpack-ng/issues/242
- env.set("FFLAGS", "-fallow-argument-mismatch")
-
- @when("@3.4.0:")
- def install(self, spec, prefix):
- options = ["-DEXAMPLES=ON"]
- options.extend(std_cmake_args)
- options.append("-DCMAKE_INSTALL_NAME_DIR:PATH=%s/lib" % prefix)
-
- # Make sure we use Spack's blas/lapack:
+class CMakeBuilder(spack.build_systems.cmake.CMakeBuilder):
+ def cmake_args(self):
+ spec = self.spec
lapack_libs = spec["lapack"].libs.joined(";")
blas_libs = spec["blas"].libs.joined(";")
- options.extend(
- [
- "-DLAPACK_FOUND=true",
- "-DLAPACK_INCLUDE_DIRS={0}".format(spec["lapack"].prefix.include),
- "-DLAPACK_LIBRARIES={0}".format(lapack_libs),
- "-DBLAS_FOUND=true",
- "-DBLAS_INCLUDE_DIRS={0}".format(spec["blas"].prefix.include),
- "-DBLAS_LIBRARIES={0}".format(blas_libs),
- ]
- )
-
- if "+mpi" in spec:
- options.append("-DMPI=ON")
+ options = [
+ self.define("EXAMPLES", "ON"),
+ self.define("CMAKE_INSTALL_NAME_DIR", self.prefix.lib),
+ self.define("LAPACK_FOUND", True),
+ self.define("LAPACK_INCLUDE_DIRS", spec["lapack"].prefix.include),
+ self.define("LAPACK_LIBRARIES", lapack_libs),
+ self.define("BLAS_FOUND", True),
+ self.define("BLAS_INCLUDE_DIRS", spec["blas"].prefix.include),
+ self.define("BLAS_LIBRARIES", blas_libs),
+ self.define_from_variant("MPI", "mpi"),
+ self.define_from_variant("BUILD_SHARED_LIBS", "shared"),
+ self.define("CMAKE_POSITION_INDEPENDENT_CODE", True),
+ ]
# If 64-bit BLAS is used:
if (
@@ -144,41 +138,28 @@ class ArpackNg(Package):
):
options.append("-DINTERFACE64=1")
- if "+shared" in spec:
- options.append("-DBUILD_SHARED_LIBS=ON")
- else:
- options.append("-DBUILD_SHARED_LIBS=OFF")
- options.append("-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=true")
-
- cmake(".", *options)
- make()
- if self.run_tests:
- make("test")
- make("install")
-
- @when("@3.3.0")
- def install(self, spec, prefix):
- # Apparently autotools are not bootstrapped
- which("libtoolize")()
- bootstrap = Executable("./bootstrap")
-
- options = ["--prefix=%s" % prefix]
+ return options
- if "+mpi" in spec:
- options.extend(["--enable-mpi", "F77=%s" % spec["mpi"].mpif77])
- options.extend(
- [
+class AutotoolsBuilder(spack.build_systems.autotools.AutotoolsBuilder):
+ def configure_args(self):
+ spec = self.spec
+ options = (
+ self.enable_or_disable("mpi")
+ + [
"--with-blas={0}".format(spec["blas"].libs.ld_flags),
"--with-lapack={0}".format(spec["lapack"].libs.ld_flags),
]
+ + self.enable_or_disable("shared")
)
- if "+shared" not in spec:
- options.append("--enable-shared=no")
-
- bootstrap()
- configure(*options)
- make()
- if self.run_tests:
- make("check")
- make("install")
+
+ if "+mpi" in spec:
+ options.append("F77={0}".format(spec["mpi"].mpif77))
+
+ return options
+
+ @when("@:3.7.0 %gcc@10:")
+ def setup_build_environment(self, env):
+ # version up to and including 3.7.0 are not ported to gcc 10
+ # https://github.com/opencollab/arpack-ng/issues/242
+ env.set("FFLAGS", "-fallow-argument-mismatch")