diff options
Diffstat (limited to 'var/spack/repos/builtin/packages/arpack-ng')
-rw-r--r-- | var/spack/repos/builtin/packages/arpack-ng/package.py | 111 |
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") |