Update and Bugfix for pexsi/package.py (#8822)

* Update and Bugfix for pexsi/package.py

1. pexsi@0.10.2 is not compatible with superlu-dist@5.4.0 due to [Change LargeDiag to LargeDiag_MC64; Add LargeDiag_AWPM](d7dce5a348).
2. In the 'edit' phase, '@MPICXX_LIB' must be substituted before '@MPICXX' is substituted.

* change dict to list of tuples

Use a list of tuples to remember the order of `substitutions`.

* Update package.py

* Update package.py
This commit is contained in:
Takayuki Kobayashi 2018-08-03 01:24:57 +09:00 committed by Adam J. Stewart
parent da959ba220
commit 3a919c6abb

View File

@ -54,7 +54,7 @@ class Pexsi(MakefilePackage):
depends_on('parmetis') depends_on('parmetis')
depends_on('superlu-dist@3.3:3.999', when='@:0.9.0') depends_on('superlu-dist@3.3:3.999', when='@:0.9.0')
depends_on('superlu-dist@4.3:4.999', when='@0.9.2') depends_on('superlu-dist@4.3:4.999', when='@0.9.2')
depends_on('superlu-dist@5.1.2:', when='@0.10.2:') depends_on('superlu-dist@5.1.2:5.3.999', when='@0.10.2:')
variant( variant(
'fortran', default=False, description='Builds the Fortran interface' 'fortran', default=False, description='Builds the Fortran interface'
@ -64,27 +64,32 @@ class Pexsi(MakefilePackage):
def edit(self, spec, prefix): def edit(self, spec, prefix):
substitutions = { substitutions = [
'@MPICC': self.spec['mpi'].mpicc, ('@MPICC', self.spec['mpi'].mpicc),
'@MPICXX': self.spec['mpi'].mpicxx, ('@MPICXX_LIB', self.spec['mpi:cxx'].libs.joined()),
'@MPIFC': self.spec['mpi'].mpifc, ('@MPICXX', self.spec['mpi'].mpicxx),
'@MPICXX_LIB': self.spec['mpi:cxx'].libs.joined(), ('@MPIFC', self.spec['mpi'].mpifc),
'@RANLIB': 'ranlib', ('@RANLIB', 'ranlib'),
'@PEXSI_STAGE': self.stage.source_path, ('@PEXSI_STAGE', self.stage.source_path),
'@SUPERLU_PREFIX': self.spec['superlu-dist'].prefix, ('@SUPERLU_PREFIX', self.spec['superlu-dist'].prefix),
'@METIS_PREFIX': self.spec['metis'].prefix, ('@METIS_PREFIX', self.spec['metis'].prefix),
'@PARMETIS_PREFIX': self.spec['parmetis'].prefix, ('@PARMETIS_PREFIX', self.spec['parmetis'].prefix),
'@LAPACK_PREFIX': self.spec['lapack'].prefix, ('@LAPACK_PREFIX', self.spec['lapack'].prefix),
'@BLAS_PREFIX': self.spec['blas'].prefix, ('@BLAS_PREFIX', self.spec['blas'].prefix),
'@LAPACK_LIBS': self.spec['lapack'].libs.joined(), ('@LAPACK_LIBS', self.spec['lapack'].libs.joined()),
'@BLAS_LIBS': self.spec['blas'].libs.joined(), ('@BLAS_LIBS', self.spec['blas'].libs.joined()),
# FIXME : what to do with compiler provided libraries ? # FIXME : what to do with compiler provided libraries ?
'@STDCXX_LIB': ' '.join(self.compiler.stdcxx_libs), ('@STDCXX_LIB', ' '.join(self.compiler.stdcxx_libs))
'@FLDFLAGS': '' ]
}
if '@0.9.2' in self.spec: if '@0.9.2' in self.spec:
substitutions['@FLDFLAGS'] = '-Wl,--allow-multiple-definition' substitutions.append(
('@FLDFLAGS', '-Wl,--allow-multiple-definition')
)
else:
substitutions.append(
('@FLDFLAGS', '')
)
template = join_path( template = join_path(
os.path.dirname(inspect.getmodule(self).__file__), os.path.dirname(inspect.getmodule(self).__file__),
@ -95,7 +100,7 @@ def edit(self, spec, prefix):
'make.inc' 'make.inc'
) )
shutil.copy(template, makefile) shutil.copy(template, makefile)
for key, value in substitutions.items(): for key, value in substitutions:
filter_file(key, value, makefile) filter_file(key, value, makefile)
def build(self, spec, prefix): def build(self, spec, prefix):