summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorToyohisa Kameyama <kameyama@riken.jp>2019-07-09 08:57:17 +0900
committerPeter Scheibel <scheibel1@llnl.gov>2019-07-08 16:57:17 -0700
commita718d8af083c7ce6f376e9801084bbe02669e7b9 (patch)
tree2a87924db62a5e08b41720db8077c340a3792926 /var
parent68dd327d62e2c3cc4afbac58a23e303e59426ec0 (diff)
downloadspack-a718d8af083c7ce6f376e9801084bbe02669e7b9.tar.gz
spack-a718d8af083c7ce6f376e9801084bbe02669e7b9.tar.bz2
spack-a718d8af083c7ce6f376e9801084bbe02669e7b9.tar.xz
spack-a718d8af083c7ce6f376e9801084bbe02669e7b9.zip
zoltan: use autotools for new architecture host (#11924)
* use autoreconf to regenerate configure script and config.guess for newer architectures * Add perl build dependency for older versions. The required perl version is constrained because the perl script uses syntax that is deprecated in older versions
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/zoltan/package.py126
1 files changed, 71 insertions, 55 deletions
diff --git a/var/spack/repos/builtin/packages/zoltan/package.py b/var/spack/repos/builtin/packages/zoltan/package.py
index 077396c9ea..d2d6ef2337 100644
--- a/var/spack/repos/builtin/packages/zoltan/package.py
+++ b/var/spack/repos/builtin/packages/zoltan/package.py
@@ -6,11 +6,9 @@
from spack import *
import re
-import os
-import glob
-class Zoltan(Package):
+class Zoltan(AutotoolsPackage):
"""The Zoltan library is a toolkit of parallel combinatorial algorithms
for parallel, unstructured, and/or adaptive scientific
applications. Zoltan's largest component is a suite of dynamic
@@ -43,15 +41,43 @@ class Zoltan(Package):
depends_on('parmetis@4:', when='+parmetis')
depends_on('metis', when='+parmetis')
+ depends_on('perl@:5.21', type='build', when='@:3.6')
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('m4', type='build')
+
conflicts('+parmetis', when='~mpi')
- def install(self, spec, prefix):
+ build_directory = 'spack-build'
+
+ @property
+ def configure_directory(self):
+ spec = self.spec
+
# FIXME: The older Zoltan versions fail to compile the F90 MPI wrappers
# because of some complicated generic type problem.
if spec.satisfies('@:3.6+fortran+mpi'):
raise RuntimeError(('Cannot build Zoltan v{0} with +fortran and '
'+mpi; please disable one of these features '
'or upgrade versions.').format(self.version))
+ if spec.satisfies('@:3.6'):
+ zoltan_path = 'Zoltan_v{0}'.format(self.version)
+ return zoltan_path
+ return '.'
+
+ @property
+ def parallel(self):
+ # NOTE: Earlier versions of Zoltan cannot be built in parallel
+ # because they contain nested Makefile dependency bugs.
+ return not self.spec.satisfies('@:3.6+fortran')
+
+ def autoreconf(self, spec, prefix):
+ autoreconf = which('autoreconf')
+ with working_dir(self.configure_directory):
+ autoreconf('-ivf')
+
+ def configure_args(self):
+ spec = self.spec
config_args = [
self.get_config_flag('f90interface', 'fortran'),
@@ -63,8 +89,10 @@ class Zoltan(Package):
]
if '+shared' in spec:
- config_args.append('RANLIB=echo')
- config_args.append('--with-ar=$(CXX) -shared $(LDFLAGS) -o')
+ config_args.extend([
+ 'RANLIB=echo',
+ '--with-ar=$(CXX) -shared $(LDFLAGS) -o'
+ ])
config_cflags.append(self.compiler.pic_flag)
if spec.satisfies('%gcc'):
config_args.append('--with-libs=-lgfortran')
@@ -72,66 +100,54 @@ class Zoltan(Package):
config_args.append('--with-libs=-lifcore')
if '+parmetis' in spec:
- config_args.append('--with-parmetis')
- config_args.append('--with-parmetis-libdir={0}'
- .format(spec['parmetis'].prefix.lib))
- config_args.append('--with-parmetis-incdir={0}'
- .format(spec['parmetis'].prefix.include))
- config_args.append('--with-incdirs=-I{0}'
- .format(spec['metis'].prefix.include))
- config_args.append('--with-ldflags=-L{0}'
- .format(spec['metis'].prefix.lib))
+ parmetis_prefix = spec['parmetis'].prefix
+ config_args.extend([
+ '--with-parmetis',
+ '--with-parmetis-libdir={0}'.format(parmetis_prefix.lib),
+ '--with-parmetis-incdir={0}'.format(parmetis_prefix.include),
+ '--with-incdirs=-I{0}'.format(spec['metis'].prefix.include),
+ '--with-ldflags=-L{0}'.format(spec['metis'].prefix.lib)
+ ])
if '+int64' in spec['metis']:
config_args.append('--with-id-type=ulong')
else:
config_args.append('--with-id-type=uint')
if '+mpi' in spec:
- config_args.append('CC={0}'.format(spec['mpi'].mpicc))
- config_args.append('CXX={0}'.format(spec['mpi'].mpicxx))
- config_args.append('FC={0}'.format(spec['mpi'].mpifc))
-
- config_args.append('--with-mpi={0}'.format(spec['mpi'].prefix))
-
- # NOTE: Zoltan assumes that it's linking against an MPI library
- # that can be found with '-lmpi' which isn't the case for many
- # MPI packages. We rely on the MPI-wrappers to automatically add
- # what is required for linking and thus pass an empty list of libs
- config_args.append('--with-mpi-libs= ')
+ config_args.extend([
+ 'CC={0}'.format(spec['mpi'].mpicc),
+ 'CXX={0}'.format(spec['mpi'].mpicxx),
+ 'FC={0}'.format(spec['mpi'].mpifc),
+ '--with-mpi={0}'.format(spec['mpi'].prefix),
+
+ # NOTE: Zoltan assumes that it's linking against an MPI library
+ # that can be found with '-lmpi' which isn't the case for many
+ # MPI packages. We rely on the MPI-wrappers to automatically
+ # add what is required for linking and thus pass an empty
+ # list of libs
+ '--with-mpi-libs= '
+ ])
# NOTE: Early versions of Zoltan come packaged with a few embedded
# library packages (e.g. ParMETIS, Scotch), which messes with Spack's
# ability to descend directly into the package's source directory.
- source_directory = self.stage.source_path
- if spec.satisfies('@:3.6'):
- zoltan_directory = 'Zoltan_v{0}'.format(self.version)
- source_directory = join_path(source_directory, zoltan_directory)
-
- build_directory = join_path(source_directory, 'build')
- with working_dir(build_directory, create=True):
- config = Executable(join_path(source_directory, 'configure'))
- config(
- '--prefix={0}'.format(prefix),
- '--with-cflags={0}'.format(' '.join(config_cflags)),
- '--with-cxxflags={0}'.format(' '.join(config_cflags)),
- '--with-fcflags={0}'.format(' '.join(config_cflags)),
- *config_args
- )
-
- # NOTE: Earlier versions of Zoltan cannot be built in parallel
- # because they contain nested Makefile dependency bugs.
- make(parallel=not spec.satisfies('@:3.6+fortran'))
- make('install')
-
- # NOTE: Unfortunately, Zoltan doesn't provide any configuration
- # options for the extension of the output library files, so this
- # script must change these extensions as a post-processing step.
- if '+shared' in spec:
- for lib_path in glob.glob(join_path(prefix, 'lib', '*.a')):
- lib_static_name = os.path.basename(lib_path)
+ config_args.extend([
+ '--with-cflags={0}'.format(' '.join(config_cflags)),
+ '--with-cxxflags={0}'.format(' '.join(config_cflags)),
+ '--with-fcflags={0}'.format(' '.join(config_cflags))
+ ])
+ return config_args
+
+ # NOTE: Unfortunately, Zoltan doesn't provide any configuration
+ # options for the extension of the output library files, so this
+ # script must change these extensions as a post-processing step.
+ @run_after('install')
+ def solib_install(self):
+ if '+shared' in self.spec:
+ for lib_path in find(self.spec.prefix.lib, 'lib*.a'):
lib_shared_name = re.sub(r'\.a$', '.{0}'.format(dso_suffix),
- lib_static_name)
- move(lib_path, join_path(prefix, 'lib', lib_shared_name))
+ lib_path)
+ move(lib_path, lib_shared_name)
def get_config_flag(self, flag_name, flag_variant):
flag_pre = 'en' if '+{0}'.format(flag_variant) in self.spec else 'dis'